From 1211737f393cc5ff61f267e8be45d9555ef312dc Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Tue, 30 Jan 2024 17:06:39 +0530 Subject: [PATCH 01/70] chore: install next-intl packages --- package-lock.json | 352 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 353 insertions(+) diff --git a/package-lock.json b/package-lock.json index 3002485101..9cd132dfe4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,6 +65,7 @@ "next": "13.4.19", "next-connect": "^0.13.0", "next-i18next": "^12.1.0", + "next-intl": "^3.5.3", "next-useragent": "^2.7.0", "node-cache": "^5.1.2", "npm": "^10.2.2", @@ -3355,6 +3356,117 @@ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" }, + "node_modules/@formatjs/ecma402-abstract": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz", + "integrity": "sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==", + "dependencies": { + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/ecma402-abstract/node_modules/@formatjs/intl-localematcher": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", + "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/ecma402-abstract/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@formatjs/fast-memoize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz", + "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/fast-memoize/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz", + "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/icu-skeleton-parser": "1.3.6", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser/node_modules/@formatjs/ecma402-abstract": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", + "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==", + "dependencies": { + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser/node_modules/@formatjs/intl-localematcher": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz", + "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser/node_modules/@formatjs/ecma402-abstract": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", + "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==", + "dependencies": { + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser/node_modules/@formatjs/intl-localematcher": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.2.32", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.32.tgz", + "integrity": "sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl-localematcher/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, "node_modules/@hookform/devtools": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@hookform/devtools/-/devtools-4.3.1.tgz", @@ -18408,6 +18520,39 @@ "node": ">= 0.4" } }, + "node_modules/intl-messageformat": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz", + "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/fast-memoize": "1.2.1", + "@formatjs/icu-messageformat-parser": "2.1.0", + "tslib": "^2.1.0" + } + }, + "node_modules/intl-messageformat/node_modules/@formatjs/ecma402-abstract": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", + "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==", + "dependencies": { + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "node_modules/intl-messageformat/node_modules/@formatjs/intl-localematcher": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/intl-messageformat/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -21066,6 +21211,26 @@ "react": ">= 16.8.0" } }, + "node_modules/next-intl": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-3.5.3.tgz", + "integrity": "sha512-umcOmNX2cpbX/iMdhKOv/cEg4mJDda0KjrOFB8leINxwONe5VDuFJ3sw0RbE9wseN9P+CRGYZwWuuGHO1TLZMg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/amannn" + } + ], + "dependencies": { + "@formatjs/intl-localematcher": "^0.2.32", + "negotiator": "^0.6.3", + "use-intl": "^3.5.3" + }, + "peerDependencies": { + "next": "^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/next-unused": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/next-unused/-/next-unused-0.0.6.tgz", @@ -29780,6 +29945,18 @@ "react": ">=16.13" } }, + "node_modules/use-intl": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-3.5.3.tgz", + "integrity": "sha512-aM/OmcoTdRz4YazQAbKlMIscDp9kzvM8EYkQRluf7VZtCPtKHC6HYSKzrxuSHNZP1E8TVsFiHUGrb2dkBoyCYA==", + "dependencies": { + "@formatjs/ecma402-abstract": "^1.11.4", + "intl-messageformat": "^9.3.18" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/use-resize-observer": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", @@ -32977,6 +33154,127 @@ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" }, + "@formatjs/ecma402-abstract": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz", + "integrity": "sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==", + "requires": { + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + }, + "dependencies": { + "@formatjs/intl-localematcher": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", + "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", + "requires": { + "tslib": "^2.4.0" + } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@formatjs/fast-memoize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz", + "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==", + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@formatjs/icu-messageformat-parser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz", + "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==", + "requires": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/icu-skeleton-parser": "1.3.6", + "tslib": "^2.1.0" + }, + "dependencies": { + "@formatjs/ecma402-abstract": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", + "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==", + "requires": { + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "@formatjs/intl-localematcher": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@formatjs/icu-skeleton-parser": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz", + "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==", + "requires": { + "@formatjs/ecma402-abstract": "1.11.4", + "tslib": "^2.1.0" + }, + "dependencies": { + "@formatjs/ecma402-abstract": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", + "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==", + "requires": { + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "@formatjs/intl-localematcher": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@formatjs/intl-localematcher": { + "version": "0.2.32", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.32.tgz", + "integrity": "sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==", + "requires": { + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, "@hookform/devtools": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@hookform/devtools/-/devtools-4.3.1.tgz", @@ -44380,6 +44678,41 @@ "side-channel": "^1.0.4" } }, + "intl-messageformat": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz", + "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==", + "requires": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/fast-memoize": "1.2.1", + "@formatjs/icu-messageformat-parser": "2.1.0", + "tslib": "^2.1.0" + }, + "dependencies": { + "@formatjs/ecma402-abstract": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", + "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==", + "requires": { + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "@formatjs/intl-localematcher": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -46415,6 +46748,16 @@ "react-i18next": "^11.18.4" } }, + "next-intl": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-3.5.3.tgz", + "integrity": "sha512-umcOmNX2cpbX/iMdhKOv/cEg4mJDda0KjrOFB8leINxwONe5VDuFJ3sw0RbE9wseN9P+CRGYZwWuuGHO1TLZMg==", + "requires": { + "@formatjs/intl-localematcher": "^0.2.32", + "negotiator": "^0.6.3", + "use-intl": "^3.5.3" + } + }, "next-unused": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/next-unused/-/next-unused-0.0.6.tgz", @@ -52648,6 +52991,15 @@ "dequal": "^2.0.2" } }, + "use-intl": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-3.5.3.tgz", + "integrity": "sha512-aM/OmcoTdRz4YazQAbKlMIscDp9kzvM8EYkQRluf7VZtCPtKHC6HYSKzrxuSHNZP1E8TVsFiHUGrb2dkBoyCYA==", + "requires": { + "@formatjs/ecma402-abstract": "^1.11.4", + "intl-messageformat": "^9.3.18" + } + }, "use-resize-observer": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", diff --git a/package.json b/package.json index 57f7ec9f63..0425b9f738 100644 --- a/package.json +++ b/package.json @@ -98,6 +98,7 @@ "next": "13.4.19", "next-connect": "^0.13.0", "next-i18next": "^12.1.0", + "next-intl": "^3.5.3", "next-useragent": "^2.7.0", "node-cache": "^5.1.2", "npm": "^10.2.2", From 4600f257895f8f06872b236391ee6d2d45a58b36 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Tue, 30 Jan 2024 17:13:36 +0530 Subject: [PATCH 02/70] refactor: move pages into sites/[slug][locale] subfolder --- pages/sites/[slug]/{ => [locale]}/[p].tsx | 26 +++++------ pages/sites/[slug]/{ => [locale]}/all.tsx | 16 +++---- .../{ => [locale]}/claim/[type]/[code].tsx | 18 ++++---- .../[slug]/{ => [locale]}/complete-signup.tsx | 8 ++-- pages/sites/[slug]/{ => [locale]}/home.tsx | 20 ++++---- pages/sites/[slug]/{ => [locale]}/index.tsx | 28 +++++------ pages/sites/[slug]/{ => [locale]}/login.tsx | 10 ++-- .../[slug]/{ => [locale]}/profile/api-key.tsx | 10 ++-- .../profile/bulk-codes/[method]/[id].tsx | 20 ++++---- .../profile/bulk-codes/[method]/index.tsx | 14 +++--- .../profile/bulk-codes/index.tsx | 10 ++-- .../{ => [locale]}/profile/delete-account.tsx | 10 ++-- .../{ => [locale]}/profile/donation-link.tsx | 10 ++-- .../[slug]/{ => [locale]}/profile/edit.tsx | 10 ++-- .../{ => [locale]}/profile/giftfund/index.tsx | 10 ++-- .../[slug]/{ => [locale]}/profile/history.tsx | 22 ++++----- .../profile/impersonate-user.tsx | 14 +++--- .../[slug]/{ => [locale]}/profile/index.tsx | 46 ++++++++++--------- .../profile/payouts/add-bank-details.tsx | 14 +++--- .../payouts/edit-bank-details/[id].tsx | 10 ++-- .../{ => [locale]}/profile/payouts/index.tsx | 16 +++---- .../profile/payouts/schedule.tsx | 14 +++--- .../profile/planetcash/index.tsx | 12 ++--- .../{ => [locale]}/profile/planetcash/new.tsx | 12 ++--- .../profile/planetcash/transactions.tsx | 12 ++--- .../{ => [locale]}/profile/projects/[id].tsx | 24 +++++----- .../{ => [locale]}/profile/projects/index.tsx | 14 +++--- .../profile/projects/new-project.tsx | 16 +++---- .../{ => [locale]}/profile/recurrency.tsx | 20 ++++---- .../{ => [locale]}/profile/redeem/[code].tsx | 18 ++++---- .../{ => [locale]}/profile/register-trees.tsx | 10 ++-- .../profile/treemapper/data-explorer.tsx | 12 ++--- .../profile/treemapper/import.tsx | 14 +++--- .../profile/treemapper/index.tsx | 10 ++-- .../profile/treemapper/my-species.tsx | 14 +++--- .../[slug]/{ => [locale]}/profile/widgets.tsx | 12 ++--- pages/sites/[slug]/{ => [locale]}/s/[id].tsx | 10 ++-- pages/sites/[slug]/{ => [locale]}/t/[id].tsx | 28 +++++------ .../[slug]/{ => [locale]}/verify-email.tsx | 12 ++--- 39 files changed, 304 insertions(+), 302 deletions(-) rename pages/sites/[slug]/{ => [locale]}/[p].tsx (86%) rename pages/sites/[slug]/{ => [locale]}/all.tsx (86%) rename pages/sites/[slug]/{ => [locale]}/claim/[type]/[code].tsx (89%) rename pages/sites/[slug]/{ => [locale]}/complete-signup.tsx (88%) rename pages/sites/[slug]/{ => [locale]}/home.tsx (85%) rename pages/sites/[slug]/{ => [locale]}/index.tsx (82%) rename pages/sites/[slug]/{ => [locale]}/login.tsx (88%) rename pages/sites/[slug]/{ => [locale]}/profile/api-key.tsx (85%) rename pages/sites/[slug]/{ => [locale]}/profile/bulk-codes/[method]/[id].tsx (83%) rename pages/sites/[slug]/{ => [locale]}/profile/bulk-codes/[method]/index.tsx (84%) rename pages/sites/[slug]/{ => [locale]}/profile/bulk-codes/index.tsx (86%) rename pages/sites/[slug]/{ => [locale]}/profile/delete-account.tsx (85%) rename pages/sites/[slug]/{ => [locale]}/profile/donation-link.tsx (85%) rename pages/sites/[slug]/{ => [locale]}/profile/edit.tsx (82%) rename pages/sites/[slug]/{ => [locale]}/profile/giftfund/index.tsx (84%) rename pages/sites/[slug]/{ => [locale]}/profile/history.tsx (86%) rename pages/sites/[slug]/{ => [locale]}/profile/impersonate-user.tsx (76%) rename pages/sites/[slug]/{ => [locale]}/profile/index.tsx (68%) rename pages/sites/[slug]/{ => [locale]}/profile/payouts/add-bank-details.tsx (80%) rename pages/sites/[slug]/{ => [locale]}/profile/payouts/edit-bank-details/[id].tsx (86%) rename pages/sites/[slug]/{ => [locale]}/profile/payouts/index.tsx (79%) rename pages/sites/[slug]/{ => [locale]}/profile/payouts/schedule.tsx (80%) rename pages/sites/[slug]/{ => [locale]}/profile/planetcash/index.tsx (85%) rename pages/sites/[slug]/{ => [locale]}/profile/planetcash/new.tsx (85%) rename pages/sites/[slug]/{ => [locale]}/profile/planetcash/transactions.tsx (85%) rename pages/sites/[slug]/{ => [locale]}/profile/projects/[id].tsx (81%) rename pages/sites/[slug]/{ => [locale]}/profile/projects/index.tsx (78%) rename pages/sites/[slug]/{ => [locale]}/profile/projects/new-project.tsx (83%) rename pages/sites/[slug]/{ => [locale]}/profile/recurrency.tsx (82%) rename pages/sites/[slug]/{ => [locale]}/profile/redeem/[code].tsx (89%) rename pages/sites/[slug]/{ => [locale]}/profile/register-trees.tsx (85%) rename pages/sites/[slug]/{ => [locale]}/profile/treemapper/data-explorer.tsx (81%) rename pages/sites/[slug]/{ => [locale]}/profile/treemapper/import.tsx (78%) rename pages/sites/[slug]/{ => [locale]}/profile/treemapper/index.tsx (85%) rename pages/sites/[slug]/{ => [locale]}/profile/treemapper/my-species.tsx (78%) rename pages/sites/[slug]/{ => [locale]}/profile/widgets.tsx (86%) rename pages/sites/[slug]/{ => [locale]}/s/[id].tsx (88%) rename pages/sites/[slug]/{ => [locale]}/t/[id].tsx (74%) rename pages/sites/[slug]/{ => [locale]}/verify-email.tsx (81%) diff --git a/pages/sites/[slug]/[p].tsx b/pages/sites/[slug]/[locale]/[p].tsx similarity index 86% rename from pages/sites/[slug]/[p].tsx rename to pages/sites/[slug]/[locale]/[p].tsx index 129c6beb18..5f73c4ecc5 100644 --- a/pages/sites/[slug]/[p].tsx +++ b/pages/sites/[slug]/[locale]/[p].tsx @@ -1,13 +1,13 @@ import { useRouter } from 'next/router'; import React from 'react'; -import { ErrorHandlingContext } from '../../../src/features/common/Layout/ErrorHandlingContext'; -import { useProjectProps } from '../../../src/features/common/Layout/ProjectPropsContext'; -import Credits from '../../../src/features/projects/components/maps/Credits'; -import SingleProjectDetails from '../../../src/features/projects/screens/SingleProjectDetails'; -import { getRequest } from '../../../src/utils/apiRequests/api'; -import getStoredCurrency from '../../../src/utils/countryCurrency/getStoredCurrency'; -import GetProjectMeta from '../../../src/utils/getMetaTags/GetProjectMeta'; -import { getAllPlantLocations } from '../../../src/utils/maps/plantLocations'; +import { ErrorHandlingContext } from '../../../../src/features/common/Layout/ErrorHandlingContext'; +import { useProjectProps } from '../../../../src/features/common/Layout/ProjectPropsContext'; +import Credits from '../../../../src/features/projects/components/maps/Credits'; +import SingleProjectDetails from '../../../../src/features/projects/screens/SingleProjectDetails'; +import { getRequest } from '../../../../src/utils/apiRequests/api'; +import getStoredCurrency from '../../../../src/utils/countryCurrency/getStoredCurrency'; +import GetProjectMeta from '../../../../src/utils/getMetaTags/GetProjectMeta'; +import { getAllPlantLocations } from '../../../../src/utils/maps/plantLocations'; import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { @@ -18,13 +18,13 @@ import { ProjectExtended, ClientError, } from '@planet-sdk/common'; -import { SetState } from '../../../src/features/common/types/common'; -import { PlantLocation } from '../../../src/features/common/types/plantLocation'; -import { useTenant } from '../../../src/features/common/Layout/TenantContext'; +import { SetState } from '../../../../src/features/common/types/common'; +import { PlantLocation } from '../../../../src/features/common/types/plantLocation'; +import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../src/utils/multiTenancy/helpers'; +} from '../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { v4 } from 'uuid'; import { @@ -32,7 +32,7 @@ import { GetStaticPropsContext, GetStaticPropsResult, } from 'next'; -import { defaultTenant } from '../../../tenant.config'; +import { defaultTenant } from '../../../../tenant.config'; interface Props { initialized: boolean; diff --git a/pages/sites/[slug]/all.tsx b/pages/sites/[slug]/[locale]/all.tsx similarity index 86% rename from pages/sites/[slug]/all.tsx rename to pages/sites/[slug]/[locale]/all.tsx index 76b5386ee0..659f7e4d9e 100644 --- a/pages/sites/[slug]/all.tsx +++ b/pages/sites/[slug]/[locale]/all.tsx @@ -1,27 +1,27 @@ import React from 'react'; -import LeaderBoard from '../../../src/tenants/planet/LeaderBoard'; -import { getRequest } from '../../../src/utils/apiRequests/api'; -import GetLeaderboardMeta from '../../../src/utils/getMetaTags/GetLeaderboardMeta'; -import { ErrorHandlingContext } from '../../../src/features/common/Layout/ErrorHandlingContext'; +import LeaderBoard from '../../../../src/tenants/planet/LeaderBoard'; +import { getRequest } from '../../../../src/utils/apiRequests/api'; +import GetLeaderboardMeta from '../../../../src/utils/getMetaTags/GetLeaderboardMeta'; +import { ErrorHandlingContext } from '../../../../src/features/common/Layout/ErrorHandlingContext'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { handleError, APIError } from '@planet-sdk/common'; import { LeaderBoardList, TenantScore, -} from '../../../src/features/common/types/leaderboard'; -import { useTenant } from '../../../src/features/common/Layout/TenantContext'; +} from '../../../../src/features/common/types/leaderboard'; +import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../src/utils/multiTenancy/helpers'; +} from '../../../../src/utils/multiTenancy/helpers'; import { GetStaticProps, GetStaticPropsContext, GetStaticPropsResult, } from 'next'; -import { defaultTenant } from '../../../tenant.config'; +import { defaultTenant } from '../../../../tenant.config'; interface Props { initialized: Boolean; diff --git a/pages/sites/[slug]/claim/[type]/[code].tsx b/pages/sites/[slug]/[locale]/claim/[type]/[code].tsx similarity index 89% rename from pages/sites/[slug]/claim/[type]/[code].tsx rename to pages/sites/[slug]/[locale]/claim/[type]/[code].tsx index 6d398ae2ef..8cc4fca2ac 100644 --- a/pages/sites/[slug]/claim/[type]/[code].tsx +++ b/pages/sites/[slug]/[locale]/claim/[type]/[code].tsx @@ -1,22 +1,22 @@ import React, { ReactElement } from 'react'; import { useRouter } from 'next/router'; -import { postAuthenticatedRequest } from '../../../../../src/utils/apiRequests/api'; +import { postAuthenticatedRequest } from '../../../../../../src/utils/apiRequests/api'; import { useTranslation } from 'next-i18next'; -import LandingSection from '../../../../../src/features/common/Layout/LandingSection'; -import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; -import { ErrorHandlingContext } from '../../../../../src/features/common/Layout/ErrorHandlingContext'; +import LandingSection from '../../../../../../src/features/common/Layout/LandingSection'; +import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; +import { ErrorHandlingContext } from '../../../../../../src/features/common/Layout/ErrorHandlingContext'; import { RedeemFailed, SuccessfullyRedeemed, -} from '../../../../../src/features/common/RedeemCode'; -import { RedeemedCodeData } from '../../../../../src/features/common/types/redeem'; +} from '../../../../../../src/features/common/RedeemCode'; +import { RedeemedCodeData } from '../../../../../../src/features/common/types/redeem'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { handleError, APIError, SerializedError } from '@planet-sdk/common'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { v4 } from 'uuid'; import { @@ -24,7 +24,7 @@ import { GetStaticPropsContext, GetStaticPropsResult, } from 'next'; -import { defaultTenant } from '../../../../../tenant.config'; +import { defaultTenant } from '../../../../../../tenant.config'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/complete-signup.tsx b/pages/sites/[slug]/[locale]/complete-signup.tsx similarity index 88% rename from pages/sites/[slug]/complete-signup.tsx rename to pages/sites/[slug]/[locale]/complete-signup.tsx index d997d5e26a..c9a9a3b5f5 100644 --- a/pages/sites/[slug]/complete-signup.tsx +++ b/pages/sites/[slug]/[locale]/complete-signup.tsx @@ -1,20 +1,20 @@ import React from 'react'; -import CompleteSignup from '../../../src/features/user/CompleteSignup'; +import CompleteSignup from '../../../../src/features/user/CompleteSignup'; import Head from 'next/head'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../src/utils/multiTenancy/helpers'; +} from '../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; import { GetStaticProps, GetStaticPropsContext, GetStaticPropsResult, } from 'next'; -import { defaultTenant } from '../../../tenant.config'; +import { defaultTenant } from '../../../../tenant.config'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/home.tsx b/pages/sites/[slug]/[locale]/home.tsx similarity index 85% rename from pages/sites/[slug]/home.tsx rename to pages/sites/[slug]/[locale]/home.tsx index 40b17b0c17..466f4088ff 100644 --- a/pages/sites/[slug]/home.tsx +++ b/pages/sites/[slug]/[locale]/home.tsx @@ -1,29 +1,29 @@ import { useRouter } from 'next/router'; import React from 'react'; -import SalesforceHome from '../../../src/tenants/salesforce/Home'; -import SternHome from '../../../src/tenants/stern/Home'; -import BasicHome from '../../../src/tenants/common/Home'; -import GetHomeMeta from '../../../src/utils/getMetaTags/GetHomeMeta'; -import { getRequest } from '../../../src/utils/apiRequests/api'; -import { ErrorHandlingContext } from '../../../src/features/common/Layout/ErrorHandlingContext'; +import SalesforceHome from '../../../../src/tenants/salesforce/Home'; +import SternHome from '../../../../src/tenants/stern/Home'; +import BasicHome from '../../../../src/tenants/common/Home'; +import GetHomeMeta from '../../../../src/utils/getMetaTags/GetHomeMeta'; +import { getRequest } from '../../../../src/utils/apiRequests/api'; +import { ErrorHandlingContext } from '../../../../src/features/common/Layout/ErrorHandlingContext'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { handleError, APIError } from '@planet-sdk/common'; import { LeaderBoardList, TenantScore, -} from '../../../src/features/common/types/leaderboard'; -import { useTenant } from '../../../src/features/common/Layout/TenantContext'; +} from '../../../../src/features/common/types/leaderboard'; +import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../src/utils/multiTenancy/helpers'; +} from '../../../../src/utils/multiTenancy/helpers'; import { GetStaticProps, GetStaticPropsContext, GetStaticPropsResult, } from 'next'; -import { defaultTenant } from '../../../tenant.config'; +import { defaultTenant } from '../../../../tenant.config'; interface Props { initialized: Boolean; diff --git a/pages/sites/[slug]/index.tsx b/pages/sites/[slug]/[locale]/index.tsx similarity index 82% rename from pages/sites/[slug]/index.tsx rename to pages/sites/[slug]/[locale]/index.tsx index d9fc1c1818..aa49149164 100644 --- a/pages/sites/[slug]/index.tsx +++ b/pages/sites/[slug]/[locale]/index.tsx @@ -1,33 +1,33 @@ import { useRouter } from 'next/router'; import React from 'react'; -import ProjectsList from '../../../src/features/projects/screens/Projects'; -import GetAllProjectsMeta from '../../../src/utils/getMetaTags/GetAllProjectsMeta'; -import getStoredCurrency from '../../../src/utils/countryCurrency/getStoredCurrency'; -import { getRequest } from '../../../src/utils/apiRequests/api'; -import { useProjectProps } from '../../../src/features/common/Layout/ProjectPropsContext'; -import Credits from '../../../src/features/projects/components/maps/Credits'; -import Filters from '../../../src/features/projects/components/projects/Filters'; -import { ErrorHandlingContext } from '../../../src/features/common/Layout/ErrorHandlingContext'; +import ProjectsList from '../../../../src/features/projects/screens/Projects'; +import GetAllProjectsMeta from '../../../../src/utils/getMetaTags/GetAllProjectsMeta'; +import getStoredCurrency from '../../../../src/utils/countryCurrency/getStoredCurrency'; +import { getRequest } from '../../../../src/utils/apiRequests/api'; +import { useProjectProps } from '../../../../src/features/common/Layout/ProjectPropsContext'; +import Credits from '../../../../src/features/projects/components/maps/Credits'; +import Filters from '../../../../src/features/projects/components/projects/Filters'; +import { ErrorHandlingContext } from '../../../../src/features/common/Layout/ErrorHandlingContext'; import DirectGift, { DirectGiftI, -} from '../../../src/features/donations/components/DirectGift'; +} from '../../../../src/features/donations/components/DirectGift'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useTranslation } from 'next-i18next'; import { handleError, APIError } from '@planet-sdk/common'; -import { SetState } from '../../../src/features/common/types/common'; -import { MapProject } from '../../../src/features/common/types/ProjectPropsContextInterface'; +import { SetState } from '../../../../src/features/common/types/common'; +import { MapProject } from '../../../../src/features/common/types/ProjectPropsContextInterface'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../src/utils/multiTenancy/helpers'; +} from '../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { useTenant } from '../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; import { GetStaticProps, GetStaticPropsContext, GetStaticPropsResult, } from 'next'; -import { defaultTenant } from '../../../tenant.config'; +import { defaultTenant } from '../../../../tenant.config'; interface Props { initialized: Boolean; diff --git a/pages/sites/[slug]/login.tsx b/pages/sites/[slug]/[locale]/login.tsx similarity index 88% rename from pages/sites/[slug]/login.tsx rename to pages/sites/[slug]/[locale]/login.tsx index 58ed8ea4e9..5faf05c40a 100644 --- a/pages/sites/[slug]/login.tsx +++ b/pages/sites/[slug]/[locale]/login.tsx @@ -1,20 +1,20 @@ import React, { ReactElement } from 'react'; -import { UserProfileLoader } from '../../../src/features/common/ContentLoaders/UserProfile/UserProfile'; +import { UserProfileLoader } from '../../../../src/features/common/ContentLoaders/UserProfile/UserProfile'; import { useRouter } from 'next/router'; -import { useUserProps } from '../../../src/features/common/Layout/UserPropsContext'; +import { useUserProps } from '../../../../src/features/common/Layout/UserPropsContext'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../src/utils/multiTenancy/helpers'; +} from '../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { useTenant } from '../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; import { GetStaticProps, GetStaticPropsContext, GetStaticPropsResult, } from 'next'; -import { defaultTenant } from '../../../tenant.config'; +import { defaultTenant } from '../../../../tenant.config'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/api-key.tsx b/pages/sites/[slug]/[locale]/profile/api-key.tsx similarity index 85% rename from pages/sites/[slug]/profile/api-key.tsx rename to pages/sites/[slug]/[locale]/profile/api-key.tsx index 33f9b4c7f2..13ef1fae5d 100644 --- a/pages/sites/[slug]/profile/api-key.tsx +++ b/pages/sites/[slug]/[locale]/profile/api-key.tsx @@ -2,21 +2,21 @@ import Head from 'next/head'; import React, { ReactElement } from 'react'; import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import ApiKey from '../../../../src/features/user/Settings/ApiKey'; +import ApiKey from '../../../../../src/features/user/Settings/ApiKey'; import { GetStaticProps, GetStaticPropsContext, GetStaticPropsResult, } from 'next'; -import UserLayout from '../../../../src/features/common/Layout/UserLayout/UserLayout'; +import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../src/utils/multiTenancy/helpers'; -import { defaultTenant } from '../../../../tenant.config'; +} from '../../../../../src/utils/multiTenancy/helpers'; +import { defaultTenant } from '../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/bulk-codes/[method]/[id].tsx b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx similarity index 83% rename from pages/sites/[slug]/profile/bulk-codes/[method]/[id].tsx rename to pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx index d0659203a4..c083054427 100644 --- a/pages/sites/[slug]/profile/bulk-codes/[method]/[id].tsx +++ b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx @@ -1,14 +1,14 @@ import React, { ReactElement, useEffect, useCallback, useContext } from 'react'; -import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import UserLayout from '../../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import BulkCodes, { BulkCodeSteps, -} from '../../../../../../src/features/user/BulkCodes'; -import { PaymentOptions } from '../../../../../../src/features/user/BulkCodes/BulkCodesTypes'; +} from '../../../../../../../src/features/user/BulkCodes'; +import { PaymentOptions } from '../../../../../../../src/features/user/BulkCodes/BulkCodesTypes'; import Head from 'next/head'; -import { BulkCodeMethods } from '../../../../../../src/utils/constants/bulkCodeConstants'; -import { useBulkCode } from '../../../../../../src/features/common/Layout/BulkCodeContext'; -import { ErrorHandlingContext } from '../../../../../../src/features/common/Layout/ErrorHandlingContext'; -import { getRequest } from '../../../../../../src/utils/apiRequests/api'; +import { BulkCodeMethods } from '../../../../../../../src/utils/constants/bulkCodeConstants'; +import { useBulkCode } from '../../../../../../../src/features/common/Layout/BulkCodeContext'; +import { ErrorHandlingContext } from '../../../../../../../src/features/common/Layout/ErrorHandlingContext'; +import { getRequest } from '../../../../../../../src/utils/apiRequests/api'; import { useRouter } from 'next/router'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useTranslation } from 'next-i18next'; @@ -16,16 +16,16 @@ import { handleError, APIError } from '@planet-sdk/common'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../../../src/utils/multiTenancy/helpers'; import { v4 } from 'uuid'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../../src/features/common/Layout/TenantContext'; import { GetStaticProps, GetStaticPropsContext, GetStaticPropsResult, } from 'next'; -import { defaultTenant } from '../../../../../../tenant.config'; +import { defaultTenant } from '../../../../../../../tenant.config'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/bulk-codes/[method]/index.tsx b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx similarity index 84% rename from pages/sites/[slug]/profile/bulk-codes/[method]/index.tsx rename to pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx index 98c218d58b..8b58a38c09 100644 --- a/pages/sites/[slug]/profile/bulk-codes/[method]/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx @@ -1,12 +1,12 @@ import React, { ReactElement, useEffect } from 'react'; -import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import UserLayout from '../../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import BulkCodes, { BulkCodeSteps, -} from '../../../../../../src/features/user/BulkCodes'; +} from '../../../../../../../src/features/user/BulkCodes'; import Head from 'next/head'; import { useRouter } from 'next/router'; -import { useBulkCode } from '../../../../../../src/features/common/Layout/BulkCodeContext'; -import { BulkCodeMethods } from '../../../../../../src/utils/constants/bulkCodeConstants'; +import { useBulkCode } from '../../../../../../../src/features/common/Layout/BulkCodeContext'; +import { BulkCodeMethods } from '../../../../../../../src/utils/constants/bulkCodeConstants'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useTranslation } from 'next-i18next'; import { @@ -17,11 +17,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../../../src/utils/multiTenancy/helpers'; import { v4 } from 'uuid'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; -import { defaultTenant } from '../../../../../../tenant.config'; +import { useTenant } from '../../../../../../../src/features/common/Layout/TenantContext'; +import { defaultTenant } from '../../../../../../../tenant.config'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/bulk-codes/index.tsx b/pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx similarity index 86% rename from pages/sites/[slug]/profile/bulk-codes/index.tsx rename to pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx index ee61374011..fd1af8be27 100644 --- a/pages/sites/[slug]/profile/bulk-codes/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx @@ -1,8 +1,8 @@ import React, { ReactElement } from 'react'; -import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import BulkCodes, { BulkCodeSteps, -} from '../../../../../src/features/user/BulkCodes'; +} from '../../../../../../src/features/user/BulkCodes'; import Head from 'next/head'; import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; @@ -15,10 +15,10 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; -import { defaultTenant } from '../../../../../tenant.config'; +} from '../../../../../../src/utils/multiTenancy/helpers'; +import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/delete-account.tsx b/pages/sites/[slug]/[locale]/profile/delete-account.tsx similarity index 85% rename from pages/sites/[slug]/profile/delete-account.tsx rename to pages/sites/[slug]/[locale]/profile/delete-account.tsx index bfbb7d5719..b379c20f93 100644 --- a/pages/sites/[slug]/profile/delete-account.tsx +++ b/pages/sites/[slug]/[locale]/profile/delete-account.tsx @@ -1,9 +1,9 @@ import Head from 'next/head'; import React, { ReactElement } from 'react'; -import UserLayout from '../../../../src/features/common/Layout/UserLayout/UserLayout'; +import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import DeleteProfile from '../../../../src/features/user/Settings/DeleteProfile'; +import DeleteProfile from '../../../../../src/features/user/Settings/DeleteProfile'; import { GetStaticProps, GetStaticPropsContext, @@ -13,10 +13,10 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../src/utils/multiTenancy/helpers'; -import { defaultTenant } from '../../../../tenant.config'; +} from '../../../../../src/utils/multiTenancy/helpers'; +import { defaultTenant } from '../../../../../tenant.config'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/donation-link.tsx b/pages/sites/[slug]/[locale]/profile/donation-link.tsx similarity index 85% rename from pages/sites/[slug]/profile/donation-link.tsx rename to pages/sites/[slug]/[locale]/profile/donation-link.tsx index 5a52215b28..301e89880b 100644 --- a/pages/sites/[slug]/profile/donation-link.tsx +++ b/pages/sites/[slug]/[locale]/profile/donation-link.tsx @@ -1,6 +1,6 @@ import React, { ReactElement } from 'react'; -import UserLayout from '../../../../src/features/common/Layout/UserLayout/UserLayout'; -import DonationLink from '../../../../src/features/user/Widget/DonationLink'; +import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import DonationLink from '../../../../../src/features/user/Widget/DonationLink'; import Head from 'next/head'; import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; @@ -12,11 +12,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../tenant.config'; +import { defaultTenant } from '../../../../../tenant.config'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/edit.tsx b/pages/sites/[slug]/[locale]/profile/edit.tsx similarity index 82% rename from pages/sites/[slug]/profile/edit.tsx rename to pages/sites/[slug]/[locale]/profile/edit.tsx index 76d35d03cb..c17b43fe90 100644 --- a/pages/sites/[slug]/profile/edit.tsx +++ b/pages/sites/[slug]/[locale]/profile/edit.tsx @@ -1,9 +1,9 @@ import Head from 'next/head'; import React, { ReactElement } from 'react'; -import UserLayout from '../../../../src/features/common/Layout/UserLayout/UserLayout'; +import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useTranslation } from 'next-i18next'; -import EditProfile from '../../../../src/features/user/Settings/EditProfile'; +import EditProfile from '../../../../../src/features/user/Settings/EditProfile'; import { GetStaticProps, GetStaticPropsContext, @@ -12,11 +12,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../tenant.config'; +import { defaultTenant } from '../../../../../tenant.config'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/giftfund/index.tsx b/pages/sites/[slug]/[locale]/profile/giftfund/index.tsx similarity index 84% rename from pages/sites/[slug]/profile/giftfund/index.tsx rename to pages/sites/[slug]/[locale]/profile/giftfund/index.tsx index 10749bf53b..96c2689ffe 100644 --- a/pages/sites/[slug]/profile/giftfund/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/giftfund/index.tsx @@ -1,8 +1,8 @@ import React, { ReactElement } from 'react'; -import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; import { useTranslation } from 'next-i18next'; -import GiftFunds from '../../../../../src/features/user/GiftFunds'; +import GiftFunds from '../../../../../../src/features/user/GiftFunds'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { GetStaticProps, @@ -12,11 +12,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; -import { defaultTenant } from '../../../../../tenant.config'; +} from '../../../../../../src/utils/multiTenancy/helpers'; +import { defaultTenant } from '../../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/history.tsx b/pages/sites/[slug]/[locale]/profile/history.tsx similarity index 86% rename from pages/sites/[slug]/profile/history.tsx rename to pages/sites/[slug]/[locale]/profile/history.tsx index cbd2bd677b..d58f80d6de 100644 --- a/pages/sites/[slug]/profile/history.tsx +++ b/pages/sites/[slug]/[locale]/profile/history.tsx @@ -1,19 +1,19 @@ import React, { ReactElement } from 'react'; import { useTranslation } from 'next-i18next'; -import { getAuthenticatedRequest } from '../../../../src/utils/apiRequests/api'; -import TopProgressBar from '../../../../src/features/common/ContentLoaders/TopProgressBar'; -import History from '../../../../src/features/user/Account/History'; -import { useUserProps } from '../../../../src/features/common/Layout/UserPropsContext'; -import UserLayout from '../../../../src/features/common/Layout/UserLayout/UserLayout'; +import { getAuthenticatedRequest } from '../../../../../src/utils/apiRequests/api'; +import TopProgressBar from '../../../../../src/features/common/ContentLoaders/TopProgressBar'; +import History from '../../../../../src/features/user/Account/History'; +import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; +import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; -import { ErrorHandlingContext } from '../../../../src/features/common/Layout/ErrorHandlingContext'; +import { ErrorHandlingContext } from '../../../../../src/features/common/Layout/ErrorHandlingContext'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { handleError, APIError } from '@planet-sdk/common'; import { Filters, PaymentHistory, -} from '../../../../src/features/common/types/payments'; -import DashboardView from '../../../../src/features/common/Layout/DashboardView'; +} from '../../../../../src/features/common/types/payments'; +import DashboardView from '../../../../../src/features/common/Layout/DashboardView'; import { GetStaticProps, GetStaticPropsContext, @@ -22,11 +22,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../src/utils/multiTenancy/helpers'; -import { defaultTenant } from '../../../../tenant.config'; +} from '../../../../../src/utils/multiTenancy/helpers'; +import { defaultTenant } from '../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/impersonate-user.tsx b/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx similarity index 76% rename from pages/sites/[slug]/profile/impersonate-user.tsx rename to pages/sites/[slug]/[locale]/profile/impersonate-user.tsx index 3c7c6ffb30..7e34606a45 100644 --- a/pages/sites/[slug]/profile/impersonate-user.tsx +++ b/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx @@ -1,11 +1,11 @@ import Head from 'next/head'; import { useTranslation } from 'next-i18next'; -import UserLayout from '../../../../src/features/common/Layout/UserLayout/UserLayout'; +import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import ImpersonateUser from '../../../../src/features/user/Settings/ImpersonateUser'; -import { useUserProps } from '../../../../src/features/common/Layout/UserPropsContext'; +import ImpersonateUser from '../../../../../src/features/user/Settings/ImpersonateUser'; +import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; import { ReactElement, useEffect } from 'react'; -import AccessDeniedLoader from '../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; +import AccessDeniedLoader from '../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; import { GetStaticProps, GetStaticPropsContext, @@ -14,11 +14,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../src/utils/multiTenancy/helpers'; -import { defaultTenant } from '../../../../tenant.config'; +} from '../../../../../src/utils/multiTenancy/helpers'; +import { defaultTenant } from '../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/index.tsx b/pages/sites/[slug]/[locale]/profile/index.tsx similarity index 68% rename from pages/sites/[slug]/profile/index.tsx rename to pages/sites/[slug]/[locale]/profile/index.tsx index dc53265c8a..c6a12c4f89 100644 --- a/pages/sites/[slug]/profile/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/index.tsx @@ -1,9 +1,9 @@ import { useRouter } from 'next/router'; import React, { ReactElement, useEffect } from 'react'; -import { useUserProps } from '../../../../src/features/common/Layout/UserPropsContext'; -import Profile from '../../../../src/features/user/ProfileV2/components/ProfileInfo'; -import UserLayout from '../../../../src/features/common/Layout/UserLayout/UserLayout'; -import MyContributions from '../../../../src/features/user/ProfileV2/components/MyContributions/MyContributions'; +import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; +import Profile from '../../../../../src/features/user/ProfileV2/components/ProfileInfo'; +import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import MyContributions from '../../../../../src/features/user/ProfileV2/components/MyContributions/MyContributions'; import Head from 'next/head'; import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; @@ -13,14 +13,14 @@ import { GetStaticPropsContext, GetStaticPropsResult, } from 'next'; -import { MyForestProvider } from '../../../../src/features/common/Layout/MyForestContext'; +import { MyForestProvider } from '../../../../../src/features/common/Layout/MyForestContext'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../tenant.config'; -import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; +import { defaultTenant } from '../../../../../tenant.config'; +import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { @@ -52,20 +52,22 @@ function ProfilePage({ pageProps: { tenantConfig } }: Props): ReactElement { } }, [contextLoaded, user, router]); - return tenantConfig && ( - - - {t('profile')} - - {profile && ( - <> - - - - - - )} - + return ( + tenantConfig && ( + + + {t('profile')} + + {profile && ( + <> + + + + + + )} + + ) ); } diff --git a/pages/sites/[slug]/profile/payouts/add-bank-details.tsx b/pages/sites/[slug]/[locale]/profile/payouts/add-bank-details.tsx similarity index 80% rename from pages/sites/[slug]/profile/payouts/add-bank-details.tsx rename to pages/sites/[slug]/[locale]/profile/payouts/add-bank-details.tsx index 79c7db058a..878c70dbdc 100644 --- a/pages/sites/[slug]/profile/payouts/add-bank-details.tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/add-bank-details.tsx @@ -1,13 +1,13 @@ import React, { ReactElement } from 'react'; -import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; import ManagePayouts, { ManagePayoutTabs, -} from '../../../../../src/features/user/ManagePayouts'; +} from '../../../../../../src/features/user/ManagePayouts'; import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; -import AccessDeniedLoader from '../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; +import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; +import AccessDeniedLoader from '../../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; import { GetStaticProps, GetStaticPropsContext, @@ -16,11 +16,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../../tenant.config'; +import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/payouts/edit-bank-details/[id].tsx b/pages/sites/[slug]/[locale]/profile/payouts/edit-bank-details/[id].tsx similarity index 86% rename from pages/sites/[slug]/profile/payouts/edit-bank-details/[id].tsx rename to pages/sites/[slug]/[locale]/profile/payouts/edit-bank-details/[id].tsx index 94180a279e..566ca1373c 100644 --- a/pages/sites/[slug]/profile/payouts/edit-bank-details/[id].tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/edit-bank-details/[id].tsx @@ -1,9 +1,9 @@ import React, { ReactElement } from 'react'; -import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import UserLayout from '../../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; import ManagePayouts, { ManagePayoutTabs, -} from '../../../../../../src/features/user/ManagePayouts'; +} from '../../../../../../../src/features/user/ManagePayouts'; import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { @@ -14,12 +14,12 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../../../src/utils/multiTenancy/helpers'; import { v4 } from 'uuid'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../../../tenant.config'; +import { defaultTenant } from '../../../../../../../tenant.config'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/payouts/index.tsx b/pages/sites/[slug]/[locale]/profile/payouts/index.tsx similarity index 79% rename from pages/sites/[slug]/profile/payouts/index.tsx rename to pages/sites/[slug]/[locale]/profile/payouts/index.tsx index b8f447a4d2..3d5e4f8cf5 100644 --- a/pages/sites/[slug]/profile/payouts/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/index.tsx @@ -1,14 +1,14 @@ import React, { ReactElement, useState } from 'react'; -import TopProgressBar from '../../../../../src/features/common/ContentLoaders/TopProgressBar'; -import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import TopProgressBar from '../../../../../../src/features/common/ContentLoaders/TopProgressBar'; +import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; import ManagePayouts, { ManagePayoutTabs, -} from '../../../../../src/features/user/ManagePayouts'; +} from '../../../../../../src/features/user/ManagePayouts'; import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; -import AccessDeniedLoader from '../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; +import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; +import AccessDeniedLoader from '../../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; import { GetStaticProps, GetStaticPropsContext, @@ -17,11 +17,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../../tenant.config'; +import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/payouts/schedule.tsx b/pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx similarity index 80% rename from pages/sites/[slug]/profile/payouts/schedule.tsx rename to pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx index 8ab81b3b37..1cf74b2eab 100644 --- a/pages/sites/[slug]/profile/payouts/schedule.tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx @@ -1,13 +1,13 @@ import React, { ReactElement } from 'react'; -import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; import ManagePayouts, { ManagePayoutTabs, -} from '../../../../../src/features/user/ManagePayouts'; +} from '../../../../../../src/features/user/ManagePayouts'; import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; -import AccessDeniedLoader from '../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; +import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; +import AccessDeniedLoader from '../../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; import { GetStaticProps, GetStaticPropsContext, @@ -16,11 +16,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; -import { defaultTenant } from '../../../../../tenant.config'; +} from '../../../../../../src/utils/multiTenancy/helpers'; +import { defaultTenant } from '../../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/planetcash/index.tsx b/pages/sites/[slug]/[locale]/profile/planetcash/index.tsx similarity index 85% rename from pages/sites/[slug]/profile/planetcash/index.tsx rename to pages/sites/[slug]/[locale]/profile/planetcash/index.tsx index 77b82af694..74c46e493d 100644 --- a/pages/sites/[slug]/profile/planetcash/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/planetcash/index.tsx @@ -1,10 +1,10 @@ import React, { ReactElement, useState, useEffect } from 'react'; -import TopProgressBar from '../../../../../src/features/common/ContentLoaders/TopProgressBar'; -import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import TopProgressBar from '../../../../../../src/features/common/ContentLoaders/TopProgressBar'; +import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; import PlanetCash, { PlanetCashTabs, -} from '../../../../../src/features/user/PlanetCash'; +} from '../../../../../../src/features/user/PlanetCash'; import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { @@ -15,11 +15,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../../tenant.config'; +import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/planetcash/new.tsx b/pages/sites/[slug]/[locale]/profile/planetcash/new.tsx similarity index 85% rename from pages/sites/[slug]/profile/planetcash/new.tsx rename to pages/sites/[slug]/[locale]/profile/planetcash/new.tsx index 7a3bdbafbb..b9e47ef468 100644 --- a/pages/sites/[slug]/profile/planetcash/new.tsx +++ b/pages/sites/[slug]/[locale]/profile/planetcash/new.tsx @@ -1,10 +1,10 @@ import React, { ReactElement, useEffect, useState } from 'react'; -import TopProgressBar from '../../../../../src/features/common/ContentLoaders/TopProgressBar'; -import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import TopProgressBar from '../../../../../../src/features/common/ContentLoaders/TopProgressBar'; +import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; import PlanetCash, { PlanetCashTabs, -} from '../../../../../src/features/user/PlanetCash'; +} from '../../../../../../src/features/user/PlanetCash'; import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { @@ -15,11 +15,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../../tenant.config'; +import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/planetcash/transactions.tsx b/pages/sites/[slug]/[locale]/profile/planetcash/transactions.tsx similarity index 85% rename from pages/sites/[slug]/profile/planetcash/transactions.tsx rename to pages/sites/[slug]/[locale]/profile/planetcash/transactions.tsx index a4a8c8f8c5..12e243459d 100644 --- a/pages/sites/[slug]/profile/planetcash/transactions.tsx +++ b/pages/sites/[slug]/[locale]/profile/planetcash/transactions.tsx @@ -1,10 +1,10 @@ import React, { ReactElement, useState, useEffect } from 'react'; -import TopProgressBar from '../../../../../src/features/common/ContentLoaders/TopProgressBar'; -import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import TopProgressBar from '../../../../../../src/features/common/ContentLoaders/TopProgressBar'; +import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; import PlanetCash, { PlanetCashTabs, -} from '../../../../../src/features/user/PlanetCash'; +} from '../../../../../../src/features/user/PlanetCash'; import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { @@ -15,11 +15,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../../tenant.config'; +import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/projects/[id].tsx b/pages/sites/[slug]/[locale]/profile/projects/[id].tsx similarity index 81% rename from pages/sites/[slug]/profile/projects/[id].tsx rename to pages/sites/[slug]/[locale]/profile/projects/[id].tsx index b69c8802f2..7612b35e64 100644 --- a/pages/sites/[slug]/profile/projects/[id].tsx +++ b/pages/sites/[slug]/[locale]/profile/projects/[id].tsx @@ -1,15 +1,15 @@ import React, { ReactElement, useEffect } from 'react'; import { useRouter } from 'next/router'; -import ManageProjects from '../../../../../src/features/user/ManageProjects'; -import { getAuthenticatedRequest } from '../../../../../src/utils/apiRequests/api'; -import GlobeContentLoader from '../../../../../src/features/common/ContentLoaders/Projects/GlobeLoader'; -import AccessDeniedLoader from '../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; -import Footer from '../../../../../src/features/common/Layout/Footer'; -import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; -import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import ManageProjects from '../../../../../../src/features/user/ManageProjects'; +import { getAuthenticatedRequest } from '../../../../../../src/utils/apiRequests/api'; +import GlobeContentLoader from '../../../../../../src/features/common/ContentLoaders/Projects/GlobeLoader'; +import AccessDeniedLoader from '../../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; +import Footer from '../../../../../../src/features/common/Layout/Footer'; +import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; +import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; import { useTranslation } from 'next-i18next'; -import { ErrorHandlingContext } from '../../../../../src/features/common/Layout/ErrorHandlingContext'; +import { ErrorHandlingContext } from '../../../../../../src/features/common/Layout/ErrorHandlingContext'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { GetStaticProps, @@ -20,15 +20,15 @@ import { handleError, APIError } from '@planet-sdk/common'; import { ProfileProjectConservation, ProfileProjectTrees, -} from '../../../../../src/features/common/types/project'; +} from '../../../../../../src/features/common/types/project'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../../src/utils/multiTenancy/helpers'; import { v4 } from 'uuid'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../../tenant.config'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { defaultTenant } from '../../../../../../tenant.config'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/projects/index.tsx b/pages/sites/[slug]/[locale]/profile/projects/index.tsx similarity index 78% rename from pages/sites/[slug]/profile/projects/index.tsx rename to pages/sites/[slug]/[locale]/profile/projects/index.tsx index 1514659ee5..1eb85621e3 100644 --- a/pages/sites/[slug]/profile/projects/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/projects/index.tsx @@ -1,11 +1,11 @@ import React, { ReactElement } from 'react'; -import ProjectsContainer from '../../../../../src/features/user/ManageProjects/ProjectsContainer'; -import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import ProjectsContainer from '../../../../../../src/features/user/ManageProjects/ProjectsContainer'; +import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; -import AccessDeniedLoader from '../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; +import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; +import AccessDeniedLoader from '../../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; import { GetStaticProps, GetStaticPropsContext, @@ -14,11 +14,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; -import { defaultTenant } from '../../../../../tenant.config'; +} from '../../../../../../src/utils/multiTenancy/helpers'; +import { defaultTenant } from '../../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/projects/new-project.tsx b/pages/sites/[slug]/[locale]/profile/projects/new-project.tsx similarity index 83% rename from pages/sites/[slug]/profile/projects/new-project.tsx rename to pages/sites/[slug]/[locale]/profile/projects/new-project.tsx index d6a9cd1eca..2d27bc4db2 100644 --- a/pages/sites/[slug]/profile/projects/new-project.tsx +++ b/pages/sites/[slug]/[locale]/profile/projects/new-project.tsx @@ -1,10 +1,10 @@ import { useTranslation } from 'next-i18next'; import React, { ReactElement } from 'react'; -import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; -import ManageProjects from '../../../../../src/features/user/ManageProjects'; -import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; -import AccessDeniedLoader from '../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; -import Footer from '../../../../../src/features/common/Layout/Footer'; +import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import ManageProjects from '../../../../../../src/features/user/ManageProjects'; +import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; +import AccessDeniedLoader from '../../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; +import Footer from '../../../../../../src/features/common/Layout/Footer'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import Head from 'next/head'; import { @@ -15,11 +15,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../../tenant.config'; +import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/recurrency.tsx b/pages/sites/[slug]/[locale]/profile/recurrency.tsx similarity index 82% rename from pages/sites/[slug]/profile/recurrency.tsx rename to pages/sites/[slug]/[locale]/profile/recurrency.tsx index 0e555b16ba..6354709c32 100644 --- a/pages/sites/[slug]/profile/recurrency.tsx +++ b/pages/sites/[slug]/[locale]/profile/recurrency.tsx @@ -1,15 +1,15 @@ import React, { ReactElement } from 'react'; -import { getAuthenticatedRequest } from '../../../../src/utils/apiRequests/api'; -import TopProgressBar from '../../../../src/features/common/ContentLoaders/TopProgressBar'; -import { useUserProps } from '../../../../src/features/common/Layout/UserPropsContext'; -import UserLayout from '../../../../src/features/common/Layout/UserLayout/UserLayout'; +import { getAuthenticatedRequest } from '../../../../../src/utils/apiRequests/api'; +import TopProgressBar from '../../../../../src/features/common/ContentLoaders/TopProgressBar'; +import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; +import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; -import { ErrorHandlingContext } from '../../../../src/features/common/Layout/ErrorHandlingContext'; +import { ErrorHandlingContext } from '../../../../../src/features/common/Layout/ErrorHandlingContext'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useTranslation } from 'next-i18next'; import { handleError, APIError } from '@planet-sdk/common'; -import { Subscription } from '../../../../src/features/common/types/payments'; -import RecurrentPayments from '../../../../src/features/user/Account/RecurrentPayments'; +import { Subscription } from '../../../../../src/features/common/types/payments'; +import RecurrentPayments from '../../../../../src/features/user/Account/RecurrentPayments'; import { GetStaticProps, GetStaticPropsContext, @@ -18,11 +18,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../tenant.config'; +import { defaultTenant } from '../../../../../tenant.config'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/redeem/[code].tsx b/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx similarity index 89% rename from pages/sites/[slug]/profile/redeem/[code].tsx rename to pages/sites/[slug]/[locale]/profile/redeem/[code].tsx index e31c012b6f..1196b8a1e9 100644 --- a/pages/sites/[slug]/profile/redeem/[code].tsx +++ b/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx @@ -1,16 +1,16 @@ import { useRouter } from 'next/router'; import { useState, useEffect, useContext, FC } from 'react'; -import LandingSection from '../../../../../src/features/common/Layout/LandingSection'; +import LandingSection from '../../../../../../src/features/common/Layout/LandingSection'; import { useTranslation } from 'next-i18next'; -import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; -import { ErrorHandlingContext } from '../../../../../src/features/common/Layout/ErrorHandlingContext'; -import { postAuthenticatedRequest } from '../../../../../src/utils/apiRequests/api'; -import { RedeemedCodeData } from '../../../../../src/features/common/types/redeem'; +import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; +import { ErrorHandlingContext } from '../../../../../../src/features/common/Layout/ErrorHandlingContext'; +import { postAuthenticatedRequest } from '../../../../../../src/utils/apiRequests/api'; +import { RedeemedCodeData } from '../../../../../../src/features/common/types/redeem'; import { RedeemFailed, SuccessfullyRedeemed, EnterRedeemCode, -} from '../../../../../src/features/common/RedeemCode'; +} from '../../../../../../src/features/common/RedeemCode'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { GetStaticProps, @@ -18,14 +18,14 @@ import { GetStaticPropsResult, } from 'next'; import { handleError, APIError, SerializedError } from '@planet-sdk/common'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../../src/utils/multiTenancy/helpers'; import { v4 } from 'uuid'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../../tenant.config'; +import { defaultTenant } from '../../../../../../tenant.config'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/register-trees.tsx b/pages/sites/[slug]/[locale]/profile/register-trees.tsx similarity index 85% rename from pages/sites/[slug]/profile/register-trees.tsx rename to pages/sites/[slug]/[locale]/profile/register-trees.tsx index 01bef9484b..9f59ff21c1 100644 --- a/pages/sites/[slug]/profile/register-trees.tsx +++ b/pages/sites/[slug]/[locale]/profile/register-trees.tsx @@ -1,6 +1,6 @@ import React, { ReactElement } from 'react'; import dynamic from 'next/dynamic'; -import UserLayout from '../../../../src/features/common/Layout/UserLayout/UserLayout'; +import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useTranslation } from 'next-i18next'; @@ -13,10 +13,10 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../src/utils/multiTenancy/helpers'; -import { defaultTenant } from '../../../../tenant.config'; +} from '../../../../../src/utils/multiTenancy/helpers'; +import { defaultTenant } from '../../../../../tenant.config'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { @@ -38,7 +38,7 @@ export default function Register({ }, [router.isReady]); const RegisterTrees = dynamic( - () => import('../../../../src/features/user/RegisterTrees') + () => import('../../../../../src/features/user/RegisterTrees') ); return tenantConfig ? ( diff --git a/pages/sites/[slug]/profile/treemapper/data-explorer.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx similarity index 81% rename from pages/sites/[slug]/profile/treemapper/data-explorer.tsx rename to pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx index 5a07dcb4a8..5a22c80163 100644 --- a/pages/sites/[slug]/profile/treemapper/data-explorer.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx @@ -1,11 +1,11 @@ import Head from 'next/head'; import React, { ReactElement, useEffect } from 'react'; -import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; -import Analytics from '../../../../../src/features/user/TreeMapper/Analytics'; +import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import Analytics from '../../../../../../src/features/user/TreeMapper/Analytics'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useTranslation } from 'next-i18next'; import { useRouter } from 'next/router'; -import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; +import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; import { GetStaticProps, GetStaticPropsContext, @@ -14,10 +14,10 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../../tenant.config'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { defaultTenant } from '../../../../../../tenant.config'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/treemapper/import.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/import.tsx similarity index 78% rename from pages/sites/[slug]/profile/treemapper/import.tsx rename to pages/sites/[slug]/[locale]/profile/treemapper/import.tsx index d37c8daeaf..b000fe82f0 100644 --- a/pages/sites/[slug]/profile/treemapper/import.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/import.tsx @@ -1,11 +1,11 @@ import Head from 'next/head'; import React, { ReactElement } from 'react'; -import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import { useTranslation } from 'next-i18next'; -import ImportData from '../../../../../src/features/user/TreeMapper/Import'; +import ImportData from '../../../../../../src/features/user/TreeMapper/Import'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; -import AccessDeniedLoader from '../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; +import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; +import AccessDeniedLoader from '../../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; import { GetStaticProps, GetStaticPropsContext, @@ -14,11 +14,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../../tenant.config'; +import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/treemapper/index.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/index.tsx similarity index 85% rename from pages/sites/[slug]/profile/treemapper/index.tsx rename to pages/sites/[slug]/[locale]/profile/treemapper/index.tsx index adb06993eb..0adaecdae8 100644 --- a/pages/sites/[slug]/profile/treemapper/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/index.tsx @@ -1,7 +1,7 @@ import Head from 'next/head'; import React, { ReactElement } from 'react'; -import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; -import TreeMapper from '../../../../../src/features/user/TreeMapper'; +import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import TreeMapper from '../../../../../../src/features/user/TreeMapper'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useTranslation } from 'next-i18next'; import { @@ -12,11 +12,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; -import { defaultTenant } from '../../../../../tenant.config'; +} from '../../../../../../src/utils/multiTenancy/helpers'; +import { defaultTenant } from '../../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/treemapper/my-species.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx similarity index 78% rename from pages/sites/[slug]/profile/treemapper/my-species.tsx rename to pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx index 3063490134..19c4272cd3 100644 --- a/pages/sites/[slug]/profile/treemapper/my-species.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx @@ -1,11 +1,11 @@ import Head from 'next/head'; import React, { ReactElement } from 'react'; -import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; -import MySpecies from '../../../../../src/features/user/TreeMapper/MySpecies'; +import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import MySpecies from '../../../../../../src/features/user/TreeMapper/MySpecies'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useTranslation } from 'next-i18next'; -import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; -import AccessDeniedLoader from '../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; +import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; +import AccessDeniedLoader from '../../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; import { GetStaticProps, GetStaticPropsContext, @@ -14,11 +14,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../../tenant.config'; +import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/profile/widgets.tsx b/pages/sites/[slug]/[locale]/profile/widgets.tsx similarity index 86% rename from pages/sites/[slug]/profile/widgets.tsx rename to pages/sites/[slug]/[locale]/profile/widgets.tsx index 5b2f304deb..93ac634cde 100644 --- a/pages/sites/[slug]/profile/widgets.tsx +++ b/pages/sites/[slug]/[locale]/profile/widgets.tsx @@ -1,7 +1,7 @@ import React, { ReactElement } from 'react'; -import { useUserProps } from '../../../../src/features/common/Layout/UserPropsContext'; -import UserLayout from '../../../../src/features/common/Layout/UserLayout/UserLayout'; -import EmbedModal from '../../../../src/features/user/Widget/EmbedModal'; +import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; +import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; +import EmbedModal from '../../../../../src/features/user/Widget/EmbedModal'; import styles from './../../../../src/features/common/Layout/UserLayout/UserLayout.module.scss'; import Head from 'next/head'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; @@ -14,11 +14,11 @@ import { import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../src/utils/multiTenancy/helpers'; -import { defaultTenant } from '../../../../tenant.config'; +} from '../../../../../src/utils/multiTenancy/helpers'; +import { defaultTenant } from '../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/s/[id].tsx b/pages/sites/[slug]/[locale]/s/[id].tsx similarity index 88% rename from pages/sites/[slug]/s/[id].tsx rename to pages/sites/[slug]/[locale]/s/[id].tsx index 57be5e655d..fef7dd225d 100644 --- a/pages/sites/[slug]/s/[id].tsx +++ b/pages/sites/[slug]/[locale]/s/[id].tsx @@ -1,7 +1,7 @@ import React, { ReactElement } from 'react'; import { useRouter } from 'next/router'; -import { getRequest } from '../../../../src/utils/apiRequests/api'; -import { ErrorHandlingContext } from '../../../../src/features/common/Layout/ErrorHandlingContext'; +import { getRequest } from '../../../../../src/utils/apiRequests/api'; +import { ErrorHandlingContext } from '../../../../../src/features/common/Layout/ErrorHandlingContext'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { GetStaticProps, @@ -12,11 +12,11 @@ import { handleError, APIError, UserPublicProfile } from '@planet-sdk/common'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../src/utils/multiTenancy/helpers'; import { v4 } from 'uuid'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; -import { defaultTenant } from '../../../../tenant.config'; -import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; +import { defaultTenant } from '../../../../../tenant.config'; +import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/t/[id].tsx b/pages/sites/[slug]/[locale]/t/[id].tsx similarity index 74% rename from pages/sites/[slug]/t/[id].tsx rename to pages/sites/[slug]/[locale]/t/[id].tsx index 8b6f9d2f32..493f3aad1b 100644 --- a/pages/sites/[slug]/t/[id].tsx +++ b/pages/sites/[slug]/[locale]/t/[id].tsx @@ -1,13 +1,13 @@ import { useRouter } from 'next/router'; import React, { ReactElement, useEffect } from 'react'; -import { UserProfileLoader } from '../../../../src/features/common/ContentLoaders/UserProfile/UserProfile'; -import { useUserProps } from '../../../../src/features/common/Layout/UserPropsContext'; -import { getRequest } from '../../../../src/utils/apiRequests/api'; -import GetPublicUserProfileMeta from '../../../../src/utils/getMetaTags/GetPublicUserProfileMeta'; -import Footer from '../../../../src/features/common/Layout/Footer'; -import Profile from '../../../../src/features/user/ProfileV2/components/ProfileInfo'; -import ProjectsContainer from '../../../../src/features/user/ProfileV2/components/ProjectDetails/ProjectsContainer'; -import { ErrorHandlingContext } from '../../../../src/features/common/Layout/ErrorHandlingContext'; +import { UserProfileLoader } from '../../../../../src/features/common/ContentLoaders/UserProfile/UserProfile'; +import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; +import { getRequest } from '../../../../../src/utils/apiRequests/api'; +import GetPublicUserProfileMeta from '../../../../../src/utils/getMetaTags/GetPublicUserProfileMeta'; +import Footer from '../../../../../src/features/common/Layout/Footer'; +import Profile from '../../../../../src/features/user/ProfileV2/components/ProfileInfo'; +import ProjectsContainer from '../../../../../src/features/user/ProfileV2/components/ProjectDetails/ProjectsContainer'; +import { ErrorHandlingContext } from '../../../../../src/features/common/Layout/ErrorHandlingContext'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { GetStaticProps, @@ -15,17 +15,17 @@ import { GetStaticPropsResult, } from 'next'; import { handleError, APIError, UserPublicProfile } from '@planet-sdk/common'; -import MyContributions from '../../../../src/features/user/ProfileV2/components/MyContributions/MyContributions'; -import { MyForestProvider } from '../../../../src/features/common/Layout/MyForestContext'; -import PlantedTreesContributions from '../../../../src/features/user/ProfileV2/components/ProjectDetails/PlantedTreesContributions'; +import MyContributions from '../../../../../src/features/user/ProfileV2/components/MyContributions/MyContributions'; +import { MyForestProvider } from '../../../../../src/features/common/Layout/MyForestContext'; +import PlantedTreesContributions from '../../../../../src/features/user/ProfileV2/components/ProjectDetails/PlantedTreesContributions'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../../src/utils/multiTenancy/helpers'; +} from '../../../../../src/utils/multiTenancy/helpers'; import { v4 } from 'uuid'; -import { defaultTenant } from '../../../../tenant.config'; -import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; +import { defaultTenant } from '../../../../../tenant.config'; +import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; interface Props { pageProps: { diff --git a/pages/sites/[slug]/verify-email.tsx b/pages/sites/[slug]/[locale]/verify-email.tsx similarity index 81% rename from pages/sites/[slug]/verify-email.tsx rename to pages/sites/[slug]/[locale]/verify-email.tsx index 841edf2cd6..3b8afa545e 100644 --- a/pages/sites/[slug]/verify-email.tsx +++ b/pages/sites/[slug]/[locale]/verify-email.tsx @@ -1,21 +1,21 @@ import React, { ReactElement } from 'react'; -import Footer from '../../../src/features/common/Layout/Footer'; -import LandingSection from '../../../src/features/common/Layout/LandingSection'; -import VerifyEmailComponent from '../../../src/features/common/VerifyEmail/VerifyEmail'; +import Footer from '../../../../src/features/common/Layout/Footer'; +import LandingSection from '../../../../src/features/common/Layout/LandingSection'; +import VerifyEmailComponent from '../../../../src/features/common/VerifyEmail/VerifyEmail'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { constructPathsForTenantSlug, getTenantConfig, -} from '../../../src/utils/multiTenancy/helpers'; +} from '../../../../src/utils/multiTenancy/helpers'; import { useRouter } from 'next/router'; -import { useTenant } from '../../../src/features/common/Layout/TenantContext'; +import { useTenant } from '../../../../src/features/common/Layout/TenantContext'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { GetStaticProps, GetStaticPropsContext, GetStaticPropsResult, } from 'next'; -import { defaultTenant } from '../../../tenant.config'; +import { defaultTenant } from '../../../../tenant.config'; interface Props { pageProps: { From 8962eec349cf4ce827b4e1046304a04a844925b2 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Thu, 15 Feb 2024 10:25:16 +0530 Subject: [PATCH 03/70] feat: set up i18n.ts and typescript for messages --- global.d.ts | 55 ++++++++++++++++++++++++++++++++++++ i18n.ts | 71 +++++++++++++++++++++++++++++++++++++++++++++++ package-lock.json | 1 + package.json | 1 + tsconfig.json | 6 ++-- 5 files changed, 132 insertions(+), 2 deletions(-) create mode 100644 global.d.ts create mode 100644 i18n.ts diff --git a/global.d.ts b/global.d.ts new file mode 100644 index 0000000000..936eb2ec78 --- /dev/null +++ b/global.d.ts @@ -0,0 +1,55 @@ +// Use type safe message keys with `next-intl` +type MessagesBulkCodes = + typeof import('./public/static/locales/en/bulkCodes.json'); +type MessagesCommon = typeof import('./public/static/locales/en/common.json'); +type MessagesCountry = typeof import('./public/static/locales/en/country.json'); +type MessagesDonate = typeof import('./public/static/locales/en/donate.json'); +type MessagesDonationLink = + typeof import('./public/static/locales/en/donationLink.json'); +type MessagesEditProfile = + typeof import('./public/static/locales/en/editProfile.json'); +type MessagesGiftfunds = + typeof import('./public/static/locales/en/giftfunds.json'); +type MessagesLeaderboard = + typeof import('./public/static/locales/en/leaderboard.json'); +type MessagesManagePayouts = + typeof import('./public/static/locales/en/managePayouts.json'); +type MessagesManageProjects = + typeof import('./public/static/locales/en/manageProjects.json'); +type MessagesMaps = typeof import('./public/static/locales/en/maps.json'); +type MessagesMe = typeof import('./public/static/locales/en/me.json'); +type MessagesPlanet = typeof import('./public/static/locales/en/planet.json'); +type MessagesPlanetcash = + typeof import('./public/static/locales/en/planetcash.json'); +type MessagesProfile = typeof import('./public/static/locales/en/profile.json'); +type MessagesRedeem = typeof import('./public/static/locales/en/redeem.json'); +type MessagesRegisterTrees = + typeof import('./public/static/locales/en/registerTrees.json'); +type MessagesTenants = typeof import('./public/static/locales/en/tenants.json'); +type MessagesTreemapper = + typeof import('./public/static/locales/en/treemapper.json'); +type MessagesTreemapperAnalytics = + typeof import('./public/static/locales/en/treemapperAnalytics.json'); + +type Messages = MessagesBulkCodes & + MessagesCommon & + MessagesCountry & + MessagesDonate & + MessagesDonationLink & + MessagesEditProfile & + MessagesGiftfunds & + MessagesLeaderboard & + MessagesManagePayouts & + MessagesManageProjects & + MessagesMaps & + MessagesMe & + MessagesPlanet & + MessagesPlanetcash & + MessagesProfile & + MessagesRedeem & + MessagesRegisterTrees & + MessagesTenants & + MessagesTreemapper & + MessagesTreemapperAnalytics; + +declare interface IntlMessages extends Messages {} diff --git a/i18n.ts b/i18n.ts new file mode 100644 index 0000000000..dabf881cc8 --- /dev/null +++ b/i18n.ts @@ -0,0 +1,71 @@ +import { getRequestConfig } from 'next-intl/server'; +import deepmerge from 'deepmerge'; + +// IMP - Import any new translation file here in `userMessages` add `defaultMessages`, to enable translation auto complete. +export default getRequestConfig(async ({ locale }) => { + const userMessages = { + ...(await import(`./public/static/locales/${locale}/bulkCodes.json`)) + .default, + ...(await import(`./public/static/locales/${locale}/common.json`)).default, + ...(await import(`./public/static/locales/${locale}/country.json`)).default, + ...(await import(`./public/static/locales/${locale}/donate.json`)).default, + ...(await import(`./public/static/locales/${locale}/donationLink.json`)) + .default, + ...(await import(`./public/static/locales/${locale}/editProfile.json`)) + .default, + ...(await import(`./public/static/locales/${locale}/giftfunds.json`)) + .default, + ...(await import(`./public/static/locales/${locale}/leaderboard.json`)) + .default, + ...(await import(`./public/static/locales/${locale}/managePayouts.json`)) + .default, + ...(await import(`./public/static/locales/${locale}/manageProjects.json`)) + .default, + ...(await import(`./public/static/locales/${locale}/maps.json`)).default, + ...(await import(`./public/static/locales/${locale}/me.json`)).default, + ...(await import(`./public/static/locales/${locale}/planet.json`)).default, + ...(await import(`./public/static/locales/${locale}/planetcash.json`)) + .default, + ...(await import(`./public/static/locales/${locale}/profile.json`)).default, + ...(await import(`./public/static/locales/${locale}/redeem.json`)).default, + ...(await import(`./public/static/locales/${locale}/registerTrees.json`)) + .default, + ...(await import(`./public/static/locales/${locale}/tenants.json`)).default, + ...(await import(`./public/static/locales/${locale}/treemapper.json`)) + .default, + ...( + await import(`./public/static/locales/${locale}/treemapperAnalytics.json`) + ).default, + }; + + const defaultMessages = { + ...(await import(`./public/static/locales/en/bulkCodes.json`)).default, + ...(await import(`./public/static/locales/en/common.json`)).default, + ...(await import(`./public/static/locales/en/country.json`)).default, + ...(await import(`./public/static/locales/en/donate.json`)).default, + ...(await import(`./public/static/locales/en/donationLink.json`)).default, + ...(await import(`./public/static/locales/en/editProfile.json`)).default, + ...(await import(`./public/static/locales/en/giftfunds.json`)).default, + ...(await import(`./public/static/locales/en/leaderboard.json`)).default, + ...(await import(`./public/static/locales/en/managePayouts.json`)).default, + ...(await import(`./public/static/locales/en/manageProjects.json`)).default, + ...(await import(`./public/static/locales/en/maps.json`)).default, + ...(await import(`./public/static/locales/en/me.json`)).default, + ...(await import(`./public/static/locales/en/planet.json`)).default, + ...(await import(`./public/static/locales/en/planetcash.json`)).default, + ...(await import(`./public/static/locales/en/profile.json`)).default, + ...(await import(`./public/static/locales/en/redeem.json`)).default, + ...(await import(`./public/static/locales/en/registerTrees.json`)).default, + ...(await import(`./public/static/locales/en/tenants.json`)).default, + ...(await import(`./public/static/locales/en/treemapper.json`)).default, + ...(await import(`./public/static/locales/en/treemapperAnalytics.json`)) + .default, + }; + + const messages: IntlMessages = deepmerge(defaultMessages, userMessages); + + // Single file, no fallback + // messages: (await import(`./messages/${locale}.json`)).default, + + return { messages }; +}); diff --git a/package-lock.json b/package-lock.json index 9cd132dfe4..5db03c14fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,6 +46,7 @@ "d3-ease": "^2.0.0", "date-fns": "^2.27.0", "deck.gl": "^7.3.6", + "deepmerge": "^4.3.1", "dom-to-image": "^2.6.0", "express": "^4.17.1", "express-rate-limit": "^6.7.0", diff --git a/package.json b/package.json index 0425b9f738..b6f8ac2c8c 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,7 @@ "d3-ease": "^2.0.0", "date-fns": "^2.27.0", "deck.gl": "^7.3.6", + "deepmerge": "^4.3.1", "dom-to-image": "^2.6.0", "express": "^4.17.1", "express-rate-limit": "^6.7.0", diff --git a/tsconfig.json b/tsconfig.json index 558b9199bd..b3de4c1950 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,10 +19,12 @@ "exclude": ["node_modules"], "include": [ "next-env.d.ts", + "global.d.ts", "**/*.ts", "**/*.tsx", "./src/**/*", "tenant.config.ts", - "public/assets" -, "folderCrawler.js" ] + "public/assets", + "folderCrawler.js" + ] } From 4578a48153f4a4bc605994be832bfa1bccbf577e Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Fri, 16 Feb 2024 18:24:19 +0530 Subject: [PATCH 04/70] feat: set up middleware for i18n routing - detects locale from browser settings and adds locale to url (if missing) - sets NEXT_LOCALE cookie for detected language - sets up static paths for index route --- i18n-config.ts | 6 + middleware.ts | 58 +++++- next.config.js | 4 +- package-lock.json | 267 ++++++++++++++++---------- package.json | 7 +- pages/sites/[slug]/[locale]/index.tsx | 13 +- 6 files changed, 250 insertions(+), 105 deletions(-) create mode 100644 i18n-config.ts diff --git a/i18n-config.ts b/i18n-config.ts new file mode 100644 index 0000000000..4868979efa --- /dev/null +++ b/i18n-config.ts @@ -0,0 +1,6 @@ +export const i18nConfig = { + defaultLocale: 'en', + locales: ['en', 'de'], +} as const; + +export type Locale = (typeof i18nConfig)['locales'][number]; diff --git a/middleware.ts b/middleware.ts index 34a26af1fb..d2d07b0e30 100644 --- a/middleware.ts +++ b/middleware.ts @@ -1,5 +1,35 @@ import { NextRequest, NextResponse } from 'next/server'; import { getTenantSlug } from './src/utils/multiTenancy/helpers'; +import { match as matchLocale } from '@formatjs/intl-localematcher'; +import Negotiator from 'negotiator'; +import { i18nConfig } from './i18n-config'; +// import createIntlMiddleware from 'next-intl/middleware'; + +// TODO - update function to consider cookie +function getLocale(request: NextRequest): string | undefined { + // Negotiator expects plain object so we need to transform headers + const negotiatorHeaders: Record = {}; + request.headers.forEach((value, key) => (negotiatorHeaders[key] = value)); + + const locales = i18nConfig.locales as unknown as string[]; + + // Use negotiator and intl-localematcher to get best locale + const languages = new Negotiator({ headers: negotiatorHeaders }).languages( + locales + ); + + const previouslySelectedLanguage = request.cookies.get('NEXT_LOCALE')?.value; + if ( + previouslySelectedLanguage !== undefined && + languages[0] !== previouslySelectedLanguage + ) { + languages.unshift(previouslySelectedLanguage); + } + + const locale = matchLocale(languages, locales, i18nConfig.defaultLocale); + + return locale; +} export const config = { matcher: [ @@ -12,6 +42,20 @@ export const config = { export default async function middleware(req: NextRequest) { const url = req.nextUrl; + const pathname = url.pathname; + + const isLocaleMissing = i18nConfig.locales.every( + (locale) => !pathname.startsWith(`/${locale}/`) && pathname !== `/${locale}` + ); + + if (isLocaleMissing) { + const locale = getLocale(req); + const newUrl = new URL( + `/${locale}${pathname.startsWith('/') ? '' : '/'}${pathname}`, + req.url + ); + return NextResponse.redirect(newUrl); + } const host = req.headers.get('host'); @@ -26,5 +70,17 @@ export default async function middleware(req: NextRequest) { url.pathname = `/sites/${slug}${url.pathname}`; } - return NextResponse.rewrite(url); + const res = NextResponse.rewrite(url); + + // store NEXT_LOCALE cookie if available + const localeFromPath = pathname.split('/')[1]; + const localeCookieValue = req.cookies.get('NEXT_LOCALE')?.value; + if (localeFromPath !== localeCookieValue) { + res.cookies.set('NEXT_LOCALE', localeFromPath, { + sameSite: 'strict', + maxAge: 31536000, // 1 year + }); + } + + return res; } diff --git a/next.config.js b/next.config.js index 9f657d26a1..5d6ee7805f 100644 --- a/next.config.js +++ b/next.config.js @@ -1,7 +1,7 @@ const withBundleAnalyzer = require('@next/bundle-analyzer')({ enabled: process.env.ANALYZE === 'true', }); -const { i18n } = require('./next-i18next.config'); +// const { i18n } = require('./next-i18next.config'); // Use the SentryWebpack plugin to upload the source maps during build step const SentryWebpackPlugin = require('@sentry/webpack-plugin'); @@ -49,7 +49,7 @@ const hasAssetPrefix = /** @type {import('next').NextConfig} */ const nextConfig = { productionBrowserSourceMaps: true, - i18n, + // i18n, serverRuntimeConfig: { rootDir: __dirname, }, diff --git a/package-lock.json b/package-lock.json index bfcfc4f524..ae16d054b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@emotion/react": "^11.11.1", "@emotion/server": "^11.11.0", "@emotion/styled": "^11.11.0", + "@formatjs/intl-localematcher": "^0.5.4", "@mapbox/mapbox-gl-draw": "^1.3.0", "@mapbox/togeojson": "^0.16.1", "@math.gl/web-mercator": "^3.5.3", @@ -63,7 +64,8 @@ "mapbox-gl": "^1.13.0", "mapbox-gl-compare": "^0.4.0", "material-ui-popup-state": "^4.1.0", - "next": "13.4.19", + "negotiator": "^0.6.3", + "next": "^13.5.6", "next-connect": "^0.13.0", "next-i18next": "^12.1.0", "next-intl": "^3.5.3", @@ -117,6 +119,7 @@ "@types/express-slow-down": "^1.3.2", "@types/file-saver": "^2.0.5", "@types/geojson-validation": "^1.0.0", + "@types/negotiator": "^0.6.3", "@types/node": "^14.0.26", "@types/react": "^16.9.49", "@types/react-dom": "^18.0.11", @@ -135,7 +138,7 @@ "cypress-plugin-stripe-elements": "^1.0.2", "eslint": "^8.26.0", "eslint-config-airbnb": "^18.2.0", - "eslint-config-next": "13.4.19", + "eslint-config-next": "^13.5.6", "eslint-config-prettier": "^6.11.0", "eslint-plugin-cypress": "^2.12.1", "eslint-plugin-import": "^2.22.0", @@ -2399,6 +2402,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, "optional": true, "engines": { "node": ">=0.1.90" @@ -3365,14 +3369,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@formatjs/ecma402-abstract/node_modules/@formatjs/intl-localematcher": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", - "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@formatjs/ecma402-abstract/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -3455,9 +3451,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@formatjs/intl-localematcher": { - "version": "0.2.32", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.32.tgz", - "integrity": "sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", + "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", "dependencies": { "tslib": "^2.4.0" } @@ -3529,6 +3525,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -3545,6 +3542,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, "engines": { "node": ">=12" }, @@ -3556,6 +3554,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -3572,6 +3571,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -5021,14 +5021,14 @@ } }, "node_modules/@next/env": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.19.tgz", - "integrity": "sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==" + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.6.tgz", + "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==" }, "node_modules/@next/eslint-plugin-next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.19.tgz", - "integrity": "sha512-N/O+zGb6wZQdwu6atMZHbR7T9Np5SUFUjZqCbj0sXm+MwQO35M8TazVB4otm87GkXYs2l6OPwARd3/PUWhZBVQ==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.6.tgz", + "integrity": "sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==", "dev": true, "dependencies": { "glob": "7.1.7" @@ -5055,9 +5055,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz", - "integrity": "sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz", + "integrity": "sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==", "cpu": [ "arm64" ], @@ -5070,9 +5070,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz", - "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz", + "integrity": "sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==", "cpu": [ "x64" ], @@ -5085,9 +5085,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz", - "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz", + "integrity": "sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==", "cpu": [ "arm64" ], @@ -5100,9 +5100,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz", - "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz", + "integrity": "sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==", "cpu": [ "arm64" ], @@ -5115,9 +5115,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.19.tgz", - "integrity": "sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz", + "integrity": "sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==", "cpu": [ "x64" ], @@ -5130,9 +5130,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.19.tgz", - "integrity": "sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz", + "integrity": "sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==", "cpu": [ "x64" ], @@ -5145,9 +5145,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz", - "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz", + "integrity": "sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==", "cpu": [ "arm64" ], @@ -5160,9 +5160,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz", - "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz", + "integrity": "sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==", "cpu": [ "ia32" ], @@ -5175,9 +5175,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz", - "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz", + "integrity": "sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==", "cpu": [ "x64" ], @@ -5511,6 +5511,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, "optional": true, "engines": { "node": ">=14" @@ -8378,9 +8379,9 @@ "dev": true }, "node_modules/@swc/helpers": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", - "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", + "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", "dependencies": { "tslib": "^2.4.0" } @@ -10137,6 +10138,12 @@ "@types/node": "*" } }, + "node_modules/@types/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@types/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-JkXTOdKs5MF086b/pt8C3+yVp3iDUwG635L7oCH6HvJvvr6lSUU5oe/gLXnPEfYRROHjJIPgCV6cuAg8gGkntQ==", + "dev": true + }, "node_modules/@types/node": { "version": "14.18.63", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", @@ -11046,6 +11053,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -12224,7 +12232,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/bare-events": { "version": "2.2.0", @@ -12456,6 +12465,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -12835,6 +12845,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, "engines": { "node": ">=10" } @@ -12863,6 +12874,7 @@ "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, "funding": [ { "type": "github", @@ -12927,6 +12939,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, "engines": { "node": ">=6" } @@ -12959,6 +12972,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, "dependencies": { "string-width": "^4.2.0" }, @@ -13371,7 +13385,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/concat-stream": { "version": "2.0.0", @@ -15112,7 +15127,8 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "node_modules/ecc-jsbn": { "version": "0.1.2", @@ -15174,7 +15190,8 @@ "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/emojis-list": { "version": "3.0.0", @@ -15700,19 +15717,19 @@ } }, "node_modules/eslint-config-next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.19.tgz", - "integrity": "sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.6.tgz", + "integrity": "sha512-o8pQsUHTo9aHqJ2YiZDym5gQAMRf7O2HndHo/JZeY7TDD+W4hk6Ma8Vw54RHiBeb7OWWO5dPirQB+Is/aVQ7Kg==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "13.4.19", - "@rushstack/eslint-patch": "^1.1.3", + "@next/eslint-plugin-next": "13.5.6", + "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" }, "peerDependencies": { @@ -17039,6 +17056,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -17054,6 +17072,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "engines": { "node": ">=14" }, @@ -17233,6 +17252,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -17244,6 +17264,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -17254,7 +17275,8 @@ "node_modules/fs-minipass/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/fs-monkey": { "version": "1.0.5", @@ -17611,6 +17633,7 @@ "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -17648,6 +17671,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -17656,6 +17680,7 @@ "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -18131,7 +18156,8 @@ "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, "node_modules/html-entities": { "version": "2.4.0", @@ -18533,6 +18559,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -18541,6 +18568,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, "engines": { "node": ">=8" } @@ -18570,6 +18598,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, "engines": { "node": ">=10" } @@ -19513,6 +19542,7 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -20865,6 +20895,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -20884,6 +20915,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -20892,6 +20924,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -20904,6 +20937,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -20914,7 +20948,8 @@ "node_modules/minizlib/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/mjolnir.js": { "version": "2.7.1", @@ -21188,35 +21223,34 @@ "dev": true }, "node_modules/next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/next/-/next-13.4.19.tgz", - "integrity": "sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/next/-/next-13.5.6.tgz", + "integrity": "sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==", "dependencies": { - "@next/env": "13.4.19", - "@swc/helpers": "0.5.1", + "@next/env": "13.5.6", + "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", + "postcss": "8.4.31", "styled-jsx": "5.1.1", - "watchpack": "2.4.0", - "zod": "3.21.4" + "watchpack": "2.4.0" }, "bin": { "next": "dist/bin/next" }, "engines": { - "node": ">=16.8.0" + "node": ">=16.14.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "13.4.19", - "@next/swc-darwin-x64": "13.4.19", - "@next/swc-linux-arm64-gnu": "13.4.19", - "@next/swc-linux-arm64-musl": "13.4.19", - "@next/swc-linux-x64-gnu": "13.4.19", - "@next/swc-linux-x64-musl": "13.4.19", - "@next/swc-win32-arm64-msvc": "13.4.19", - "@next/swc-win32-ia32-msvc": "13.4.19", - "@next/swc-win32-x64-msvc": "13.4.19" + "@next/swc-darwin-arm64": "13.5.6", + "@next/swc-darwin-x64": "13.5.6", + "@next/swc-linux-arm64-gnu": "13.5.6", + "@next/swc-linux-arm64-musl": "13.5.6", + "@next/swc-linux-x64-gnu": "13.5.6", + "@next/swc-linux-x64-musl": "13.5.6", + "@next/swc-win32-arm64-msvc": "13.5.6", + "@next/swc-win32-ia32-msvc": "13.5.6", + "@next/swc-win32-x64-msvc": "13.5.6" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -21296,6 +21330,19 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/next-intl/node_modules/@formatjs/intl-localematcher": { + "version": "0.2.32", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.32.tgz", + "integrity": "sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/next-intl/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, "node_modules/next-unused": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/next-unused/-/next-unused-0.0.6.tgz", @@ -21322,9 +21369,9 @@ } }, "node_modules/next/node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -21333,10 +21380,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -21366,14 +21417,6 @@ } } }, - "node_modules/next/node_modules/zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -21595,6 +21638,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -21606,6 +21650,7 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, "bin": { "semver": "bin/semver" } @@ -24695,6 +24740,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -24853,6 +24899,7 @@ "version": "1.10.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -24868,6 +24915,7 @@ "version": "10.2.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, "engines": { "node": "14 || >=16.14" } @@ -27641,6 +27689,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -28042,6 +28091,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -28050,12 +28100,14 @@ "node_modules/spdx-exceptions": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -28064,7 +28116,8 @@ "node_modules/spdx-license-ids": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", - "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==" + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", + "dev": true }, "node_modules/sprintf-js": { "version": "1.0.3", @@ -28249,6 +28302,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -28261,7 +28315,8 @@ "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", @@ -28363,6 +28418,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -28664,6 +28720,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dev": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -28703,6 +28760,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -28711,6 +28769,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -28721,7 +28780,8 @@ "node_modules/tar/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/telejson": { "version": "7.2.0", @@ -28936,7 +28996,8 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/throttleit": { "version": "1.0.1", @@ -30135,6 +30196,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -30720,6 +30782,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -30737,6 +30800,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -30753,6 +30817,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, "engines": { "node": ">=12" }, @@ -30764,6 +30829,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "engines": { "node": ">=12" }, @@ -30775,6 +30841,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -30791,6 +30858,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -30815,6 +30883,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" diff --git a/package.json b/package.json index b6f8ac2c8c..33ecf51123 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "@emotion/react": "^11.11.1", "@emotion/server": "^11.11.0", "@emotion/styled": "^11.11.0", + "@formatjs/intl-localematcher": "^0.5.4", "@mapbox/mapbox-gl-draw": "^1.3.0", "@mapbox/togeojson": "^0.16.1", "@math.gl/web-mercator": "^3.5.3", @@ -96,7 +97,8 @@ "mapbox-gl": "^1.13.0", "mapbox-gl-compare": "^0.4.0", "material-ui-popup-state": "^4.1.0", - "next": "13.4.19", + "negotiator": "^0.6.3", + "next": "^13.5.6", "next-connect": "^0.13.0", "next-i18next": "^12.1.0", "next-intl": "^3.5.3", @@ -150,6 +152,7 @@ "@types/express-slow-down": "^1.3.2", "@types/file-saver": "^2.0.5", "@types/geojson-validation": "^1.0.0", + "@types/negotiator": "^0.6.3", "@types/node": "^14.0.26", "@types/react": "^16.9.49", "@types/react-dom": "^18.0.11", @@ -168,7 +171,7 @@ "cypress-plugin-stripe-elements": "^1.0.2", "eslint": "^8.26.0", "eslint-config-airbnb": "^18.2.0", - "eslint-config-next": "13.4.19", + "eslint-config-next": "^13.5.6", "eslint-config-prettier": "^6.11.0", "eslint-plugin-cypress": "^2.12.1", "eslint-plugin-import": "^2.22.0", diff --git a/pages/sites/[slug]/[locale]/index.tsx b/pages/sites/[slug]/[locale]/index.tsx index aa49149164..fcb218726e 100644 --- a/pages/sites/[slug]/[locale]/index.tsx +++ b/pages/sites/[slug]/[locale]/index.tsx @@ -181,8 +181,19 @@ export default function Donate({ } export async function getStaticPaths() { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: await constructPathsForTenantSlug(), + paths, fallback: 'blocking', }; } From 19cfdd9eb5dcd58f52b32d2a06cc154083b7f412 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 19 Feb 2024 11:39:32 +0530 Subject: [PATCH 05/70] feat: adds default fallback behaviour for unsupported locales in url --- middleware.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/middleware.ts b/middleware.ts index d2d07b0e30..c08ca14070 100644 --- a/middleware.ts +++ b/middleware.ts @@ -31,6 +31,25 @@ function getLocale(request: NextRequest): string | undefined { return locale; } +/** Identifies locale in relative url and removes it */ +function removeLocaleFromUrl(pathname: string): string { + let newPathname = ''; + const localeRegex = /^[a-z]{2}$/i; + + const splitPathname = pathname.split('/'); + if (splitPathname.length < 2) return pathname; + + const firstSegment = splitPathname[1]; + const splitFirstSegment = firstSegment.split('-'); + + if (localeRegex.test(splitFirstSegment[0])) { + newPathname = splitPathname.slice(2).join('/'); + return newPathname; + } + + return pathname; +} + export const config = { matcher: [ // This regular expression matches any string except those containing "api", "static", files with extensions, or "_next". @@ -50,8 +69,9 @@ export default async function middleware(req: NextRequest) { if (isLocaleMissing) { const locale = getLocale(req); + const cleanPathname = removeLocaleFromUrl(pathname); const newUrl = new URL( - `/${locale}${pathname.startsWith('/') ? '' : '/'}${pathname}`, + `/${locale}${cleanPathname.startsWith('/') ? '' : '/'}${cleanPathname}`, req.url ); return NextResponse.redirect(newUrl); From c59f9d04e39b5f14eae463556e02eabe8e2e52ef Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 19 Feb 2024 13:11:28 +0530 Subject: [PATCH 06/70] feat: sets up static paths for locale all routes - also uses a standard arrow function for getStaticProps throughout --- pages/sites/[slug]/[locale]/[p].tsx | 5 +++-- pages/sites/[slug]/[locale]/all.tsx | 17 ++++++++++++++--- .../[slug]/[locale]/claim/[type]/[code].tsx | 5 +++-- .../sites/[slug]/[locale]/complete-signup.tsx | 17 ++++++++++++++--- pages/sites/[slug]/[locale]/home.tsx | 17 ++++++++++++++--- pages/sites/[slug]/[locale]/index.tsx | 4 ++-- pages/sites/[slug]/[locale]/login.tsx | 17 ++++++++++++++--- .../sites/[slug]/[locale]/profile/api-key.tsx | 18 ++++++++++++++---- .../profile/bulk-codes/[method]/[id].tsx | 1 + .../profile/bulk-codes/[method]/index.tsx | 1 + .../[locale]/profile/bulk-codes/index.tsx | 18 ++++++++++++++---- .../[slug]/[locale]/profile/delete-account.tsx | 18 ++++++++++++++---- .../[slug]/[locale]/profile/donation-link.tsx | 18 ++++++++++++++---- pages/sites/[slug]/[locale]/profile/edit.tsx | 18 ++++++++++++++---- .../[slug]/[locale]/profile/giftfund/index.tsx | 18 ++++++++++++++---- .../sites/[slug]/[locale]/profile/history.tsx | 18 ++++++++++++++---- .../[locale]/profile/impersonate-user.tsx | 18 ++++++++++++++---- pages/sites/[slug]/[locale]/profile/index.tsx | 18 ++++++++++++++---- .../profile/payouts/add-bank-details.tsx | 18 ++++++++++++++---- .../profile/payouts/edit-bank-details/[id].tsx | 5 +++-- .../[slug]/[locale]/profile/payouts/index.tsx | 18 ++++++++++++++---- .../[locale]/profile/payouts/schedule.tsx | 18 ++++++++++++++---- .../[locale]/profile/planetcash/index.tsx | 18 ++++++++++++++---- .../[slug]/[locale]/profile/planetcash/new.tsx | 18 ++++++++++++++---- .../profile/planetcash/transactions.tsx | 18 ++++++++++++++---- .../[slug]/[locale]/profile/projects/[id].tsx | 5 +++-- .../[slug]/[locale]/profile/projects/index.tsx | 18 ++++++++++++++---- .../[locale]/profile/projects/new-project.tsx | 18 ++++++++++++++---- .../[slug]/[locale]/profile/recurrency.tsx | 18 ++++++++++++++---- .../[slug]/[locale]/profile/redeem/[code].tsx | 5 +++-- .../[slug]/[locale]/profile/register-trees.tsx | 18 ++++++++++++++---- .../profile/treemapper/data-explorer.tsx | 18 ++++++++++++++---- .../[locale]/profile/treemapper/import.tsx | 18 ++++++++++++++---- .../[locale]/profile/treemapper/index.tsx | 18 ++++++++++++++---- .../[locale]/profile/treemapper/my-species.tsx | 18 ++++++++++++++---- .../sites/[slug]/[locale]/profile/widgets.tsx | 18 ++++++++++++++---- pages/sites/[slug]/[locale]/s/[id].tsx | 5 +++-- pages/sites/[slug]/[locale]/t/[id].tsx | 5 +++-- pages/sites/[slug]/[locale]/verify-email.tsx | 17 ++++++++++++++--- 39 files changed, 431 insertions(+), 127 deletions(-) diff --git a/pages/sites/[slug]/[locale]/[p].tsx b/pages/sites/[slug]/[locale]/[p].tsx index 5f73c4ecc5..8d718df264 100644 --- a/pages/sites/[slug]/[locale]/[p].tsx +++ b/pages/sites/[slug]/[locale]/[p].tsx @@ -211,7 +211,7 @@ export default function Donate({ ); } -export async function getStaticPaths() { +export const getStaticPaths = async () => { const subDomainPaths = await constructPathsForTenantSlug(); const paths = subDomainPaths.map((path) => { @@ -219,6 +219,7 @@ export async function getStaticPaths() { params: { slug: path.params.slug, p: v4(), + locale: 'en', }, }; }); @@ -227,7 +228,7 @@ export async function getStaticPaths() { paths: paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/all.tsx b/pages/sites/[slug]/[locale]/all.tsx index 659f7e4d9e..58cf00e4ea 100644 --- a/pages/sites/[slug]/[locale]/all.tsx +++ b/pages/sites/[slug]/[locale]/all.tsx @@ -112,12 +112,23 @@ export default function Home({ initialized, pageProps }: Props) { ); } -export async function getStaticPaths() { +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: await constructPathsForTenantSlug(), + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/claim/[type]/[code].tsx b/pages/sites/[slug]/[locale]/claim/[type]/[code].tsx index 8cc4fca2ac..107f5c9034 100644 --- a/pages/sites/[slug]/[locale]/claim/[type]/[code].tsx +++ b/pages/sites/[slug]/[locale]/claim/[type]/[code].tsx @@ -178,7 +178,7 @@ function ClaimDonation({ pageProps }: Props): ReactElement { ); } -export async function getStaticPaths() { +export const getStaticPaths = async () => { const subDomainPaths = await constructPathsForTenantSlug(); const paths = subDomainPaths.map((path) => { @@ -187,6 +187,7 @@ export async function getStaticPaths() { slug: path.params.slug, type: v4(), code: v4(), + locale: 'en', }, }; }); @@ -195,7 +196,7 @@ export async function getStaticPaths() { paths: paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/complete-signup.tsx b/pages/sites/[slug]/[locale]/complete-signup.tsx index c9a9a3b5f5..e60ac693e1 100644 --- a/pages/sites/[slug]/[locale]/complete-signup.tsx +++ b/pages/sites/[slug]/[locale]/complete-signup.tsx @@ -44,12 +44,23 @@ export default function UserProfile({ pageProps }: Props) { ); } -export async function getStaticPaths() { +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: await constructPathsForTenantSlug(), + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/home.tsx b/pages/sites/[slug]/[locale]/home.tsx index 466f4088ff..3c03455bfd 100644 --- a/pages/sites/[slug]/[locale]/home.tsx +++ b/pages/sites/[slug]/[locale]/home.tsx @@ -127,12 +127,23 @@ export default function Home({ initialized, pageProps }: Props) { ); } -export async function getStaticPaths() { +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: await constructPathsForTenantSlug(), + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/index.tsx b/pages/sites/[slug]/[locale]/index.tsx index fcb218726e..2b5c3b2d0f 100644 --- a/pages/sites/[slug]/[locale]/index.tsx +++ b/pages/sites/[slug]/[locale]/index.tsx @@ -180,7 +180,7 @@ export default function Donate({ ); } -export async function getStaticPaths() { +export const getStaticPaths = async () => { const subDomainPaths = await constructPathsForTenantSlug(); const paths = subDomainPaths.map((path) => { @@ -196,7 +196,7 @@ export async function getStaticPaths() { paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/login.tsx b/pages/sites/[slug]/[locale]/login.tsx index 5faf05c40a..f1cab502e5 100644 --- a/pages/sites/[slug]/[locale]/login.tsx +++ b/pages/sites/[slug]/[locale]/login.tsx @@ -84,12 +84,23 @@ export default function Login({ pageProps }: Props): ReactElement { ); } -export async function getStaticPaths() { +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: await constructPathsForTenantSlug(), + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/api-key.tsx b/pages/sites/[slug]/[locale]/profile/api-key.tsx index 13ef1fae5d..4cd44f89ec 100644 --- a/pages/sites/[slug]/[locale]/profile/api-key.tsx +++ b/pages/sites/[slug]/[locale]/profile/api-key.tsx @@ -49,13 +49,23 @@ function EditProfilePage({ pageProps: { tenantConfig } }: Props): ReactElement { export default EditProfilePage; -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx index c083054427..7cdc1891ac 100644 --- a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx +++ b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx @@ -128,6 +128,7 @@ export const getStaticPaths = async () => { slug: path.params.slug, method: v4(), id: v4(), + locale: 'en', }, }; }); diff --git a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx index 8b58a38c09..ed92aebded 100644 --- a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx @@ -81,6 +81,7 @@ export const getStaticPaths = async () => { params: { slug: path.params.slug, method: v4(), + locale: 'en', }, }; }); diff --git a/pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx b/pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx index fd1af8be27..9c9586a98b 100644 --- a/pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx @@ -49,13 +49,23 @@ export default function BulkCodePage({ pageProps }: Props): ReactElement { ); } -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/delete-account.tsx b/pages/sites/[slug]/[locale]/profile/delete-account.tsx index b379c20f93..e057cc40e0 100644 --- a/pages/sites/[slug]/[locale]/profile/delete-account.tsx +++ b/pages/sites/[slug]/[locale]/profile/delete-account.tsx @@ -51,13 +51,23 @@ function DeleteProfilePage({ export default DeleteProfilePage; -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/donation-link.tsx b/pages/sites/[slug]/[locale]/profile/donation-link.tsx index 301e89880b..e7696f5b20 100644 --- a/pages/sites/[slug]/[locale]/profile/donation-link.tsx +++ b/pages/sites/[slug]/[locale]/profile/donation-link.tsx @@ -49,13 +49,23 @@ export default function DonationLinkPage({ ); } -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/edit.tsx b/pages/sites/[slug]/[locale]/profile/edit.tsx index c17b43fe90..2b45699af3 100644 --- a/pages/sites/[slug]/[locale]/profile/edit.tsx +++ b/pages/sites/[slug]/[locale]/profile/edit.tsx @@ -49,13 +49,23 @@ function EditProfilePage({ pageProps: { tenantConfig } }: Props): ReactElement { export default EditProfilePage; -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/giftfund/index.tsx b/pages/sites/[slug]/[locale]/profile/giftfund/index.tsx index 96c2689ffe..abeea37c54 100644 --- a/pages/sites/[slug]/[locale]/profile/giftfund/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/giftfund/index.tsx @@ -50,13 +50,23 @@ export default function Register({ ); } -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/history.tsx b/pages/sites/[slug]/[locale]/profile/history.tsx index d58f80d6de..659200ed74 100644 --- a/pages/sites/[slug]/[locale]/profile/history.tsx +++ b/pages/sites/[slug]/[locale]/profile/history.tsx @@ -175,13 +175,23 @@ function AccountHistory({ pageProps }: Props): ReactElement { export default AccountHistory; -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx b/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx index 7e34606a45..b7019929cd 100644 --- a/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx +++ b/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx @@ -58,13 +58,23 @@ const ImpersonateUserPage = ({ export default ImpersonateUserPage; -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/index.tsx b/pages/sites/[slug]/[locale]/profile/index.tsx index 6701d40a1d..d2656c239b 100644 --- a/pages/sites/[slug]/[locale]/profile/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/index.tsx @@ -76,13 +76,23 @@ function ProfilePage({ pageProps: { tenantConfig } }: Props): ReactElement { export default ProfilePage; -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/payouts/add-bank-details.tsx b/pages/sites/[slug]/[locale]/profile/payouts/add-bank-details.tsx index 878c70dbdc..c25ddb6327 100644 --- a/pages/sites/[slug]/[locale]/profile/payouts/add-bank-details.tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/add-bank-details.tsx @@ -58,13 +58,23 @@ export default function AddBankDetailsPage({ ); } -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/payouts/edit-bank-details/[id].tsx b/pages/sites/[slug]/[locale]/profile/payouts/edit-bank-details/[id].tsx index 566ca1373c..31f87b0a8f 100644 --- a/pages/sites/[slug]/[locale]/profile/payouts/edit-bank-details/[id].tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/edit-bank-details/[id].tsx @@ -52,7 +52,7 @@ export default function EditBankDetailsPage({ ); } -export async function getStaticPaths() { +export const getStaticPaths = async () => { const subDomainPaths = await constructPathsForTenantSlug(); const paths = subDomainPaths.map((path) => { @@ -60,6 +60,7 @@ export async function getStaticPaths() { params: { slug: path.params.slug, id: v4(), + locale: 'en', }, }; }); @@ -68,7 +69,7 @@ export async function getStaticPaths() { paths: paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/payouts/index.tsx b/pages/sites/[slug]/[locale]/profile/payouts/index.tsx index 3d5e4f8cf5..8579dd0275 100644 --- a/pages/sites/[slug]/[locale]/profile/payouts/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/index.tsx @@ -70,13 +70,23 @@ export default function OverviewPage({ ); } -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx b/pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx index 1cf74b2eab..77db0d7e65 100644 --- a/pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx @@ -59,13 +59,23 @@ export default function PayoutSchedulePage({ ); } -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/planetcash/index.tsx b/pages/sites/[slug]/[locale]/profile/planetcash/index.tsx index 74c46e493d..d2dc35cfb1 100644 --- a/pages/sites/[slug]/[locale]/profile/planetcash/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/planetcash/index.tsx @@ -67,13 +67,23 @@ export default function PlanetCashPage({ ); } -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/planetcash/new.tsx b/pages/sites/[slug]/[locale]/profile/planetcash/new.tsx index b9e47ef468..b128362d1a 100644 --- a/pages/sites/[slug]/[locale]/profile/planetcash/new.tsx +++ b/pages/sites/[slug]/[locale]/profile/planetcash/new.tsx @@ -71,13 +71,23 @@ export default function PlanetCashCreatePage({ ); } -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/planetcash/transactions.tsx b/pages/sites/[slug]/[locale]/profile/planetcash/transactions.tsx index 12e243459d..0074f9e3d9 100644 --- a/pages/sites/[slug]/[locale]/profile/planetcash/transactions.tsx +++ b/pages/sites/[slug]/[locale]/profile/planetcash/transactions.tsx @@ -71,13 +71,23 @@ export default function PlanetCashTransactionsPage({ ); } -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/projects/[id].tsx b/pages/sites/[slug]/[locale]/profile/projects/[id].tsx index 7612b35e64..e71e2e37bf 100644 --- a/pages/sites/[slug]/[locale]/profile/projects/[id].tsx +++ b/pages/sites/[slug]/[locale]/profile/projects/[id].tsx @@ -126,7 +126,7 @@ function ManageSingleProject({ ); } -export async function getStaticPaths() { +export const getStaticPaths = async () => { const subDomainPaths = await constructPathsForTenantSlug(); const paths = subDomainPaths.map((path) => { @@ -134,6 +134,7 @@ export async function getStaticPaths() { params: { slug: path.params.slug, id: v4(), + locale: 'en', }, }; }); @@ -142,7 +143,7 @@ export async function getStaticPaths() { paths: paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/projects/index.tsx b/pages/sites/[slug]/[locale]/profile/projects/index.tsx index 1eb85621e3..a1e0b3f58a 100644 --- a/pages/sites/[slug]/[locale]/profile/projects/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/projects/index.tsx @@ -52,13 +52,23 @@ export default function Register({ ); } -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/projects/new-project.tsx b/pages/sites/[slug]/[locale]/profile/projects/new-project.tsx index 2d27bc4db2..9793906742 100644 --- a/pages/sites/[slug]/[locale]/profile/projects/new-project.tsx +++ b/pages/sites/[slug]/[locale]/profile/projects/new-project.tsx @@ -98,13 +98,23 @@ export default function AddProjectType({ ); } -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/recurrency.tsx b/pages/sites/[slug]/[locale]/profile/recurrency.tsx index 6354709c32..3ae3b996ce 100644 --- a/pages/sites/[slug]/[locale]/profile/recurrency.tsx +++ b/pages/sites/[slug]/[locale]/profile/recurrency.tsx @@ -119,13 +119,23 @@ function RecurrentDonations({ export default RecurrentDonations; -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx b/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx index 1196b8a1e9..25dc9c62e9 100644 --- a/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx +++ b/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx @@ -190,7 +190,7 @@ const ReedemCode = ({ pageProps: { tenantConfig } }: Props) => { ); }; -export async function getStaticPaths() { +export const getStaticPaths = async () => { const subDomainPaths = await constructPathsForTenantSlug(); const paths = subDomainPaths.map((path) => { @@ -198,6 +198,7 @@ export async function getStaticPaths() { params: { slug: path.params.slug, code: v4(), + locale: 'en', }, }; }); @@ -206,7 +207,7 @@ export async function getStaticPaths() { paths: paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/register-trees.tsx b/pages/sites/[slug]/[locale]/profile/register-trees.tsx index 9f59ff21c1..f4f4509375 100644 --- a/pages/sites/[slug]/[locale]/profile/register-trees.tsx +++ b/pages/sites/[slug]/[locale]/profile/register-trees.tsx @@ -52,13 +52,23 @@ export default function Register({ ); } -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx index 5a22c80163..10299a3054 100644 --- a/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx @@ -64,13 +64,23 @@ function TreeMapperAnalytics({ export default TreeMapperAnalytics; -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/treemapper/import.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/import.tsx index b000fe82f0..d80db7dc0f 100644 --- a/pages/sites/[slug]/[locale]/profile/treemapper/import.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/import.tsx @@ -52,13 +52,23 @@ export default function Import({ ); } -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/treemapper/index.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/index.tsx index 0adaecdae8..7c25073d77 100644 --- a/pages/sites/[slug]/[locale]/profile/treemapper/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/index.tsx @@ -53,13 +53,23 @@ function TreeMapperPage({ pageProps: { tenantConfig } }: Props): ReactElement { export default TreeMapperPage; -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx index 19c4272cd3..f13315665d 100644 --- a/pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx @@ -52,13 +52,23 @@ export default function MySpeciesPage({ ); } -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/profile/widgets.tsx b/pages/sites/[slug]/[locale]/profile/widgets.tsx index 93ac634cde..6571541961 100644 --- a/pages/sites/[slug]/[locale]/profile/widgets.tsx +++ b/pages/sites/[slug]/[locale]/profile/widgets.tsx @@ -70,13 +70,23 @@ function ProfilePage({ pageProps: { tenantConfig } }: Props): ReactElement { export default ProfilePage; -export async function getStaticPaths() { - const paths = await constructPathsForTenantSlug(); +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: paths, + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/s/[id].tsx b/pages/sites/[slug]/[locale]/s/[id].tsx index fef7dd225d..699a7c5402 100644 --- a/pages/sites/[slug]/[locale]/s/[id].tsx +++ b/pages/sites/[slug]/[locale]/s/[id].tsx @@ -72,7 +72,7 @@ export default function DirectGift({ return tenantConfig ?
: <>; } -export async function getStaticPaths() { +export const getStaticPaths = async () => { const subDomainPaths = await constructPathsForTenantSlug(); const paths = subDomainPaths.map((path) => { @@ -80,6 +80,7 @@ export async function getStaticPaths() { params: { slug: path.params.slug, id: v4(), + locale: 'en', }, }; }); @@ -88,7 +89,7 @@ export async function getStaticPaths() { paths: paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/t/[id].tsx b/pages/sites/[slug]/[locale]/t/[id].tsx index 778b586231..c13edaa94a 100644 --- a/pages/sites/[slug]/[locale]/t/[id].tsx +++ b/pages/sites/[slug]/[locale]/t/[id].tsx @@ -100,7 +100,7 @@ function PublicProfile({ pageProps: { tenantConfig } }: Props): ReactElement { ); } -export async function getStaticPaths() { +export const getStaticPaths = async () => { const subDomainPaths = await constructPathsForTenantSlug(); const paths = subDomainPaths.map((path) => { @@ -108,6 +108,7 @@ export async function getStaticPaths() { params: { slug: path.params.slug, id: v4(), + locale: 'en', }, }; }); @@ -116,7 +117,7 @@ export async function getStaticPaths() { paths: paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; diff --git a/pages/sites/[slug]/[locale]/verify-email.tsx b/pages/sites/[slug]/[locale]/verify-email.tsx index 3b8afa545e..194827b797 100644 --- a/pages/sites/[slug]/[locale]/verify-email.tsx +++ b/pages/sites/[slug]/[locale]/verify-email.tsx @@ -45,12 +45,23 @@ export default function VerifyEmail({ pageProps }: Props): ReactElement { ); } -export async function getStaticPaths() { +export const getStaticPaths = async () => { + const subDomainPaths = await constructPathsForTenantSlug(); + + const paths = subDomainPaths.map((path) => { + return { + params: { + slug: path.params.slug, + locale: 'en', + }, + }; + }); + return { - paths: await constructPathsForTenantSlug(), + paths, fallback: 'blocking', }; -} +}; interface StaticProps { tenantConfig: Tenant; From 28c70ce8169ee41f68f4e64b771701ecbd094a46 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 19 Feb 2024 13:23:29 +0530 Subject: [PATCH 07/70] fix: fixes invalid import path --- pages/sites/[slug]/[locale]/profile/widgets.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/sites/[slug]/[locale]/profile/widgets.tsx b/pages/sites/[slug]/[locale]/profile/widgets.tsx index 6571541961..f3a2d88e87 100644 --- a/pages/sites/[slug]/[locale]/profile/widgets.tsx +++ b/pages/sites/[slug]/[locale]/profile/widgets.tsx @@ -2,7 +2,7 @@ import React, { ReactElement } from 'react'; import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; import EmbedModal from '../../../../../src/features/user/Widget/EmbedModal'; -import styles from './../../../../src/features/common/Layout/UserLayout/UserLayout.module.scss'; +import styles from '../../../../../src/features/common/Layout/UserLayout/UserLayout.module.scss'; import Head from 'next/head'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useTranslation } from 'next-i18next'; From 80399adbf722769b307774ad1c0918ad7a8bfb84 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Tue, 20 Feb 2024 18:36:20 +0530 Subject: [PATCH 08/70] feat: integrates next-intl with / route --- pages/_app.tsx | 172 +++--- pages/sites/[slug]/[locale]/index.tsx | 138 +++-- public/static/locales/de/common.json | 273 ++++----- public/static/locales/de/country.json | 524 +++++++++--------- public/static/locales/de/donate.json | 236 ++++---- public/static/locales/de/manageProjects.json | 422 +++++++------- public/static/locales/de/maps.json | 100 ++-- public/static/locales/en/common.json | 273 ++++----- public/static/locales/en/country.json | 524 +++++++++--------- public/static/locales/en/donate.json | 228 ++++---- public/static/locales/en/manageProjects.json | 486 ++++++++-------- public/static/locales/en/maps.json | 100 ++-- src/features/common/Layout/Navbar/index.tsx | 33 +- .../donations/components/DirectGift.tsx | 14 +- .../projects/components/PopupProject.tsx | 45 +- .../projects/components/ProjectSnippet.tsx | 49 +- .../projects/components/ProjectsMap.tsx | 4 +- .../projects/components/TopProjectBadge.tsx | 35 +- .../projects/components/maps/Credits.tsx | 37 +- .../projects/components/maps/Explore.tsx | 12 +- .../components/maps/ExploreInfoModal.tsx | 176 +++--- .../projectDetails/TopProjectReports.tsx | 41 +- .../projects/components/projects/Header.tsx | 14 +- .../components/projects/SearchBar.tsx | 10 +- src/features/projects/screens/Projects.tsx | 26 +- 25 files changed, 1998 insertions(+), 1974 deletions(-) diff --git a/pages/_app.tsx b/pages/_app.tsx index 967daa4eb3..cffa84f0d4 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -13,7 +13,6 @@ import '../src/theme/global.scss'; import './../src/features/projects/styles/Projects.scss'; import './../src/features/common/Layout/Navbar/Navbar.scss'; import ThemeProvider from '../src/theme/themeContext'; -import { useTranslation } from 'next-i18next'; import * as Sentry from '@sentry/node'; import { RewriteFrames } from '@sentry/integrations'; import getConfig from 'next/config'; @@ -32,8 +31,6 @@ import materialTheme from '../src/theme/themeStyles'; import QueryParamsProvider from '../src/features/common/Layout/QueryParamsContext'; import { PlanetCashProvider } from '../src/features/common/Layout/PlanetCashContext'; import { PayoutsProvider } from '../src/features/common/Layout/PayoutsContext'; -import { appWithTranslation } from 'next-i18next'; -import nextI18NextConfig from '../next-i18next.config.js'; import { trpc } from '../src/utils/trpc'; import MapHolder from '../src/features/projects/components/maps/MapHolder'; import { TenantProvider } from '../src/features/common/Layout/TenantContext'; @@ -43,6 +40,7 @@ import { getTenantSlug, } from '../src/utils/multiTenancy/helpers'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; +import { NextIntlClientProvider } from 'next-intl'; type AppOwnProps = { tenantConfig: Tenant }; @@ -117,7 +115,6 @@ const PlanetWeb = ({ pageProps, emotionCache = clientSideEmotionCache, }: MyAppProps & AppOwnProps) => { - const { i18n } = useTranslation(); const router = useRouter(); const [isMap, setIsMap] = React.useState(false); const [currencyCode, setCurrencyCode] = React.useState(''); @@ -137,19 +134,19 @@ const PlanetWeb = ({ } } - const [initialized, setInitialized] = React.useState(false); + // const [initialized, setInitialized] = React.useState(false); React.useEffect(() => { storeConfig(tenantConfig); }, []); - React.useEffect(() => { + /* React.useEffect(() => { if (i18n && i18n.isInitialized) { setInitialized(true); } - }, [i18n, i18n.isInitialized]); + }, [i18n, i18n.isInitialized]);*/ - React.useEffect(() => { + /* React.useEffect(() => { if ( localStorage.getItem('language') !== null && i18n && @@ -158,16 +155,16 @@ const PlanetWeb = ({ const languageFromLocalStorage: any = localStorage.getItem('language'); i18n.changeLanguage(languageFromLocalStorage); } - }, [i18n, i18n.isInitialized]); + }, [i18n, i18n.isInitialized]); */ React.useEffect(() => { if ( router.pathname === '/' || router.pathname === '/[p]' || router.pathname === '/[p]/[id]' || - router.pathname === '/sites/[slug]' || - router.pathname === '/sites/[slug]/[p]' || - router.pathname === '/sites/[slug]/[p]/[id]' + router.pathname === '/sites/[slug]/[locale]' || + router.pathname === '/sites/[slug]/[locale]/[p]' || + router.pathname === '/sites/[slug]/[locale]/[p]/[id]' ) { setIsMap(true); } else { @@ -187,7 +184,7 @@ const PlanetWeb = ({ const ProjectProps = { pageProps, - initialized, + // initialized, currencyCode, setCurrencyCode, }; @@ -228,81 +225,86 @@ const PlanetWeb = ({ return ; } else { return tenantConfig ? ( - - - - -
-
- -
- -
- + + + + +
+
+ +
+ +
- - - - - - - - - - - {isMap ? ( - - ) : null} - - - - - - - - - - - + + + + + + + + + + + + {isMap ? ( + + ) : null} + + + + + + + + + + + +
-
- - - - + + + + + ) : ( <> ); @@ -330,4 +332,4 @@ PlanetWeb.getInitialProps = async ( return { ...ctx, pageProps } as AppOwnProps & AppInitialProps; }; -export default trpc.withTRPC(appWithTranslation(PlanetWeb, nextI18NextConfig)); +export default trpc.withTRPC(PlanetWeb); diff --git a/pages/sites/[slug]/[locale]/index.tsx b/pages/sites/[slug]/[locale]/index.tsx index 2b5c3b2d0f..0f336aeb87 100644 --- a/pages/sites/[slug]/[locale]/index.tsx +++ b/pages/sites/[slug]/[locale]/index.tsx @@ -11,8 +11,7 @@ import { ErrorHandlingContext } from '../../../../src/features/common/Layout/Err import DirectGift, { DirectGiftI, } from '../../../../src/features/donations/components/DirectGift'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { useTranslation } from 'next-i18next'; +import { useLocale } from 'next-intl'; import { handleError, APIError } from '@planet-sdk/common'; import { SetState } from '../../../../src/features/common/types/common'; import { MapProject } from '../../../../src/features/common/types/ProjectPropsContextInterface'; @@ -28,9 +27,10 @@ import { GetStaticPropsResult, } from 'next'; import { defaultTenant } from '../../../../tenant.config'; +import { AbstractIntlMessages } from 'next-intl'; +import deepmerge from 'deepmerge'; interface Props { - initialized: Boolean; currencyCode: string; setCurrencyCode: SetState; pageProps: { @@ -39,7 +39,6 @@ interface Props { } export default function Donate({ - initialized, currencyCode, setCurrencyCode, pageProps, @@ -59,7 +58,7 @@ export default function Donate({ // set local storage const { redirect, setErrors } = React.useContext(ErrorHandlingContext); - const { i18n } = useTranslation(); + const locale = useLocale(); const router = useRouter(); const [internalCurrencyCode, setInternalCurrencyCode] = React.useState(''); const [directGift, setDirectGift] = React.useState(null); @@ -110,12 +109,12 @@ export default function Donate({ if ( !internalCurrencyCode || currencyCode !== internalCurrencyCode || - internalLanguage !== i18n.language + internalLanguage !== locale ) { const currency = getStoredCurrency(); setInternalCurrencyCode(currency); setCurrencyCode(currency); - setInternalLanguage(i18n.language); + setInternalLanguage(locale); try { const projects = await getRequest( pageProps.tenantConfig.id, @@ -125,7 +124,7 @@ export default function Donate({ currency: currency, tenant: pageProps.tenantConfig.id, 'filter[purpose]': 'trees,conservation', - locale: i18n.language, + locale: locale, } ); setProjects(projects); @@ -139,7 +138,7 @@ export default function Donate({ } } loadProjects(); - }, [currencyCode, i18n.language]); + }, [currencyCode, locale]); const OtherProjectListProps = { showProjects, @@ -151,28 +150,26 @@ export default function Donate({ return pageProps.tenantConfig ? ( <> - {initialized ? ( - filteredProjects && initialized ? ( - <> - - - {directGift ? ( - showDirectGift ? ( - - ) : null - ) : null} - - - ) : ( - <> - ) - ) : null} + {filteredProjects !== null ? ( + <> + + + {directGift ? ( + showDirectGift ? ( + + ) : null + ) : null} + + + ) : ( + <> + )} {showProjects && } ) : ( @@ -198,43 +195,66 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const userMessages = { + ...( + await import( + `../../../../public/static/locales/${context.params?.locale}/common.json` + ) + ).default, + ...( + await import( + `../../../../public/static/locales/${context.params?.locale}/maps.json` + ) + ).default, + ...( + await import( + `../../../../public/static/locales/${context.params?.locale}/donate.json` + ) + ).default, + ...( + await import( + `../../../../public/static/locales/${context.params?.locale}/country.json` + ) + ).default, + ...( + await import( + `../../../../public/static/locales/${context.params?.locale}/manageProjects.json` + ) + ).default, + }; + + const defaultMessages = { + ...(await import('../../../../public/static/locales/en/common.json')) + .default, + ...(await import('../../../../public/static/locales/en/maps.json')).default, + ...(await import('../../../../public/static/locales/en/donate.json')) + .default, + ...(await import('../../../../public/static/locales/en/country.json')) + .default, + ...( + await import('../../../../public/static/locales/en/manageProjects.json') + ).default, + }; + + const messages: AbstractIntlMessages = deepmerge( + defaultMessages, + userMessages + ); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/public/static/locales/de/common.json b/public/static/locales/de/common.json index c00af86563..a30130c8f4 100644 --- a/public/static/locales/de/common.json +++ b/public/static/locales/de/common.json @@ -1,136 +1,139 @@ { - "tree_one": "Baum", - "tree_other": "Bäume", - "m2": "m²", - "by": "Von {{tpoName}}", - "to_project_by_tpo": "An {{projectName}} von {{tpoName}}", - "for": "für", - "trees": "Bäume", - "planted": "gepflanzt", - "privacy": "Datenschutz", - "terms": "AGB", - "imprint": "Impressum", - "status": "Status", - "contact": "Kontakt", - "supportUs": "Unterstütze uns", - "leaders": "Spitzenreiter", - "leaderboard": "Bestenliste", - "me": "Ich", - "signIn": "Anmelden", - "home": "Start", - "donate_gift": "Spenden/Schenken", - "plant": "Pflanzen", - "donate": "Spenden", - "gift": "Schenken", - "continue": "Weiter", - "selectLanguage": "Sprache wählen", - "selectCountry": "Land auswählen", - "ok": "OK", - "cancel": "Abbrechen", - "delete": "Löschen", - "deleteAccount": "Konto löschen", - "thankYou": "Vielen Dank", - "privacyPolicyNotice": "Durch die Nutzung dieser Website akzeptierst Du unsere", - "privacyPolicy": "Datenschutzerklärung & Cookie-Richtlinie", - "about_pftp": "Über Plant-for-the-Planet", - "january": "Januar", - "february": "Februar", - "march": "März", - "april": "April", - "may": "Mai", - "june": "Juni", - "july": "Juli", - "august": "August", - "september": "September", - "october": "Oktober", - "november": "November", - "december": "Dezember", - "approx": "Ungefähr", - "view": "Ansehen", - "verifyEmailHeader": "Bitte bestätige Deine E-Mail.", - "verifyEmailText": "Um Dein Konto zu sichern, müssen wir Deine E-Mail verifizieren. Bitte überprüfe Deinen Posteingang oder Deinen Spam- bzw. Junk-Ordner auf eine Bestätigungs-E-Mail und fahre dann mit dem Login fort.", - "verifyEmailInfo": "Wenn Du keine E-Mail erhalten hast, versuche bitte erneut, Dich anzumelden, und wir senden Dir eine weitere E-Mail.", - "continueToLogin": "Weiter zum Login", - "supportsUNEP": "Unterstützt das UNEP", - "plantedBy": "Gepflanzt von", - "redeemPopup": "Baumgeschenk bekommen? Log dich ein, um den Code einzulösen.", - "login": "Anmeldung", - "shop": "Shop", - "downloads": "Downloads", - "team": "Team", - "jobs": "Jobs", - "blogs": "Blogs", - "faqs": "FAQs", - "annualReports": "Jahresberichte", - "skipIntroVideo": "Intro überspringen", - "mapInfo": "Kartenhinweise", - "aboutUs": "Über uns", - "alternativelyEditProfile": "Alternativ kannst du dein Profil als privat markieren, indem du Profil bearbeiten aufrufst.", - "deleteAccountConsent": "Indem ich auf \"Löschen\" klicke, fordere ich Plant-for-the-Planet auf, alle mit meinem Plant-for-the-Planet-Konto verbundenen Daten zu löschen. Die Spendendaten können bis zu acht Jahre aufbewahrt werden. Bäume, die ich registriert habe, werden nicht entfernt, werden aber anonymisiert und können nicht erneut beansprucht werden.", - "deleteIrreversible": "Ich verstehe, dass die Kontolöschung von {{email}} irreversibel ist.", - "goBack": "Zurückgehen", - "deleteAccountMessage": "Um mit dem Löschen fortzufahren, gib bitte `{{delete}}` ein", - "deleteAccountLabel": "Tippe: {{delete}}", - "edit": "Bearbeiten", - "howDoesThisWork": "Wie funktioniert das?", - "copiedToClipboard": "In die Zwischenablage kopiert!", - "close": "Schließen", - "logout": "Abmelden", - "document": "Plattform-Dokumentation (EN)", - "featured": "Empfohlen", - "treeMapper": "TreeMapper", - "overview": "Übersicht", - "childrenAndYouth": "Kinder und Jugendliche", - "trillionTrees": "Billionen Bäume", - "yucatan": "Yucatán Renaturierung", - "partners": "Partner", - "changeChocolate": "Die Gute Schokolade", - "stopTalkingStartPlanting": "Stop talking. Start planting.", - "underMaintenance": "In Wartung", - "forbidden": "Du bist nicht berechtigt, diese Seite zu sehen!", - "connectionError": "Der Server konnte nicht erreicht werden. Bitte überprüfe deine Internetverbindung.", - "validationFailed": "Prüfung fehlgeschlagen!", - "add": "Hinzufügen", - "modalTitle": "Beende alle Dauerspenden um fortzufahren", - "modalSubtitle": "Bitte beende zuerst deine Dauerspenden", - "deleteCondition": "Bevor du fortfährst, vergewissere dich, dass alle Dauerspenden beendet sind.", - "showSubscriptions": "Meine Dauerspenden anzeigen", - "notFound": "Ressource nicht gefunden", - "tooManyRequest": "Zu viele Anfragen. Bitte warten Sie und versuchen Sie es später erneut oder wenden Sie sich an den Systemadministrator, um Unterstützung zu erhalten.", - "unauthorized": "Nicht autorisiert", - "validationError": "Validierungsfehler", - "internalServerError": "Interner Serverfehler - Bitte versuche es später noch einmal!", - "serviceUnavailable": "Die App wird derzeit gewartet, bitte prüfe status.plant-for-the-planet.org für weitere Informationen", - "account_duplicate": "Konto existiert bereits", - "line_item_amount_deviation": "Betragsabweichung", - "line_item_amount_invalid": "Ungültiger Betrag", - "line_item_amount_prohibited": "Betrag nicht erlaubt", - "idempotency_key_missing": "Fehlender Idempotenzschlüssel in der Kopfzeile", - "line_item_invalid_donor_data": "Ungültige Spenderdaten", - "line_item_invalid_planet_cash_account": "Ungültiges PlanetCash-Konto", - "line_item_invalid_project": "Ungültiges Projekt", - "line_item_missing_amount": "Fehlender Betrag", - "line_item_missing_currency": "Fehlende Währung", - "line_item_missing_quantity": "Fehlende Menge", - "line_item_project_not_allowing_donations": "Projekt erlaubt keine Spenden", - "line_item_quantity_prohibited": "Menge nicht erlaubt", - "generic_error": "Es ist ein Fehler aufgetreten. Bitte überprüfe deine Internetverbindung oder versuche es später noch einmal.", - "missing_profile": "Fehlendes Profil", - "some_error": "Etwas ist schief gelaufen.", - "planet_cash_payment_failure": "Zahlung fehlgeschlagen", - "planet_cash_insufficient_credit": "Unzureichender Kredit", - "planet_cash_invalid_project": "Ungültiges Projekt", - "active_account_exists": "Aktives PlanetCash-Konto existiert bereits", - "duplicate_account": "Konto existiert bereits", - "token_expired": "Der Token ist abgelaufen. Bitte erneut anmelden", - "project_not_available": "Projektdetails sind derzeit nicht verfügbar", - "topProject": "Top Projekt", - "viewReport": "Report anzeigen", - "reviewInfo": "Das Projekt wurde im Rahmen einer mehrtägigen Überprüfung vor Ort im <2>month geprüft und erfüllt unsere <5>Standards.", - "standardsLink": "https://www.plant-for-the-planet.org/de/standards/", - "project": "Projekt", - "top_project_standards_fulfilled": "Die Projektprüfung hat gezeigt, dass dieses Projekt mindestens 12 der 19 Top Projekt <2>Standards erfüllte.", - "disabledDonateButtonText": "Das Projekt nimmt derzeit keine Spenden an, da es entweder bereits vollständig finanziert ist, noch nicht geprüft wurde, noch nicht alle Projektstandards erfüllt oder die Plattform ausschließlich für seine Transparenzinstrumente nutzen möchte.", - "notDonatable": "Spenden nicht möglich", - "salesforceDisabledDonateButtonText": "Für das Projekt werden derzeit keine Spenden angenommen." -} \ No newline at end of file + "Common": { + "tree": "{count, plural, =0 {Bäume} =1 {Baum} other {Bäume}}", + "tree_one": "Baum", + "tree_other": "Bäume", + "m2": "m²", + "by": "Von {tpoName}", + "to_project_by_tpo": "An {{projectName}} von {{tpoName}}", + "for": "für", + "trees": "Bäume", + "planted": "gepflanzt", + "privacy": "Datenschutz", + "terms": "AGB", + "imprint": "Impressum", + "status": "Status", + "contact": "Kontakt", + "supportUs": "Unterstütze uns", + "leaders": "Spitzenreiter", + "leaderboard": "Bestenliste", + "me": "Ich", + "signIn": "Anmelden", + "home": "Start", + "donate_gift": "Spenden/Schenken", + "plant": "Pflanzen", + "donate": "Spenden", + "gift": "Schenken", + "continue": "Weiter", + "selectLanguage": "Sprache wählen", + "selectCountry": "Land auswählen", + "ok": "OK", + "cancel": "Abbrechen", + "delete": "Löschen", + "deleteAccount": "Konto löschen", + "thankYou": "Vielen Dank", + "privacyPolicyNotice": "Durch die Nutzung dieser Website akzeptierst Du unsere", + "privacyPolicy": "Datenschutzerklärung & Cookie-Richtlinie", + "about_pftp": "Über Plant-for-the-Planet", + "january": "Januar", + "february": "Februar", + "march": "März", + "april": "April", + "may": "Mai", + "june": "Juni", + "july": "Juli", + "august": "August", + "september": "September", + "october": "Oktober", + "november": "November", + "december": "Dezember", + "approx": "Ungefähr", + "view": "Ansehen", + "verifyEmailHeader": "Bitte bestätige Deine E-Mail.", + "verifyEmailText": "Um Dein Konto zu sichern, müssen wir Deine E-Mail verifizieren. Bitte überprüfe Deinen Posteingang oder Deinen Spam- bzw. Junk-Ordner auf eine Bestätigungs-E-Mail und fahre dann mit dem Login fort.", + "verifyEmailInfo": "Wenn Du keine E-Mail erhalten hast, versuche bitte erneut, Dich anzumelden, und wir senden Dir eine weitere E-Mail.", + "continueToLogin": "Weiter zum Login", + "supportsUNEP": "Unterstützt das UNEP", + "plantedBy": "Gepflanzt von", + "redeemPopup": "Baumgeschenk bekommen? Log dich ein, um den Code einzulösen.", + "login": "Anmeldung", + "shop": "Shop", + "downloads": "Downloads", + "team": "Team", + "jobs": "Jobs", + "blogs": "Blogs", + "faqs": "FAQs", + "annualReports": "Jahresberichte", + "skipIntroVideo": "Intro überspringen", + "mapInfo": "Kartenhinweise", + "aboutUs": "Über uns", + "alternativelyEditProfile": "Alternativ kannst du dein Profil als privat markieren, indem du Profil bearbeiten aufrufst.", + "deleteAccountConsent": "Indem ich auf \"Löschen\" klicke, fordere ich Plant-for-the-Planet auf, alle mit meinem Plant-for-the-Planet-Konto verbundenen Daten zu löschen. Die Spendendaten können bis zu acht Jahre aufbewahrt werden. Bäume, die ich registriert habe, werden nicht entfernt, werden aber anonymisiert und können nicht erneut beansprucht werden.", + "deleteIrreversible": "Ich verstehe, dass die Kontolöschung von {{email}} irreversibel ist.", + "goBack": "Zurückgehen", + "deleteAccountMessage": "Um mit dem Löschen fortzufahren, gib bitte `{{delete}}` ein", + "deleteAccountLabel": "Tippe: {{delete}}", + "edit": "Bearbeiten", + "howDoesThisWork": "Wie funktioniert das?", + "copiedToClipboard": "In die Zwischenablage kopiert!", + "close": "Schließen", + "logout": "Abmelden", + "document": "Plattform-Dokumentation (EN)", + "featured": "Empfohlen", + "treeMapper": "TreeMapper", + "overview": "Übersicht", + "childrenAndYouth": "Kinder und Jugendliche", + "trillionTrees": "Billionen Bäume", + "yucatan": "Yucatán Renaturierung", + "partners": "Partner", + "changeChocolate": "Die Gute Schokolade", + "stopTalkingStartPlanting": "Stop talking. Start planting.", + "underMaintenance": "In Wartung", + "forbidden": "Du bist nicht berechtigt, diese Seite zu sehen!", + "connectionError": "Der Server konnte nicht erreicht werden. Bitte überprüfe deine Internetverbindung.", + "validationFailed": "Prüfung fehlgeschlagen!", + "add": "Hinzufügen", + "modalTitle": "Beende alle Dauerspenden um fortzufahren", + "modalSubtitle": "Bitte beende zuerst deine Dauerspenden", + "deleteCondition": "Bevor du fortfährst, vergewissere dich, dass alle Dauerspenden beendet sind.", + "showSubscriptions": "Meine Dauerspenden anzeigen", + "notFound": "Ressource nicht gefunden", + "tooManyRequest": "Zu viele Anfragen. Bitte warten Sie und versuchen Sie es später erneut oder wenden Sie sich an den Systemadministrator, um Unterstützung zu erhalten.", + "unauthorized": "Nicht autorisiert", + "validationError": "Validierungsfehler", + "internalServerError": "Interner Serverfehler - Bitte versuche es später noch einmal!", + "serviceUnavailable": "Die App wird derzeit gewartet, bitte prüfe status.plant-for-the-planet.org für weitere Informationen", + "account_duplicate": "Konto existiert bereits", + "line_item_amount_deviation": "Betragsabweichung", + "line_item_amount_invalid": "Ungültiger Betrag", + "line_item_amount_prohibited": "Betrag nicht erlaubt", + "idempotency_key_missing": "Fehlender Idempotenzschlüssel in der Kopfzeile", + "line_item_invalid_donor_data": "Ungültige Spenderdaten", + "line_item_invalid_planet_cash_account": "Ungültiges PlanetCash-Konto", + "line_item_invalid_project": "Ungültiges Projekt", + "line_item_missing_amount": "Fehlender Betrag", + "line_item_missing_currency": "Fehlende Währung", + "line_item_missing_quantity": "Fehlende Menge", + "line_item_project_not_allowing_donations": "Projekt erlaubt keine Spenden", + "line_item_quantity_prohibited": "Menge nicht erlaubt", + "generic_error": "Es ist ein Fehler aufgetreten. Bitte überprüfe deine Internetverbindung oder versuche es später noch einmal.", + "missing_profile": "Fehlendes Profil", + "some_error": "Etwas ist schief gelaufen.", + "planet_cash_payment_failure": "Zahlung fehlgeschlagen", + "planet_cash_insufficient_credit": "Unzureichender Kredit", + "planet_cash_invalid_project": "Ungültiges Projekt", + "active_account_exists": "Aktives PlanetCash-Konto existiert bereits", + "duplicate_account": "Konto existiert bereits", + "token_expired": "Der Token ist abgelaufen. Bitte erneut anmelden", + "project_not_available": "Projektdetails sind derzeit nicht verfügbar", + "topProject": "Top Projekt", + "viewReport": "Report anzeigen", + "reviewInfo": "Das Projekt wurde im Rahmen einer mehrtägigen Überprüfung vor Ort im {reviewMonth} geprüft und erfüllt unsere Standards", + "standardsLink": "https://www.plant-for-the-planet.org/de/standards/", + "project": "Projekt", + "top_project_standards_fulfilled": "Die Projektprüfung hat gezeigt, dass dieses Projekt mindestens 12 der 19 Top Projekt Standards erfüllte.", + "disabledDonateButtonText": "Das Projekt nimmt derzeit keine Spenden an, da es entweder bereits vollständig finanziert ist, noch nicht geprüft wurde, noch nicht alle Projektstandards erfüllt oder die Plattform ausschließlich für seine Transparenzinstrumente nutzen möchte.", + "notDonatable": "Spenden nicht möglich", + "salesforceDisabledDonateButtonText": "Für das Projekt werden derzeit keine Spenden angenommen." + } +} diff --git a/public/static/locales/de/country.json b/public/static/locales/de/country.json index 4c76007804..d82a4ca3b3 100644 --- a/public/static/locales/de/country.json +++ b/public/static/locales/de/country.json @@ -1,262 +1,264 @@ { - "auto": "Automatische Auswahl", - "ac": "Ascension", - "af": "Afghanistan", - "ax": "Åland", - "al": "Albanien", - "dz": "Algerien", - "as": "Amerikanisch-Samoa", - "ad": "Andorra", - "ao": "Angola", - "ai": "Anguilla", - "aq": "Antarktis", - "ag": "Antigua und Barbuda", - "ar": "Argentinien", - "am": "Armenien", - "aw": "Aruba", - "au": "Australien", - "at": "Österreich", - "az": "Aserbaidschan", - "bs": "Bahamas", - "bh": "Bahrain", - "bd": "Bangladesch", - "bb": "Barbados", - "by": "Belarus", - "be": "Belgien", - "bz": "Belize", - "bj": "Benin", - "bm": "Bermuda", - "bt": "Bhutan", - "bo": "Bolivien", - "bq": "Bonaire, Saba, Sint Eustatius", - "ba": "Bosnien und Herzegowina", - "bw": "Botswana", - "bv": "Bouvetinsel", - "br": "Brasilien", - "io": "Britisches Territorium im Indischen Ozean", - "bn": "Brunei", - "bg": "Bulgarien", - "bf": "Burkina Faso", - "bi": "Burundi", - "cv": "Cabo Verde", - "kh": "Kambodscha", - "cm": "Kamerun", - "ca": "Kanada", - "ic": "Kanarische Inseln", - "ky": "Kaimaninseln", - "cf": "Zentral­afrikanische Republik", - "ea": "Ceuta & Melilla", - "td": "Tschad", - "cl": "Chile", - "cn": "China", - "cx": "Weihnachtsinsel", - "cc": "Kokosinseln (Keeling)", - "co": "Kolumbien", - "km": "Komoren", - "cg": "Kongo", - "cd": "DR Kongo", - "ck": "Cook-Inseln", - "cr": "Costa Rica", - "ci": "Elfenbeinküste", - "hr": "Kroatien", - "cu": "Kuba", - "cw": "Curaçao", - "cy": "Zypern", - "cz": "Tschechien", - "dk": "Dänemark", - "dg": "Diego Garcia", - "dj": "Dschibuti", - "dm": "Dominica", - "do": "Dominikanische Republik", - "tp": "Osttimor", - "ec": "Ecuador", - "eg": "Ägypten", - "sv": "El Salvador", - "gq": "Äquatorialguinea", - "er": "Eritrea", - "ee": "Estland", - "sz": "Eswatini", - "et": "Äthiopien", - "ez": "Eurozone", - "fk": "Falklandinseln (Malwinen)", - "fo": "Färöer", - "fj": "Fidschi", - "fi": "Finnland", - "fr": "Frankreich", - "gf": "Französisch-Guayana", - "pf": "Französisch-Polynesien", - "tf": "Französische Süd- und Antarktisgebiete", - "ga": "Gabun", - "gm": "Gambia", - "ge": "Georgien", - "de": "Deutschland", - "gh": "Ghana", - "gi": "Gibraltar", - "gr": "Griechenland", - "gl": "Grönland", - "gd": "Grenada", - "gp": "Guadeloupe", - "gu": "Guam", - "gt": "Guatemala", - "gg": "Guernsey", - "gn": "Guinea", - "gw": "Guinea-Bissau", - "gy": "Guyana", - "ht": "Haiti", - "hm": "Heard und McDonaldinseln", - "va": "Vatikanstadt", - "hn": "Honduras", - "hk": "Hongkong", - "hu": "Ungarn", - "is": "Island", - "in": "Indien", - "id": "Indonesien", - "ir": "Iran", - "iq": "Irak", - "ie": "Irland", - "im": "Isle of Man", - "il": "Israel", - "it": "Italien", - "jm": "Jamaika", - "jp": "Japan", - "je": "Jersey", - "jo": "Jordanien", - "kz": "Kasachstan", - "ke": "Kenia", - "ki": "Kiribati", - "xk": "Kosovo", - "kp": "Korea, Nord", - "kr": "Korea, Süd", - "kw": "Kuwait", - "kg": "Kirgisistan", - "la": "Laos", - "lv": "Lettland", - "lb": "Libanon", - "ls": "Lesotho", - "lr": "Liberia", - "ly": "Libyen", - "li": "Liechtenstein", - "lt": "Litauen", - "lu": "Luxemburg", - "mo": "Macao", - "mg": "Madagaskar", - "mw": "Malawi", - "my": "Malaysia", - "mv": "Malediven", - "ml": "Mali", - "mt": "Malta", - "mh": "Marshallinseln", - "mq": "Martinique", - "mr": "Mauretanien", - "mu": "Mauritius", - "yt": "Mayotte", - "mx": "Mexiko", - "fm": "Mikronesien", - "md": "Moldawien", - "mc": "Monaco", - "mn": "Mongolei", - "me": "Montenegro", - "ms": "Montserrat", - "ma": "Marokko", - "mz": "Mosambik", - "mm": "Myanmar", - "na": "Namibia", - "nr": "Nauru", - "np": "Nepal", - "nl": "Niederlande", - "an": "Niederländische Antillen", - "nc": "Neukaledonien", - "nz": "Neuseeland", - "ni": "Nicaragua", - "ne": "Niger", - "ng": "Nigeria", - "nu": "Niue", - "nf": "Norfolkinsel", - "mk": "Nordmazedonien", - "mp": "Nördliche Marianen", - "no": "Norwegen", - "om": "Oman", - "pk": "Pakistan", - "pw": "Palau", - "ps": "Palästina", - "pa": "Panama", - "pg": "Papua-Neuguinea", - "py": "Paraguay", - "pe": "Peru", - "ph": "Philippinen", - "pn": "Pitcairninseln", - "pl": "Polen", - "pt": "Portugal", - "pr": "Puerto Rico", - "qa": "Katar", - "re": "Réunion", - "ro": "Rumänien", - "ru": "Russische Föderation", - "rw": "Ruanda", - "bl": "Sankt Barthélemy", - "sh": "St. Helena, Ascension und Tristan da Cunha", - "kn": "St. Kitts und Nevis", - "lc": "St. Lucia", - "mf": "Saint Martin (französischer Teil)", - "pm": "St. Pierre und Miquelon", - "vc": "St. Vincent und die Grenadinen", - "ws": "Samoa", - "sm": "San Marino", - "st": "São Tomé und Príncipe", - "sa": "Saudi-Arabien", - "sn": "Senegal", - "rs": "Serbien", - "sc": "Seychellen", - "sl": "Sierra Leone", - "sg": "Singapur", - "sx": "Sint Maarten (niederländischer Teil)", - "sk": "Slowakei", - "si": "Slowenien", - "sb": "Salomonen", - "so": "Somalia", - "za": "Südafrika", - "gs": "Südgeorgien und die Südlichen Sandwichinseln", - "ss": "Südsudan", - "es": "Spanien", - "lk": "Sri Lanka", - "sd": "Sudan", - "sr": "Surinam", - "sj": "Spitzbergen und Jan Mayen", - "se": "Schweden", - "ch": "Schweiz", - "sy": "Syrien", - "tw": "Taiwan", - "tj": "Tadschikistan", - "tz": "Tansania", - "th": "Thailand", - "tl": "Timor-Leste", - "tg": "Togo", - "tk": "Tokelau", - "to": "Tonga", - "tt": "Trinidad und Tobago", - "ta": "Tristan da Cunha", - "tn": "Tunesien", - "tr": "Türkei", - "tm": "Turkmenistan", - "tc": "Turks- und Caicosinseln", - "tv": "Tuvalu", - "ug": "Uganda", - "ua": "Ukraine", - "ae": "Vereinigte Arabische Emirate", - "gb": "UK", - "un": "Vereinte Nationen", - "us": "USA", - "um": "United States Minor Outlying Islands", - "uy": "Uruguay", - "uz": "Usbekistan", - "vu": "Vanuatu", - "ve": "Venezuela", - "vn": "Vietnam", - "vg": "Jungferninseln (Britisch)", - "vi": "Jungferninseln (Vereinigte Staaten)", - "wf": "Wallis und Futuna", - "eh": "Westsahara", - "ye": "Jemen", - "zm": "Sambia", - "zw": "Simbabwe" -} \ No newline at end of file + "Country": { + "auto": "Automatische Auswahl", + "ac": "Ascension", + "af": "Afghanistan", + "ax": "Åland", + "al": "Albanien", + "dz": "Algerien", + "as": "Amerikanisch-Samoa", + "ad": "Andorra", + "ao": "Angola", + "ai": "Anguilla", + "aq": "Antarktis", + "ag": "Antigua und Barbuda", + "ar": "Argentinien", + "am": "Armenien", + "aw": "Aruba", + "au": "Australien", + "at": "Österreich", + "az": "Aserbaidschan", + "bs": "Bahamas", + "bh": "Bahrain", + "bd": "Bangladesch", + "bb": "Barbados", + "by": "Belarus", + "be": "Belgien", + "bz": "Belize", + "bj": "Benin", + "bm": "Bermuda", + "bt": "Bhutan", + "bo": "Bolivien", + "bq": "Bonaire, Saba, Sint Eustatius", + "ba": "Bosnien und Herzegowina", + "bw": "Botswana", + "bv": "Bouvetinsel", + "br": "Brasilien", + "io": "Britisches Territorium im Indischen Ozean", + "bn": "Brunei", + "bg": "Bulgarien", + "bf": "Burkina Faso", + "bi": "Burundi", + "cv": "Cabo Verde", + "kh": "Kambodscha", + "cm": "Kamerun", + "ca": "Kanada", + "ic": "Kanarische Inseln", + "ky": "Kaimaninseln", + "cf": "Zentral­afrikanische Republik", + "ea": "Ceuta & Melilla", + "td": "Tschad", + "cl": "Chile", + "cn": "China", + "cx": "Weihnachtsinsel", + "cc": "Kokosinseln (Keeling)", + "co": "Kolumbien", + "km": "Komoren", + "cg": "Kongo", + "cd": "DR Kongo", + "ck": "Cook-Inseln", + "cr": "Costa Rica", + "ci": "Elfenbeinküste", + "hr": "Kroatien", + "cu": "Kuba", + "cw": "Curaçao", + "cy": "Zypern", + "cz": "Tschechien", + "dk": "Dänemark", + "dg": "Diego Garcia", + "dj": "Dschibuti", + "dm": "Dominica", + "do": "Dominikanische Republik", + "tp": "Osttimor", + "ec": "Ecuador", + "eg": "Ägypten", + "sv": "El Salvador", + "gq": "Äquatorialguinea", + "er": "Eritrea", + "ee": "Estland", + "sz": "Eswatini", + "et": "Äthiopien", + "ez": "Eurozone", + "fk": "Falklandinseln (Malwinen)", + "fo": "Färöer", + "fj": "Fidschi", + "fi": "Finnland", + "fr": "Frankreich", + "gf": "Französisch-Guayana", + "pf": "Französisch-Polynesien", + "tf": "Französische Süd- und Antarktisgebiete", + "ga": "Gabun", + "gm": "Gambia", + "ge": "Georgien", + "de": "Deutschland", + "gh": "Ghana", + "gi": "Gibraltar", + "gr": "Griechenland", + "gl": "Grönland", + "gd": "Grenada", + "gp": "Guadeloupe", + "gu": "Guam", + "gt": "Guatemala", + "gg": "Guernsey", + "gn": "Guinea", + "gw": "Guinea-Bissau", + "gy": "Guyana", + "ht": "Haiti", + "hm": "Heard und McDonaldinseln", + "va": "Vatikanstadt", + "hn": "Honduras", + "hk": "Hongkong", + "hu": "Ungarn", + "is": "Island", + "in": "Indien", + "id": "Indonesien", + "ir": "Iran", + "iq": "Irak", + "ie": "Irland", + "im": "Isle of Man", + "il": "Israel", + "it": "Italien", + "jm": "Jamaika", + "jp": "Japan", + "je": "Jersey", + "jo": "Jordanien", + "kz": "Kasachstan", + "ke": "Kenia", + "ki": "Kiribati", + "xk": "Kosovo", + "kp": "Korea, Nord", + "kr": "Korea, Süd", + "kw": "Kuwait", + "kg": "Kirgisistan", + "la": "Laos", + "lv": "Lettland", + "lb": "Libanon", + "ls": "Lesotho", + "lr": "Liberia", + "ly": "Libyen", + "li": "Liechtenstein", + "lt": "Litauen", + "lu": "Luxemburg", + "mo": "Macao", + "mg": "Madagaskar", + "mw": "Malawi", + "my": "Malaysia", + "mv": "Malediven", + "ml": "Mali", + "mt": "Malta", + "mh": "Marshallinseln", + "mq": "Martinique", + "mr": "Mauretanien", + "mu": "Mauritius", + "yt": "Mayotte", + "mx": "Mexiko", + "fm": "Mikronesien", + "md": "Moldawien", + "mc": "Monaco", + "mn": "Mongolei", + "me": "Montenegro", + "ms": "Montserrat", + "ma": "Marokko", + "mz": "Mosambik", + "mm": "Myanmar", + "na": "Namibia", + "nr": "Nauru", + "np": "Nepal", + "nl": "Niederlande", + "an": "Niederländische Antillen", + "nc": "Neukaledonien", + "nz": "Neuseeland", + "ni": "Nicaragua", + "ne": "Niger", + "ng": "Nigeria", + "nu": "Niue", + "nf": "Norfolkinsel", + "mk": "Nordmazedonien", + "mp": "Nördliche Marianen", + "no": "Norwegen", + "om": "Oman", + "pk": "Pakistan", + "pw": "Palau", + "ps": "Palästina", + "pa": "Panama", + "pg": "Papua-Neuguinea", + "py": "Paraguay", + "pe": "Peru", + "ph": "Philippinen", + "pn": "Pitcairninseln", + "pl": "Polen", + "pt": "Portugal", + "pr": "Puerto Rico", + "qa": "Katar", + "re": "Réunion", + "ro": "Rumänien", + "ru": "Russische Föderation", + "rw": "Ruanda", + "bl": "Sankt Barthélemy", + "sh": "St. Helena, Ascension und Tristan da Cunha", + "kn": "St. Kitts und Nevis", + "lc": "St. Lucia", + "mf": "Saint Martin (französischer Teil)", + "pm": "St. Pierre und Miquelon", + "vc": "St. Vincent und die Grenadinen", + "ws": "Samoa", + "sm": "San Marino", + "st": "São Tomé und Príncipe", + "sa": "Saudi-Arabien", + "sn": "Senegal", + "rs": "Serbien", + "sc": "Seychellen", + "sl": "Sierra Leone", + "sg": "Singapur", + "sx": "Sint Maarten (niederländischer Teil)", + "sk": "Slowakei", + "si": "Slowenien", + "sb": "Salomonen", + "so": "Somalia", + "za": "Südafrika", + "gs": "Südgeorgien und die Südlichen Sandwichinseln", + "ss": "Südsudan", + "es": "Spanien", + "lk": "Sri Lanka", + "sd": "Sudan", + "sr": "Surinam", + "sj": "Spitzbergen und Jan Mayen", + "se": "Schweden", + "ch": "Schweiz", + "sy": "Syrien", + "tw": "Taiwan", + "tj": "Tadschikistan", + "tz": "Tansania", + "th": "Thailand", + "tl": "Timor-Leste", + "tg": "Togo", + "tk": "Tokelau", + "to": "Tonga", + "tt": "Trinidad und Tobago", + "ta": "Tristan da Cunha", + "tn": "Tunesien", + "tr": "Türkei", + "tm": "Turkmenistan", + "tc": "Turks- und Caicosinseln", + "tv": "Tuvalu", + "ug": "Uganda", + "ua": "Ukraine", + "ae": "Vereinigte Arabische Emirate", + "gb": "UK", + "un": "Vereinte Nationen", + "us": "USA", + "um": "United States Minor Outlying Islands", + "uy": "Uruguay", + "uz": "Usbekistan", + "vu": "Vanuatu", + "ve": "Venezuela", + "vn": "Vietnam", + "vg": "Jungferninseln (Britisch)", + "vi": "Jungferninseln (Vereinigte Staaten)", + "wf": "Wallis und Futuna", + "eh": "Westsahara", + "ye": "Jemen", + "zm": "Sambia", + "zw": "Simbabwe" + } +} diff --git a/public/static/locales/de/donate.json b/public/static/locales/de/donate.json index 0574b649cc..1241a3b688 100644 --- a/public/static/locales/de/donate.json +++ b/public/static/locales/de/donate.json @@ -1,118 +1,120 @@ { - "fortreeCountTrees": "für {{treeCount}} Baum", - "fortreeCountTrees_plural": "für {{treeCount}} Bäume", - "yourTreesPlantedByOnLocation": "Dein {{treeCount}} Baum wird von {{projectName}} in {{location}} gepflanzt.", - "yourTreesPlantedByOnLocation_plural": "Deine {{treeCount}} Bäume werden von {{projectName}} in {{location}} gepflanzt.", - "myTreesPlantedByOnLocation": "Mein {{treeCount}} Baum wird in {{location}} gepflanzt.", - "myTreesPlantedByOnLocation_plural": "Meine {{treeCount}} Bäume werden in {{location}} gepflanzt.", - "projects": "Projekte", - "topProjects": "Top Projekte", - "allCountProjects": "Alle {{projectCount}} Projekte", - "searchProjects": "Projekte suchen", - "viewProfile": "Profil anzeigen", - "contactDetails": "Kontaktdetails", - "readMore": "Weiterlesen", - "readLess": "Zeige weniger", - "treeDonation": "Baumspende", - "myDonationGiftToSomeone": "Meine Spende ist ein Geschenk an jemanden", - "taxDeductionNotYetAvailable": "Keine Spendenbescheinigung möglich für", - "taxDeductionNotAvailableForProject": "Spendenbescheinigung für dieses Projekt ist noch nicht möglich", - "youWillReceiveTaxDeduction": "Du erhältst eine Spendenbescheinigung für ", - "toProjectByOrganization": "An {{projectName}} von {{organizationName}}", - "firstName": "Vorname", - "lastName": "Nachname", - "email": "E-Mail", - "address": "Adresse", - "city": "Stadt", - "zipCode": "PLZ", - "zipCodeAlphaNumValidation": "PLZ ist ungültig", - "country": "Land", - "isACompanyDonation": "Dies ist eine Firmenspende", - "companyName": "Firmenname", - "giftRecipient": "Beschenkte", - "directGiftRecipient": "Diese Spende unterstützt", - "recipientName": "Name des Beschenkten", - "recipientNameRequired": "Name des Beschenkten ist erforderlich", - "removeRecipient": "Entfernen", - "giftMessage": "Nachricht zum Geschenk", - "firstNameRequired": "Vorname ist erforderlich", - "lastNameRequired": "Nachname ist erforderlich", - "emailRequired": "E-Mail ist erforderlich", - "addressRequired": "Adresse ist erforderlich", - "cityRequired": "Stadt ist erforderlich", - "countryRequired": "Land ist erforderlich", - "companyRequired": "Firmenname ist erforderlich", - "paymentDetails": "Zahlungsdaten", - "validationFailed": "Prüfung fehlgeschlagen", - "seedingYourDonation": "Deine Spende wird bearbeitet", - "pleaseDoNotCloseThisTab": "Bitte schließe diese Seite nicht!", - "perTree": "/ Baum", - "stopTalkingStartPlanting": "Stop talking. Start planting.", - "creditDebitCard": "Kreditkarte", - "cardNumber": "Kartennummer", - "expDate": "Gültigkeit (MM/JJ)", - "selectCurrency": "Dein Land auswählen", - "treeDonationWithPFP": "Baumspende mit Plant-for-the-Planet", - "unavailable": "nicht verfügbar", - "donationSuccessfulWith": "Deine {{totalAmount}} {{currency}} Spende wurde erfolgreich mit {{paymentTypeUsed}} bezahlt.", - "donationSuccessful": "Deine {{totalAmount}} {{currency}} Spende war erfolgreich.", - "giftSentMessage": "Wir haben eine E-Mail zum Geschenk an {{recipientName}} geschickt.", - "contributionMessage": "Vielleicht wirst du sie eines Tages besuchen? Bis dahin könntest du deinen Freunden von deinen Bäumen erzählen, falls sie auch ein paar eigene Bäume spenden möchten?", - "plantTreesAtURL": "Pflanze mit! {{url}}", - "copiedToClipboard": "Text in die Zwischenablage kopiert!", - "noProjectsFound": "Keine Projekte gefunden", - "inTimeOfTaxReturns": "rechtzeitig für deine Steuererklärung.", - "titleToShare": "Bäume pflanzen gegen die Klimakrise!", - "giftToName": "Geschenk an", - "thisDonationSupports": "Diese Spende unterstützt", - "plantTreesWith": "Bäume pflanzen mit", - "textToShare": "Schließe dich mit {{name}} und Tausenden anderen zusammen, um eine Billion Bäume zu pflanzen, um die Klimakrise zu bewältigen #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "thankyouHeaderText": "Wir sind auf dem Weg zu einer \n

Billionen Bäume

", - "shareTextTitle": "Stop Talking. Start Plant", - "textToShareLinkedin": "Schließe dich mit {{name}} und Tausenden anderen zusammen, um eine Billion Bäume zu pflanzen, um die Klimakrise zu bewältigen", - "textToShareForMe": "Pflanzt mit mir und Tausenden von anderen 1.000 Milliarden Bäume, um die Klimakrise zu bekämpfen", - "donationTokenInvalid": "Das bereitgestellte Spenden-Token ist ungültig.", - "giftTo": "Geschenk an", - "supporting": "Unterstützung von", - "selectProject": "Wähle ein Projekt aus", - "giftValidation": "Bitte Geschenkdetails eingeben", - "minDonate": "Mindestspendenbetrag ist", - "noPaymentMethodError": "Deine Zahlung konnte nicht verarbeitet werden, bitte versuche es erneut.", - "somethingWentWrong": "Etwas ist schief gelaufen, bitte versuche es bald noch einmal!", - "underMaintenance": "Die App wird gerade gewartet, bitte prüfe status.plant-for-the-planet.org für Details", - "waitingConfirmation": "Wir warten derzeit auf eine Bestätigung von deiner Bank und werden dir in Kürze eine E-Mail senden. Du kannst diese Seite auch gerne schließen.", - "yourDonationRef": "Deine Spendenreferenznummer lautet {{donationID}}", - "payWithGiroPay": "Bezahlen mit GiroPay", - "payWithSofort": "Bezahlen mit SOFORT", - "donationFailed": "Spende fehlgeschlagen", - "donationFailedMessage": "Beim Abschluss deiner Zahlung ist etwas schief gelaufen. Wenn du weiterhin Probleme hast, kontaktiere uns bitte unter support@plant-for-the-planet.org.", - "donationPending": "Abschließen deiner Spende", - "donationPendingMessage": "Wir warten derzeit auf die Bestätigung von deiner Bank. Dies kann einige Zeit dauern, daher kannst du diese Seite auch schließen. Wir werden dir den Beleg in Kürze per E-Mail zusenden.", - "sepaMessage": "Indem du deine IBAN angibst und diese Zahlung bestätigst, ermächtigst du Plant-for-the-Planet und Stripe, unseren Zahlungsdienstleister, Anweisungen an deine Bank zu senden, um dein Konto zu belasten. Du hast Anspruch auf eine Rückerstattung durch deine Bank gemäß ihrer allgemeinen Geschäftsbedingungen. Wenn du irgendwelche Probleme mit deiner Spende hast, sende uns bitte eine E-Mail an support@plant-for-the-planet.org.", - "donationRef": "Spendenreferenznummer", - "sepaDisclaimer": "SEPA-Zahlungen dauern 2-14 Werktage (normalerweise 3-5 Tage). Sobald sie eintrifft, senden wir dir eine Bestätigungs-E-Mail mit deinem Baumzertifikat und erhöhen den Baumzähler.", - "sofortDisclaimer": "SOFORT Zahlungen dauern 2-14 Werktage (in der Regel 2-3 Tage). Sobald sie eintrifft, senden wir dir eine Bestätigungs-E-Mail mit deinem Baumzertifikat und erhöhen den Baumzähler.", - "askPublishName": "Zeige meinen vollständigen Namen in der Plant-for-the-Planet App & Bestenliste.", - "nameAlreadyPublished": "Dein vollständiger Name wird in der Rangliste angezeigt, da dein Plant-for-the-Planet-Profil derzeit öffentlich ist.", - "orgNamePublishedTax": "Der Firmenname ist auf unserer Bestenliste und App sichtbar. Spendenbescheinigung werden auf denselben Namen ausgestellt.", - "orgNamePublished": "Der Firmenname ist auf unserem Leaderboard und in der App sichtbar.", - "aboutProject": "Über das Projekt", - "acceptingDonations": "Nimmt Spenden an", - "natural-regeneration": "Natürliche Regeneration", - "managed-regeneration": "Gesteuerte Regeneration", - "large-scale-planting": "Großflächige Renaturierung", - "agroforestry": "Agroforstwirtschaft", - "urban-planting": "Städtische Renaturierung", - "other-planting": "Renaturierung", - "mangroves": "Mangroven", - "purpose": "Zweck", - "projectPurpose": "Zweck des Projekts", - "type": "Typ", - "projectType": "Typ des Projektes", - "conservation": "Schutz", - "restoration": "Renaturierung", - "filters": "Filter", - "perM2": "pro m²", - "plantedTrees": "Gepflanzte Bäume", - "restored": "Wiederhergestellt" -} \ No newline at end of file + "Donate": { + "fortreeCountTrees": "für {{treeCount}} Baum", + "fortreeCountTrees_plural": "für {{treeCount}} Bäume", + "yourTreesPlantedByOnLocation": "Dein {{treeCount}} Baum wird von {{projectName}} in {{location}} gepflanzt.", + "yourTreesPlantedByOnLocation_plural": "Deine {{treeCount}} Bäume werden von {{projectName}} in {{location}} gepflanzt.", + "myTreesPlantedByOnLocation": "Mein {{treeCount}} Baum wird in {{location}} gepflanzt.", + "myTreesPlantedByOnLocation_plural": "Meine {{treeCount}} Bäume werden in {{location}} gepflanzt.", + "projects": "Projekte", + "topProjects": "Top Projekte", + "allCountProjects": "Alle {projectCount} Projekte", + "searchProjects": "Projekte suchen", + "viewProfile": "Profil anzeigen", + "contactDetails": "Kontaktdetails", + "readMore": "Weiterlesen", + "readLess": "Zeige weniger", + "treeDonation": "Baumspende", + "myDonationGiftToSomeone": "Meine Spende ist ein Geschenk an jemanden", + "taxDeductionNotYetAvailable": "Keine Spendenbescheinigung möglich für", + "taxDeductionNotAvailableForProject": "Spendenbescheinigung für dieses Projekt ist noch nicht möglich", + "youWillReceiveTaxDeduction": "Du erhältst eine Spendenbescheinigung für ", + "toProjectByOrganization": "An {{projectName}} von {{organizationName}}", + "firstName": "Vorname", + "lastName": "Nachname", + "email": "E-Mail", + "address": "Adresse", + "city": "Stadt", + "zipCode": "PLZ", + "zipCodeAlphaNumValidation": "PLZ ist ungültig", + "country": "Land", + "isACompanyDonation": "Dies ist eine Firmenspende", + "companyName": "Firmenname", + "giftRecipient": "Beschenkte", + "directGiftRecipient": "Diese Spende unterstützt", + "recipientName": "Name des Beschenkten", + "recipientNameRequired": "Name des Beschenkten ist erforderlich", + "removeRecipient": "Entfernen", + "giftMessage": "Nachricht zum Geschenk", + "firstNameRequired": "Vorname ist erforderlich", + "lastNameRequired": "Nachname ist erforderlich", + "emailRequired": "E-Mail ist erforderlich", + "addressRequired": "Adresse ist erforderlich", + "cityRequired": "Stadt ist erforderlich", + "countryRequired": "Land ist erforderlich", + "companyRequired": "Firmenname ist erforderlich", + "paymentDetails": "Zahlungsdaten", + "validationFailed": "Prüfung fehlgeschlagen", + "seedingYourDonation": "Deine Spende wird bearbeitet", + "pleaseDoNotCloseThisTab": "Bitte schließe diese Seite nicht!", + "perTree": "/ Baum", + "stopTalkingStartPlanting": "Stop talking. Start planting.", + "creditDebitCard": "Kreditkarte", + "cardNumber": "Kartennummer", + "expDate": "Gültigkeit (MM/JJ)", + "selectCurrency": "Dein Land auswählen", + "treeDonationWithPFP": "Baumspende mit Plant-for-the-Planet", + "unavailable": "nicht verfügbar", + "donationSuccessfulWith": "Deine {{totalAmount}} {{currency}} Spende wurde erfolgreich mit {{paymentTypeUsed}} bezahlt.", + "donationSuccessful": "Deine {{totalAmount}} {{currency}} Spende war erfolgreich.", + "giftSentMessage": "Wir haben eine E-Mail zum Geschenk an {{recipientName}} geschickt.", + "contributionMessage": "Vielleicht wirst du sie eines Tages besuchen? Bis dahin könntest du deinen Freunden von deinen Bäumen erzählen, falls sie auch ein paar eigene Bäume spenden möchten?", + "plantTreesAtURL": "Pflanze mit! {{url}}", + "copiedToClipboard": "Text in die Zwischenablage kopiert!", + "noProjectsFound": "Keine Projekte gefunden", + "inTimeOfTaxReturns": "rechtzeitig für deine Steuererklärung.", + "titleToShare": "Bäume pflanzen gegen die Klimakrise!", + "giftToName": "Geschenk an", + "thisDonationSupports": "Diese Spende unterstützt", + "plantTreesWith": "Bäume pflanzen mit", + "textToShare": "Schließe dich mit {{name}} und Tausenden anderen zusammen, um eine Billion Bäume zu pflanzen, um die Klimakrise zu bewältigen #StopTalkingStartPlanting #TrillionTrees @trilliontrees", + "thankyouHeaderText": "Wir sind auf dem Weg zu einer \n

Billionen Bäume

", + "shareTextTitle": "Stop Talking. Start Plant", + "textToShareLinkedin": "Schließe dich mit {{name}} und Tausenden anderen zusammen, um eine Billion Bäume zu pflanzen, um die Klimakrise zu bewältigen", + "textToShareForMe": "Pflanzt mit mir und Tausenden von anderen 1.000 Milliarden Bäume, um die Klimakrise zu bekämpfen", + "donationTokenInvalid": "Das bereitgestellte Spenden-Token ist ungültig.", + "giftTo": "Geschenk an", + "supporting": "Unterstützung von", + "selectProject": "Wähle ein Projekt aus", + "giftValidation": "Bitte Geschenkdetails eingeben", + "minDonate": "Mindestspendenbetrag ist", + "noPaymentMethodError": "Deine Zahlung konnte nicht verarbeitet werden, bitte versuche es erneut.", + "somethingWentWrong": "Etwas ist schief gelaufen, bitte versuche es bald noch einmal!", + "underMaintenance": "Die App wird gerade gewartet, bitte prüfe status.plant-for-the-planet.org für Details", + "waitingConfirmation": "Wir warten derzeit auf eine Bestätigung von deiner Bank und werden dir in Kürze eine E-Mail senden. Du kannst diese Seite auch gerne schließen.", + "yourDonationRef": "Deine Spendenreferenznummer lautet {{donationID}}", + "payWithGiroPay": "Bezahlen mit GiroPay", + "payWithSofort": "Bezahlen mit SOFORT", + "donationFailed": "Spende fehlgeschlagen", + "donationFailedMessage": "Beim Abschluss deiner Zahlung ist etwas schief gelaufen. Wenn du weiterhin Probleme hast, kontaktiere uns bitte unter support@plant-for-the-planet.org.", + "donationPending": "Abschließen deiner Spende", + "donationPendingMessage": "Wir warten derzeit auf die Bestätigung von deiner Bank. Dies kann einige Zeit dauern, daher kannst du diese Seite auch schließen. Wir werden dir den Beleg in Kürze per E-Mail zusenden.", + "sepaMessage": "Indem du deine IBAN angibst und diese Zahlung bestätigst, ermächtigst du Plant-for-the-Planet und Stripe, unseren Zahlungsdienstleister, Anweisungen an deine Bank zu senden, um dein Konto zu belasten. Du hast Anspruch auf eine Rückerstattung durch deine Bank gemäß ihrer allgemeinen Geschäftsbedingungen. Wenn du irgendwelche Probleme mit deiner Spende hast, sende uns bitte eine E-Mail an support@plant-for-the-planet.org.", + "donationRef": "Spendenreferenznummer", + "sepaDisclaimer": "SEPA-Zahlungen dauern 2-14 Werktage (normalerweise 3-5 Tage). Sobald sie eintrifft, senden wir dir eine Bestätigungs-E-Mail mit deinem Baumzertifikat und erhöhen den Baumzähler.", + "sofortDisclaimer": "SOFORT Zahlungen dauern 2-14 Werktage (in der Regel 2-3 Tage). Sobald sie eintrifft, senden wir dir eine Bestätigungs-E-Mail mit deinem Baumzertifikat und erhöhen den Baumzähler.", + "askPublishName": "Zeige meinen vollständigen Namen in der Plant-for-the-Planet App & Bestenliste.", + "nameAlreadyPublished": "Dein vollständiger Name wird in der Rangliste angezeigt, da dein Plant-for-the-Planet-Profil derzeit öffentlich ist.", + "orgNamePublishedTax": "Der Firmenname ist auf unserer Bestenliste und App sichtbar. Spendenbescheinigung werden auf denselben Namen ausgestellt.", + "orgNamePublished": "Der Firmenname ist auf unserem Leaderboard und in der App sichtbar.", + "aboutProject": "Über das Projekt", + "acceptingDonations": "Nimmt Spenden an", + "natural-regeneration": "Natürliche Regeneration", + "managed-regeneration": "Gesteuerte Regeneration", + "large-scale-planting": "Großflächige Renaturierung", + "agroforestry": "Agroforstwirtschaft", + "urban-planting": "Städtische Renaturierung", + "other-planting": "Renaturierung", + "mangroves": "Mangroven", + "purpose": "Zweck", + "projectPurpose": "Zweck des Projekts", + "type": "Typ", + "projectType": "Typ des Projektes", + "conservation": "Schutz", + "restoration": "Renaturierung", + "filters": "Filter", + "perM2": "pro m²", + "plantedTrees": "Gepflanzte Bäume", + "restored": "Wiederhergestellt" + } +} diff --git a/public/static/locales/de/manageProjects.json b/public/static/locales/de/manageProjects.json index b02a9edfd6..c315b2e0b1 100644 --- a/public/static/locales/de/manageProjects.json +++ b/public/static/locales/de/manageProjects.json @@ -1,211 +1,213 @@ { - "basicDetails": "Grundlegende Details", - "projectMedia": "Projektmedien", - "detailedAnalysis": "Detaillierte Analyse", - "projectSites": "Projektstandorte", - "projectSpending": "Projektausgaben", - "protectionStartedIN": "Schutzbeginn", - "review": "Rezension", - "name": "Projektname", - "nameValidation": "Bitte Projektname eingeben", - "slug": "Projekt-URL", - "slugValidation": "Bitte Projekt-URL eingeben", - "classification": "Projekttyp", - "classificationValidation": "Bitte Projekttyp auswählen", - "countTarget": "Ziel", - "countTargetValidation": "Bitte Ziel eingeben", - "countTargetValidation2": "Ziel sollte größer als 1 sein", - "conservationImpacts": "Naturschutz-Auswirkungen", - "website": "Website", - "websiteValidationRequired": "Bitte URL der Website eingeben", - "websiteValidationInvalid": "Ungültige Website-URL", - "aboutProject": "Über das Projekt", - "aboutProjectValidation": "Bitte das Projekt beschreiben", - "receiveDonations": "Spenden empfangen", - "receiveDonationsInfo": "Bitte aktiviere das Projekt, sobald es vollständig ist. Plant-for-the-Planet wird es dann überprüfen und Dich darüber informieren, ob Du für eine Spende über diese Plattform in Frage kommst. Dies kann einige Wochen dauern.", - "unitCost": "Kosten pro Einheit (in EUR)", - "unitCostRequired": "Bitte gebe die Kosten pro Einheit ein", - "invalidUnitCost": "Die Kosten pro Einheit sollten mehr als 0€ und weniger als 100€ betragen.", - "exit": "Zurück zu Projekten", - "projectLocation": "Projektstandort", - "visitorAssistanceLabel": "Ich sorge für Unterkunft, Zugang zum Standort und lokalen Transport, falls ein Gutachter von Plant-for-the-Planet geschickt wird.", - "publishProject": "Projekt veröffentlichen", - "saveAndContinue": "Speichern & Weiter", - "skip": "Überspringen", - "youtubeURL": "Youtube-Video-Link", - "youtubeURLValidation": "Ungültiger Youtube-Video-Link", - "addCaption": "Bildunterschrift hinzufügen", - "yearOfAbandonment": "Ungefähres Jahr der Flächenaufgabe", - "labelRestorationStarted": "Beginn Renaturierung", - "plantingDensity": "Pflanzdichte", - "maxPlantingDensity": "Maximale Bepflanzungsdichte", - "employeeCount": "Mitarbeiterzahl", - "endangeredSpeciesValidation": "Keine gültige Eingabe", - "endangeredSpecies": "Gefährdete Arten", - "mainChallenge": "Herausforderung", - "whyThisSite": "Warum dieser Standort?", - "siteOwner": "Flächeneigentümer", - "ownerName": "Name des Eigentümers", - "acquisitionDate": "Datum des Erwerbs", - "yearOfDegradation": "Jahr der Flächendegradierung", - "causeOfDegradation": "Grund der Flächendegradierung", - "longTermPlan": "Langfristiger Plan für den Standort", - "isCertified": "Dieses Projekt wurde zertifiziert", - "certifierName": "Name des Zertifizierers", - "siteName": "Name des Standorts", - "spendingYear": "Jahr", - "spendingAmount": "Jährliche Ausgaben (in EUR)", - "resetMessage": "Bitte fülle zuerst die grundlegende Details aus", - "uploadPhotos": "Fotos hochladen", - "dragIn": "oder ziehe sie hinein", - "backToBasic": "Zurück zu Grundlegenden Details", - "projectNotFound": "Projekt nicht gefunden", - "siteOwnerPrivate": "Privat", - "siteOwnerPublic": "Öffentliches Eigentum", - "siteOwnerSmallHolding": "Kleinfarm", - "siteOwnerCommunal": "Kommunales Land", - "siteOwnerOwned": "Eigentumsland", - "siteOwnerOther": "Andere", - "yearAbandonedInfo": "Wann war der letzte bedeutende menschliche Eingriff am Standort? Einschließlich Holzeinschlag, Landwirtschaft, Weidewirtschaft, Brandrodung.", - "treePerHa": "Bäume pro ha", - "employeesCountInfo": "Entspricht einer 40-Stunden-Woche. D.h. zwei Halbzeitbeschäftigte zählen als einer.", - "labelRestorationSeasons": "Renaturierungszeiten", - "labelMainInterventions": "Hauptinterventionen", - "missingInterventionsError": "Bitte wählen Sie mindestens eine Maßnahme aus", - "timePeriod": "Zeitraum", - "max300Chars": "Maximal 300 Zeichen erlaubt", - "longTermPlanInfo": "Welche Massnahmen gibt es, um den Wald langfristig zu projizieren? Wie wird dies finanziert? Welche Ressourcen werden dem Standort entnommen?", - "backToMedia": "Zurück zu Projektmedien", - "siteStatusPlanting": "Bepflanzung", - "siteStatusPlanted": "Gepflanzt", - "siteStatusBarren": "Kahl", - "siteStatusReforestation": "Wiederaufforstung", - "siteStatusNotYetprotected": "Noch nicht geschützt", - "siteStatusPartiallyprotected": "Teilweise geschützt", - "siteStatusFullyprotected": "Vollständig geschützt", - "siteStatus": "Standort Status", - "selectProjectStatus": "Bitte Status auswählen", - "saveAndAddSite": "Speichern & weiteren Standort hinzufügen", - "addSite": "Weiteren Standort hinzufügen", - "backToAnalysis": "Zurück zur detaillierten Analyse", - "spendingYearValidation": "Bitte Ausgabenjahr hinzufügen", - "spendingAmountValidation": "Bitte gib den ausgegebenen Betrag ein", - "uploadReport": "Bericht hochladen und speichern", - "dragInPdf": "oder ziehe eine PDF-Datei hinein", - "addAnotherYear": "Weiteres Jahr hinzufügen", - "backToSites": "Zurück zu den Projektstandorten", - "certifiedBy": "Zertifiziert von", - "certificationDateValidation": "Bitte Datum der Projektzertifizierung hinzufügen", - "uploadCertificate": "Projektzertifizierung hochladen", - "addCertificate": "Eine weitere Projektzertifizierung hinzufügen", - "dropGeoJson": "Füge .geojson oder .kml hinzu", - "projectUnderReview": "Dein Projekt wird gerade überprüft, bitte warte.", - "projectForReview": "Du kannst das Projekt nun zur Prüfung einreichen.", - "backToSpending": "Zurück zu Projektausgaben", - "pendingReview": "Ausstehende Überprüfung", - "submitForReview": "Zur Überprüfung einreichen", - "addProject": "Projekt hinzufügen", - "addNewProject": "Neues Projekt hinzufügen", - "conservationProject": "Naturschutzprojekt", - "abandonment": "Flächenaufgabe", - "survivalRate": "Überlebensrate", - "survivalRateInfo": "Prozentualer Anteil der Bäume, die das erste Jahr nach ihrer Pflanzung überleben", - "employees": "Mitarbeiter*innen", - "siteOwnership": "Flächeneigentum", - "longTermProtection": "Langfristiger Schutz", - "externalCertifications": "Externe Zertifizierungen", - "projectSpendingFinancial": "Jährliche Projektausgaben", - "issueDate": "Ausstellungsdatum", - "acquisitionYear": "Jahr des Erwerbs", - "largeScalePlanting": "Großflächige Pflanzungen", - "agroforestry": "Agroforstwirtschaft", - "naturalRegeneration": "Natürliche Regeneration", - "managedRegeneration": "Manuelle Regeneration", - "urbanPlanting": "Städtische Bepflanzung", - "otherPlanting": "Andere Pflanzung", - "projectType": "Projekttyp", - "protectionSeasons": "Schutzzeiten", - "polygonRequired": "Polygon ist erforderlich", - "fileSizeLimit": "Datei ist größer als 10 MB", - "fileImageOnly": "Dateityp muss Bild sein", - "filePDFOnly": "Dateityp muss PDF sein", - "acceptedReview": "Änderungen an deinem Projekt sind online", - "deniedReview": "Deine Überprüfung führte zu einer Ablehnung", - "saveSite": "Standort speichern", - "latitude": "Breitengrad", - "longitude": "Längengrad", - "latitudeRequired": "Breitengrad ist erforderlich", - "longitudeRequired": "Längengrad ist erforderlich", - "manageProject": "Projekte verwalten", - "descriptionForManageProjects": "Präsentiere deine Wiederaufforstungen zur Überwachung und um Spenden zu erhalten.", - "manageProjects": "Projekte verwalten", - "addConservationProjects": "Naturschutzprojekt hinzufügen", - "areaProtected": "Geschützte Fläche (in ha)", - "areaProtectedInfo": "Um Dezimalstellen einzugeben, trenne diese bitte durch ein \" . \"", - "ecosystem": "Ökosystem", - "protectionStartedIn": "Schutzbeginn", - "actions": "Aktionen", - "activitySeasons": "Jahreszeiten mit Aktivität", - "addAnotherSpecies": "andere Arten hinzufügen", - "add": "Hinzufügen", - "forestProtectionType": "Waldschutz Art/Maßnahmen", - "ecologicalBenefits": "Ökologische Vorteile", - "socialBenefits": "Sozialleistungen", - "coBenefits": "Nebeneffekte", - "benefits": "Vorteile", - "tropicalMoistForest": "Tropischer Feuchtwald", - "dry": "Trocken", - "ecosystemType": "Bitte wähle ein Ökosystemtyp", - "tropicalDryForests": "Tropische Trockenwälder", - "tropicalConiferousForests": "Tropische Nadelholzwälder", - "tropicalGrasslandsForests": "Tropisches Grasland Wälder", - "temperateBroadleafForests": "Gemäßigte Laubwälder", - "temperate-coniferous-forests": "Gemäßigte Nadelwälder", - "temperateGrasslandsForests": "Gemäßigtes Grasland Wälder", - "mediterraneanForests": "Mediterrane Wälder", - "mangroves": "Mangroven", - "deserts": "Wüsten", - "floodedGrasslands": "Überschwemmtes Grünland", - "montaneGrasslands": "Montanes Grasland", - "borealForests": "Boreale Wälder", - "tundra": "Tundra", - "temperateConiferousForests": "Gemäßigte Nadelwälder", - "unitTypeRequired": "Wähle bitte eine Einheit aus", - "unitType": "Einheit", - "unitTypes": { - "tree": "Baum", - "m2": "m²" - }, - "tenure": "Festanstellung", - "rent": "Miete", - "ownershipType": "Eigentumsverhältnis", - "landOwnershipType": "Art des Landbesitzes", - "restorationProject": "Renaturierungsprojekt", - "addProjetDescription": "Du bist nur wenige Schritte davon entfernt, deine Arbeit auf der Plattform Plant-for-the-planet zu präsentieren. ", - "englishOnly": "Bitte erstelle deine Projekte nur auf Englisch.", - "important": "WICHTIG: ", - "addProjetContact": "Wenn du Hilfe benötigst, kontaktiere uns unter ", - "supportLink": "support@plant-for-the-planet.org", - "wrongCoordinates": "Falsche Koordinaten", - "actionInfo": "Die Maßnahmen, die deine Organisation zur Erhaltung des Ökosystems ergreift.", - "mainChallengeInfo": "Die größte Herausforderung bei diesem Projekt.", - "motivationInfo": "Die Motivation für den Schutz dieses speziellen Ökosystems.", - "hectar": "hektar", - "validation": "{{fieldName}} ist ungültig", - "date": "Datum", - "plantingDensityValidation": "Bitte gibt die Dichte der Pflanzung ein", - "maxPlantingDensityValidation": "bitte maximale Bepflanzungsdichte eingeben", - "onlyEnglish": "Bitte erstelle/bearbeite Projekte nur auf Englisch. Übersetzungen von Projekten werden automatisch von Plant-for-the-Planet verwaltet.", - "since": "seit", - "Since": "Seit", - "and": "und", - "errorForMaxPlantingDensity": "Dieser Wert sollte größer sein als die Bepflanzungsdichte", - "managePayoutsButton": "Auszahlungen verwalten", - "siteNameValidation": "Bitte gib einen Site-Namen ein.", - "reviewNote": "Wichtiger Hinweis: Plant-for-the-Planet wird Ihre Daten überprüfen und validieren. Um mit dem Onboarding- und Verifizierungsprozess fortzufahren und Ihr Projekt für Spenden zu genehmigen, müssen mehrere Dokumente vorgelegt werden:", - "legalAccreditation": "Rechtliche Akkreditierung (Registrierungsbescheinigung/Registrierungsnummer), die den Status der Gemeinnützigkeit Ihrer Organisation belegt - nicht älter als 2 Jahre!", - "taxExemption": "Steuerbefreiungsdokumente (falls in Ihrem Land zutreffend)", - "annualReport": "Letzter Jahresbericht", - "financialReport": "Letzter geprüfter Finanzbericht", - "PlantingReport": "Projekt Fortschritt Bericht" -} \ No newline at end of file + "ManageProjects": { + "basicDetails": "Grundlegende Details", + "projectMedia": "Projektmedien", + "detailedAnalysis": "Detaillierte Analyse", + "projectSites": "Projektstandorte", + "projectSpending": "Projektausgaben", + "protectionStartedIN": "Schutzbeginn", + "review": "Rezension", + "name": "Projektname", + "nameValidation": "Bitte Projektname eingeben", + "slug": "Projekt-URL", + "slugValidation": "Bitte Projekt-URL eingeben", + "classification": "Projekttyp", + "classificationValidation": "Bitte Projekttyp auswählen", + "countTarget": "Ziel", + "countTargetValidation": "Bitte Ziel eingeben", + "countTargetValidation2": "Ziel sollte größer als 1 sein", + "conservationImpacts": "Naturschutz-Auswirkungen", + "website": "Website", + "websiteValidationRequired": "Bitte URL der Website eingeben", + "websiteValidationInvalid": "Ungültige Website-URL", + "aboutProject": "Über das Projekt", + "aboutProjectValidation": "Bitte das Projekt beschreiben", + "receiveDonations": "Spenden empfangen", + "receiveDonationsInfo": "Bitte aktiviere das Projekt, sobald es vollständig ist. Plant-for-the-Planet wird es dann überprüfen und Dich darüber informieren, ob Du für eine Spende über diese Plattform in Frage kommst. Dies kann einige Wochen dauern.", + "unitCost": "Kosten pro Einheit (in EUR)", + "unitCostRequired": "Bitte gebe die Kosten pro Einheit ein", + "invalidUnitCost": "Die Kosten pro Einheit sollten mehr als 0€ und weniger als 100€ betragen.", + "exit": "Zurück zu Projekten", + "projectLocation": "Projektstandort", + "visitorAssistanceLabel": "Ich sorge für Unterkunft, Zugang zum Standort und lokalen Transport, falls ein Gutachter von Plant-for-the-Planet geschickt wird.", + "publishProject": "Projekt veröffentlichen", + "saveAndContinue": "Speichern & Weiter", + "skip": "Überspringen", + "youtubeURL": "Youtube-Video-Link", + "youtubeURLValidation": "Ungültiger Youtube-Video-Link", + "addCaption": "Bildunterschrift hinzufügen", + "yearOfAbandonment": "Ungefähres Jahr der Flächenaufgabe", + "labelRestorationStarted": "Beginn Renaturierung", + "plantingDensity": "Pflanzdichte", + "maxPlantingDensity": "Maximale Bepflanzungsdichte", + "employeeCount": "Mitarbeiterzahl", + "endangeredSpeciesValidation": "Keine gültige Eingabe", + "endangeredSpecies": "Gefährdete Arten", + "mainChallenge": "Herausforderung", + "whyThisSite": "Warum dieser Standort?", + "siteOwner": "Flächeneigentümer", + "ownerName": "Name des Eigentümers", + "acquisitionDate": "Datum des Erwerbs", + "yearOfDegradation": "Jahr der Flächendegradierung", + "causeOfDegradation": "Grund der Flächendegradierung", + "longTermPlan": "Langfristiger Plan für den Standort", + "isCertified": "Dieses Projekt wurde zertifiziert", + "certifierName": "Name des Zertifizierers", + "siteName": "Name des Standorts", + "spendingYear": "Jahr", + "spendingAmount": "Jährliche Ausgaben (in EUR)", + "resetMessage": "Bitte fülle zuerst die grundlegende Details aus", + "uploadPhotos": "Fotos hochladen", + "dragIn": "oder ziehe sie hinein", + "backToBasic": "Zurück zu Grundlegenden Details", + "projectNotFound": "Projekt nicht gefunden", + "siteOwnerPrivate": "Privat", + "siteOwnerPublic": "Öffentliches Eigentum", + "siteOwnerSmallHolding": "Kleinfarm", + "siteOwnerCommunal": "Kommunales Land", + "siteOwnerOwned": "Eigentumsland", + "siteOwnerOther": "Andere", + "yearAbandonedInfo": "Wann war der letzte bedeutende menschliche Eingriff am Standort? Einschließlich Holzeinschlag, Landwirtschaft, Weidewirtschaft, Brandrodung.", + "treePerHa": "Bäume pro ha", + "employeesCountInfo": "Entspricht einer 40-Stunden-Woche. D.h. zwei Halbzeitbeschäftigte zählen als einer.", + "labelRestorationSeasons": "Renaturierungszeiten", + "labelMainInterventions": "Hauptinterventionen", + "missingInterventionsError": "Bitte wählen Sie mindestens eine Maßnahme aus", + "timePeriod": "Zeitraum", + "max300Chars": "Maximal 300 Zeichen erlaubt", + "longTermPlanInfo": "Welche Massnahmen gibt es, um den Wald langfristig zu projizieren? Wie wird dies finanziert? Welche Ressourcen werden dem Standort entnommen?", + "backToMedia": "Zurück zu Projektmedien", + "siteStatusPlanting": "Bepflanzung", + "siteStatusPlanted": "Gepflanzt", + "siteStatusBarren": "Kahl", + "siteStatusReforestation": "Wiederaufforstung", + "siteStatusNotYetprotected": "Noch nicht geschützt", + "siteStatusPartiallyprotected": "Teilweise geschützt", + "siteStatusFullyprotected": "Vollständig geschützt", + "siteStatus": "Standort Status", + "selectProjectStatus": "Bitte Status auswählen", + "saveAndAddSite": "Speichern & weiteren Standort hinzufügen", + "addSite": "Weiteren Standort hinzufügen", + "backToAnalysis": "Zurück zur detaillierten Analyse", + "spendingYearValidation": "Bitte Ausgabenjahr hinzufügen", + "spendingAmountValidation": "Bitte gib den ausgegebenen Betrag ein", + "uploadReport": "Bericht hochladen und speichern", + "dragInPdf": "oder ziehe eine PDF-Datei hinein", + "addAnotherYear": "Weiteres Jahr hinzufügen", + "backToSites": "Zurück zu den Projektstandorten", + "certifiedBy": "Zertifiziert von", + "certificationDateValidation": "Bitte Datum der Projektzertifizierung hinzufügen", + "uploadCertificate": "Projektzertifizierung hochladen", + "addCertificate": "Eine weitere Projektzertifizierung hinzufügen", + "dropGeoJson": "Füge .geojson oder .kml hinzu", + "projectUnderReview": "Dein Projekt wird gerade überprüft, bitte warte.", + "projectForReview": "Du kannst das Projekt nun zur Prüfung einreichen.", + "backToSpending": "Zurück zu Projektausgaben", + "pendingReview": "Ausstehende Überprüfung", + "submitForReview": "Zur Überprüfung einreichen", + "addProject": "Projekt hinzufügen", + "addNewProject": "Neues Projekt hinzufügen", + "conservationProject": "Naturschutzprojekt", + "abandonment": "Flächenaufgabe", + "survivalRate": "Überlebensrate", + "survivalRateInfo": "Prozentualer Anteil der Bäume, die das erste Jahr nach ihrer Pflanzung überleben", + "employees": "Mitarbeiter*innen", + "siteOwnership": "Flächeneigentum", + "longTermProtection": "Langfristiger Schutz", + "externalCertifications": "Externe Zertifizierungen", + "projectSpendingFinancial": "Jährliche Projektausgaben", + "issueDate": "Ausstellungsdatum", + "acquisitionYear": "Jahr des Erwerbs", + "largeScalePlanting": "Großflächige Pflanzungen", + "agroforestry": "Agroforstwirtschaft", + "naturalRegeneration": "Natürliche Regeneration", + "managedRegeneration": "Manuelle Regeneration", + "urbanPlanting": "Städtische Bepflanzung", + "otherPlanting": "Andere Pflanzung", + "projectType": "Projekttyp", + "protectionSeasons": "Schutzzeiten", + "polygonRequired": "Polygon ist erforderlich", + "fileSizeLimit": "Datei ist größer als 10 MB", + "fileImageOnly": "Dateityp muss Bild sein", + "filePDFOnly": "Dateityp muss PDF sein", + "acceptedReview": "Änderungen an deinem Projekt sind online", + "deniedReview": "Deine Überprüfung führte zu einer Ablehnung", + "saveSite": "Standort speichern", + "latitude": "Breitengrad", + "longitude": "Längengrad", + "latitudeRequired": "Breitengrad ist erforderlich", + "longitudeRequired": "Längengrad ist erforderlich", + "manageProject": "Projekte verwalten", + "descriptionForManageProjects": "Präsentiere deine Wiederaufforstungen zur Überwachung und um Spenden zu erhalten.", + "manageProjects": "Projekte verwalten", + "addConservationProjects": "Naturschutzprojekt hinzufügen", + "areaProtected": "Geschützte Fläche (in ha)", + "areaProtectedInfo": "Um Dezimalstellen einzugeben, trenne diese bitte durch ein \" . \"", + "ecosystem": "Ökosystem", + "protectionStartedIn": "Schutzbeginn", + "actions": "Aktionen", + "activitySeasons": "Jahreszeiten mit Aktivität", + "addAnotherSpecies": "andere Arten hinzufügen", + "add": "Hinzufügen", + "forestProtectionType": "Waldschutz Art/Maßnahmen", + "ecologicalBenefits": "Ökologische Vorteile", + "socialBenefits": "Sozialleistungen", + "coBenefits": "Nebeneffekte", + "benefits": "Vorteile", + "tropicalMoistForest": "Tropischer Feuchtwald", + "dry": "Trocken", + "ecosystemType": "Bitte wähle ein Ökosystemtyp", + "tropicalDryForests": "Tropische Trockenwälder", + "tropicalConiferousForests": "Tropische Nadelholzwälder", + "tropicalGrasslandsForests": "Tropisches Grasland Wälder", + "temperateBroadleafForests": "Gemäßigte Laubwälder", + "temperate-coniferous-forests": "Gemäßigte Nadelwälder", + "temperateGrasslandsForests": "Gemäßigtes Grasland Wälder", + "mediterraneanForests": "Mediterrane Wälder", + "mangroves": "Mangroven", + "deserts": "Wüsten", + "floodedGrasslands": "Überschwemmtes Grünland", + "montaneGrasslands": "Montanes Grasland", + "borealForests": "Boreale Wälder", + "tundra": "Tundra", + "temperateConiferousForests": "Gemäßigte Nadelwälder", + "unitTypeRequired": "Wähle bitte eine Einheit aus", + "unitType": "Einheit", + "unitTypes": { + "tree": "Baum", + "m2": "m²" + }, + "tenure": "Festanstellung", + "rent": "Miete", + "ownershipType": "Eigentumsverhältnis", + "landOwnershipType": "Art des Landbesitzes", + "restorationProject": "Renaturierungsprojekt", + "addProjetDescription": "Du bist nur wenige Schritte davon entfernt, deine Arbeit auf der Plattform Plant-for-the-planet zu präsentieren. ", + "englishOnly": "Bitte erstelle deine Projekte nur auf Englisch.", + "important": "WICHTIG: ", + "addProjetContact": "Wenn du Hilfe benötigst, kontaktiere uns unter ", + "supportLink": "support@plant-for-the-planet.org", + "wrongCoordinates": "Falsche Koordinaten", + "actionInfo": "Die Maßnahmen, die deine Organisation zur Erhaltung des Ökosystems ergreift.", + "mainChallengeInfo": "Die größte Herausforderung bei diesem Projekt.", + "motivationInfo": "Die Motivation für den Schutz dieses speziellen Ökosystems.", + "hectar": "hektar", + "validation": "{{fieldName}} ist ungültig", + "date": "Datum", + "plantingDensityValidation": "Bitte gibt die Dichte der Pflanzung ein", + "maxPlantingDensityValidation": "bitte maximale Bepflanzungsdichte eingeben", + "onlyEnglish": "Bitte erstelle/bearbeite Projekte nur auf Englisch. Übersetzungen von Projekten werden automatisch von Plant-for-the-Planet verwaltet.", + "since": "seit", + "Since": "Seit", + "and": "und", + "errorForMaxPlantingDensity": "Dieser Wert sollte größer sein als die Bepflanzungsdichte", + "managePayoutsButton": "Auszahlungen verwalten", + "siteNameValidation": "Bitte gib einen Site-Namen ein.", + "reviewNote": "Wichtiger Hinweis: Plant-for-the-Planet wird Ihre Daten überprüfen und validieren. Um mit dem Onboarding- und Verifizierungsprozess fortzufahren und Ihr Projekt für Spenden zu genehmigen, müssen mehrere Dokumente vorgelegt werden:", + "legalAccreditation": "Rechtliche Akkreditierung (Registrierungsbescheinigung/Registrierungsnummer), die den Status der Gemeinnützigkeit Ihrer Organisation belegt - nicht älter als 2 Jahre!", + "taxExemption": "Steuerbefreiungsdokumente (falls in Ihrem Land zutreffend)", + "annualReport": "Letzter Jahresbericht", + "financialReport": "Letzter geprüfter Finanzbericht", + "PlantingReport": "Projekt Fortschritt Bericht" + } +} diff --git a/public/static/locales/de/maps.json b/public/static/locales/de/maps.json index d009653cdb..dc9139980f 100644 --- a/public/static/locales/de/maps.json +++ b/public/static/locales/de/maps.json @@ -1,50 +1,52 @@ { - "explore": "Erforsche", - "forests": "Aktuelle Wälder", - "restoration": "Aufforstungspotenzial", - "deforestation": "Entwaldung", - "planted": "Gepflanzt", - "projects": "Projekte", - "3trilliontrees": "Die Welt hat heute etwa 3000 Milliarden Bäume (\"Wälder\"). Und Platz für bis zu 1000 Milliarde mehr (\"Aufforstungspotenzial\").", - "high": "Hoch", - "low": "Niedrig", - "forestInfo": "Derzeit gibt es weltweit 3040 Milliarden Bäume. Es gab 6000 Milliarde Bäume, bevor der Mensch vor etwa 11.000 Jahren begann Wälder abzuholzen.", - "restorationInfo": " Eine halbe Milliarde Hektar eignen sich für die großflächige Wiederherstellung von geschlossenen Wäldern. Weitere anderthalb Milliarden Hektar eignen sich am besten für die Mosaikrestaurierung, bei der Wälder mit anderen Landnutzungen wie Agroforstwirtschaft, kleinbäuerlicher Landwirtschaft und Siedlungen kombiniert werden.", - "location": "Ort", - "timeTravel": "Zeitreise", - "vegetationChange": "Vegetationsänderung", - "beta": "BETA", - "baseLayer": "Basislayer & Vektorkarten", - "satelliteImagery": "Satellitenbilder", - "fieldData": "Felddaten", - "trees": "Bäume", - "ha": "ha", - "plantingDate": "Datum der Pflanzung ", - "plantingDensity": "Dichte der Pflanzung", - "speciesPlanted": "Gepflanzte Arten", - "sampleTrees": "Beispielbäume", - "meterHigh": "m hoch", - "cmWide": "cm breit", - "treesPerHa": "Bäume pro ha", - "sampleTree": "Beispielbaum", - "scientificName": "Wissenschaftlicher Name", - "measurements": "Messwerte", - "treeTag": "Baum-Tag", - "1Tree": "1 Baum", - "plot": "Parzelle", - "tag": "Tag", - "plantingDensityInfo": "Im Falle einer Anreicherung kann die Pflanzdichte geringer sein.", - "plantationDensityFormula": "Pflanzdichte = Anzahl der Bäume / Bepflanzungsfläche", - "unknown": "Unbekannt", - "showWholeArea": "Gesamten Fläche anzeigen", - "daysAgo": "vor {{days}} Tagen", - "today": "Heute", - "yesterday": "Gestern", - "clickForDetails": "Klicke für Details", - "treeMapper": "TreeMapper", - "showProjectList": "Projektliste anzeigen", - "showProjectDetails": "Projektdetails anzeigen", - "hideProjectList": "Projektliste ausblenden", - "hideProjectDetails": "Projektdetails ausblenden", - "countries": "Länder" -} \ No newline at end of file + "Maps": { + "explore": "Erforsche", + "forests": "Aktuelle Wälder", + "restoration": "Aufforstungspotenzial", + "deforestation": "Entwaldung", + "planted": "Gepflanzt", + "projects": "Projekte", + "3trilliontrees": "Die Welt hat heute etwa 3000 Milliarden Bäume (\"Wälder\"). Und Platz für bis zu 1000 Milliarde mehr (\"Aufforstungspotenzial\").", + "high": "Hoch", + "low": "Niedrig", + "forestInfo": "Derzeit gibt es weltweit 3040 Milliarden Bäume. Es gab 6000 Milliarde Bäume, bevor der Mensch vor etwa 11.000 Jahren begann Wälder abzuholzen.", + "restorationInfo": " Eine halbe Milliarde Hektar eignen sich für die großflächige Wiederherstellung von geschlossenen Wäldern. Weitere anderthalb Milliarden Hektar eignen sich am besten für die Mosaikrestaurierung, bei der Wälder mit anderen Landnutzungen wie Agroforstwirtschaft, kleinbäuerlicher Landwirtschaft und Siedlungen kombiniert werden.", + "location": "Ort", + "timeTravel": "Zeitreise", + "vegetationChange": "Vegetationsänderung", + "beta": "BETA", + "baseLayer": "Basislayer & Vektorkarten", + "satelliteImagery": "Satellitenbilder", + "fieldData": "Felddaten", + "trees": "Bäume", + "ha": "ha", + "plantingDate": "Datum der Pflanzung ", + "plantingDensity": "Dichte der Pflanzung", + "speciesPlanted": "Gepflanzte Arten", + "sampleTrees": "Beispielbäume", + "meterHigh": "m hoch", + "cmWide": "cm breit", + "treesPerHa": "Bäume pro ha", + "sampleTree": "Beispielbaum", + "scientificName": "Wissenschaftlicher Name", + "measurements": "Messwerte", + "treeTag": "Baum-Tag", + "1Tree": "1 Baum", + "plot": "Parzelle", + "tag": "Tag", + "plantingDensityInfo": "Im Falle einer Anreicherung kann die Pflanzdichte geringer sein.", + "plantationDensityFormula": "Pflanzdichte = Anzahl der Bäume / Bepflanzungsfläche", + "unknown": "Unbekannt", + "showWholeArea": "Gesamten Fläche anzeigen", + "daysAgo": "vor {{days}} Tagen", + "today": "Heute", + "yesterday": "Gestern", + "clickForDetails": "Klicke für Details", + "treeMapper": "TreeMapper", + "showProjectList": "Projektliste anzeigen", + "showProjectDetails": "Projektdetails anzeigen", + "hideProjectList": "Projektliste ausblenden", + "hideProjectDetails": "Projektdetails ausblenden", + "countries": "Länder" + } +} diff --git a/public/static/locales/en/common.json b/public/static/locales/en/common.json index 14c8733a5f..f9ee54d684 100644 --- a/public/static/locales/en/common.json +++ b/public/static/locales/en/common.json @@ -1,136 +1,139 @@ { - "tree_one": "Tree", - "tree_other": "Trees", - "m2": "m²", - "by": "By {{tpoName}}", - "to_project_by_tpo": "To {{projectName}} by {{tpoName}}", - "for": "for", - "trees": "Trees", - "planted": "planted", - "privacy": "Privacy", - "terms": "Terms", - "imprint": "Imprint", - "status": "Status", - "contact": "Contact", - "supportUs": "Support Us", - "leaders": "Leaders", - "leaderboard": "Leaderboard", - "me": "Me", - "signIn": "Sign In", - "home": "Home", - "donate_gift": "Donate/Gift", - "plant": "Plant", - "donate": "Donate", - "gift": "Gift", - "continue": "Continue", - "selectLanguage": "Select a Language", - "selectCountry": "Select Country", - "ok": "OK", - "cancel": "Cancel", - "delete": "Delete", - "deleteAccount": "Delete Account", - "thankYou": "Thank You", - "privacyPolicyNotice": "By using this website, you agree to Plant-for-the-Planet's", - "privacyPolicy": "privacy & cookie policy", - "about_pftp": "About Plant-for-the-Planet", - "january": "January", - "february": "February", - "march": "March", - "april": "April", - "may": "May", - "june": "June", - "july": "July", - "august": "August", - "september": "September", - "october": "October", - "november": "November", - "december": "December", - "approx": "Approx.", - "view": "View", - "verifyEmailHeader": "Please confirm your email.", - "verifyEmailText": "To secure your account, we need to verify your email. Please check your inbox or spam/junk folder for a confirmation email and then continue to login.", - "verifyEmailInfo": "If you didn’t receive an email please try logging in again and we’ll send you another email.", - "continueToLogin": "Continue to Login", - "supportsUNEP": "Supports the UNEP", - "plantedBy": "Planted by", - "redeemPopup": "Received a Tree Gift? Please log in to redeem your trees.", - "login": "Login/Signup", - "shop": "Shop", - "downloads": "Downloads", - "team": "Team", - "jobs": "Jobs", - "blogs": "Blogs", - "faqs": "FAQs", - "annualReports": "Annual Reports", - "skipIntroVideo": "Skip Intro", - "mapInfo": "Map Credits", - "aboutUs": "About Us", - "alternativelyEditProfile": "Alternatively you can mark your profile private by visiting Edit Profile.", - "deleteAccountConsent": "By clicking \"Delete\", I am requesting Plant-for-the-Planet to delete all data associated with my Plant-for-the-Planet account. Donation data may be kept for up to eight years. Trees I have registered will not be removed, however, will be anonymized and can't be claimed again.", - "deleteIrreversible": "I also understand that account deletion of {{email}} is irreversible.", - "goBack": "Go Back", - "deleteAccountMessage": "To continue with deletion, please type `{{delete}}`", - "deleteAccountLabel": "Type: {{delete}}", - "edit": "Edit", - "howDoesThisWork": "How does this work?", - "copiedToClipboard": "Copied to clipboard!", - "close": "Close", - "logout": "Logout", - "document": "Platform Documentation (EN)", - "featured": "Featured", - "treeMapper": "TreeMapper", - "overview": "Overview", - "childrenAndYouth": "Children and Youth", - "trillionTrees": "Trillion Trees", - "yucatan": "Yucatán Restoration", - "partners": "Partners", - "changeChocolate": "The Change Chocolate", - "stopTalkingStartPlanting": "Stop talking. Start planting.", - "underMaintenance": "Under Maintenance", - "forbidden": "You are not allowed to view this page!", - "connectionError": "Could not reach the server. Please check your internet connection.", - "validationFailed": "Validation Failed!", - "add": "Add", - "modalTitle": "Cancel all subscriptions to proceed", - "modalSubtitle": "Please cancel your subscriptions first", - "deleteCondition": "Before proceeding, make sure you've cancelled all subscriptions.", - "showSubscriptions": "Show my Subscriptions", - "notFound": "Resource not found", - "tooManyRequest": "Too many requests. Please wait and try again later or contact the system administrator for assistance.", - "unauthorized": "Not Authorized", - "validationError": "Validation Error", - "internalServerError": "Internal Server Error - Please try again later!", - "serviceUnavailable": "App is undergoing maintenance, please check status.plant-for-the-planet.org for details", - "account_duplicate": "Account already exists", - "line_item_amount_deviation": "Amount Deviation", - "line_item_amount_invalid": "Invalid amount", - "line_item_amount_prohibited": "Amount prohibited", - "idempotency_key_missing": "Missing Idempotency key in header", - "line_item_invalid_donor_data": "Invalid donor data", - "line_item_invalid_planet_cash_account": "Invalid PlanetCash Account", - "line_item_invalid_project": "Invalid project", - "line_item_missing_amount": "Missing amount", - "line_item_missing_currency": "Missing currency", - "line_item_missing_quantity": "Missing quantity", - "line_item_project_not_allowing_donations": "Project not allowing donations", - "line_item_quantity_prohibited": "Quantity prohibited", - "generic_error": "Something went wrong. Please check your internet connection or try again later.", - "missing_profile": "Missing Profile", - "some_error": "Something went wrong", - "planet_cash_payment_failure": "Payment failure", - "planet_cash_insufficient_credit": "Insufficient Credit", - "planet_cash_invalid_project": "Invalid Project", - "active_account_exists": "Active PlanetCash account already exists", - "duplicate_account": "Account already exists", - "token_expired": "Token Expired. Please login again", - "project_not_available": "Project details are currently unavailable", - "topProject": "Top Project", - "viewReport": "View Report", - "reviewInfo": " The project was inspected in a multiday field review in <2>month and fullfills our <5>standards.", - "standardsLink": "https://www.plant-for-the-planet.org/standards/", - "project": "Project", - "top_project_standards_fulfilled": "The project inspection revealed that this project fulfilled at least 12 of the 19 Top Project <2>standards.", - "disabledDonateButtonText": "The project does not currently accept donations. This may be because it is fully funded, has not yet been reviewed or does not currently meet all our project standards, or chooses to use the platform exclusively for its transparency tools.", - "notDonatable": "Not Donatable", - "salesforceDisabledDonateButtonText": "The project does not currently accept donations." -} \ No newline at end of file + "Common": { + "tree": "{count, plural, =0 {Trees} =1 {Tree} other {Trees}}", + "tree_one": "Tree", + "tree_other": "Trees", + "m2": "m²", + "by": "By {tpoName}", + "to_project_by_tpo": "To {{projectName}} by {{tpoName}}", + "for": "for", + "trees": "Trees", + "planted": "planted", + "privacy": "Privacy", + "terms": "Terms", + "imprint": "Imprint", + "status": "Status", + "contact": "Contact", + "supportUs": "Support Us", + "leaders": "Leaders", + "leaderboard": "Leaderboard", + "me": "Me", + "signIn": "Sign In", + "home": "Home", + "donate_gift": "Donate/Gift", + "plant": "Plant", + "donate": "Donate", + "gift": "Gift", + "continue": "Continue", + "selectLanguage": "Select a Language", + "selectCountry": "Select Country", + "ok": "OK", + "cancel": "Cancel", + "delete": "Delete", + "deleteAccount": "Delete Account", + "thankYou": "Thank You", + "privacyPolicyNotice": "By using this website, you agree to Plant-for-the-Planet's", + "privacyPolicy": "privacy & cookie policy", + "about_pftp": "About Plant-for-the-Planet", + "january": "January", + "february": "February", + "march": "March", + "april": "April", + "may": "May", + "june": "June", + "july": "July", + "august": "August", + "september": "September", + "october": "October", + "november": "November", + "december": "December", + "approx": "Approx.", + "view": "View", + "verifyEmailHeader": "Please confirm your email.", + "verifyEmailText": "To secure your account, we need to verify your email. Please check your inbox or spam/junk folder for a confirmation email and then continue to login.", + "verifyEmailInfo": "If you didn’t receive an email please try logging in again and we’ll send you another email.", + "continueToLogin": "Continue to Login", + "supportsUNEP": "Supports the UNEP", + "plantedBy": "Planted by", + "redeemPopup": "Received a Tree Gift? Please log in to redeem your trees.", + "login": "Login/Signup", + "shop": "Shop", + "downloads": "Downloads", + "team": "Team", + "jobs": "Jobs", + "blogs": "Blogs", + "faqs": "FAQs", + "annualReports": "Annual Reports", + "skipIntroVideo": "Skip Intro", + "mapInfo": "Map Credits", + "aboutUs": "About Us", + "alternativelyEditProfile": "Alternatively you can mark your profile private by visiting Edit Profile.", + "deleteAccountConsent": "By clicking \"Delete\", I am requesting Plant-for-the-Planet to delete all data associated with my Plant-for-the-Planet account. Donation data may be kept for up to eight years. Trees I have registered will not be removed, however, will be anonymized and can't be claimed again.", + "deleteIrreversible": "I also understand that account deletion of {{email}} is irreversible.", + "goBack": "Go Back", + "deleteAccountMessage": "To continue with deletion, please type `{{delete}}`", + "deleteAccountLabel": "Type: {{delete}}", + "edit": "Edit", + "howDoesThisWork": "How does this work?", + "copiedToClipboard": "Copied to clipboard!", + "close": "Close", + "logout": "Logout", + "document": "Platform Documentation (EN)", + "featured": "Featured", + "treeMapper": "TreeMapper", + "overview": "Overview", + "childrenAndYouth": "Children and Youth", + "trillionTrees": "Trillion Trees", + "yucatan": "Yucatán Restoration", + "partners": "Partners", + "changeChocolate": "The Change Chocolate", + "stopTalkingStartPlanting": "Stop talking. Start planting.", + "underMaintenance": "Under Maintenance", + "forbidden": "You are not allowed to view this page!", + "connectionError": "Could not reach the server. Please check your internet connection.", + "validationFailed": "Validation Failed!", + "add": "Add", + "modalTitle": "Cancel all subscriptions to proceed", + "modalSubtitle": "Please cancel your subscriptions first", + "deleteCondition": "Before proceeding, make sure you've cancelled all subscriptions.", + "showSubscriptions": "Show my Subscriptions", + "notFound": "Resource not found", + "tooManyRequest": "Too many requests. Please wait and try again later or contact the system administrator for assistance.", + "unauthorized": "Not Authorized", + "validationError": "Validation Error", + "internalServerError": "Internal Server Error - Please try again later!", + "serviceUnavailable": "App is undergoing maintenance, please check status.plant-for-the-planet.org for details", + "account_duplicate": "Account already exists", + "line_item_amount_deviation": "Amount Deviation", + "line_item_amount_invalid": "Invalid amount", + "line_item_amount_prohibited": "Amount prohibited", + "idempotency_key_missing": "Missing Idempotency key in header", + "line_item_invalid_donor_data": "Invalid donor data", + "line_item_invalid_planet_cash_account": "Invalid PlanetCash Account", + "line_item_invalid_project": "Invalid project", + "line_item_missing_amount": "Missing amount", + "line_item_missing_currency": "Missing currency", + "line_item_missing_quantity": "Missing quantity", + "line_item_project_not_allowing_donations": "Project not allowing donations", + "line_item_quantity_prohibited": "Quantity prohibited", + "generic_error": "Something went wrong. Please check your internet connection or try again later.", + "missing_profile": "Missing Profile", + "some_error": "Something went wrong", + "planet_cash_payment_failure": "Payment failure", + "planet_cash_insufficient_credit": "Insufficient Credit", + "planet_cash_invalid_project": "Invalid Project", + "active_account_exists": "Active PlanetCash account already exists", + "duplicate_account": "Account already exists", + "token_expired": "Token Expired. Please login again", + "project_not_available": "Project details are currently unavailable", + "topProject": "Top Project", + "viewReport": "View Report", + "reviewInfo": "The project was inspected in a multiday field review in {reviewMonth} and fullfills our standards.", + "standardsLink": "https://www.plant-for-the-planet.org/standards/", + "project": "Project", + "top_project_standards_fulfilled": "The project inspection revealed that this project fulfilled at least 12 of the 19 Top Project standards.", + "disabledDonateButtonText": "The project does not currently accept donations. This may be because it is fully funded, has not yet been reviewed or does not currently meet all our project standards, or chooses to use the platform exclusively for its transparency tools.", + "notDonatable": "Not Donatable", + "salesforceDisabledDonateButtonText": "The project does not currently accept donations." + } +} diff --git a/public/static/locales/en/country.json b/public/static/locales/en/country.json index 7decc226e8..0cce8f9c38 100644 --- a/public/static/locales/en/country.json +++ b/public/static/locales/en/country.json @@ -1,262 +1,264 @@ { - "auto": "Automatic Selection", - "ac": "Ascension Island", - "af": "Afghanistan", - "ax": "Åland Islands", - "al": "Albania", - "dz": "Algeria", - "as": "American Samoa", - "ad": "Andorra", - "ao": "Angola", - "ai": "Anguilla", - "aq": "Antarctica", - "ag": "Antigua and Barbuda", - "ar": "Argentina", - "am": "Armenia", - "aw": "Aruba", - "au": "Australia", - "at": "Austria", - "az": "Azerbaijan", - "bs": "Bahamas", - "bh": "Bahrain", - "bd": "Bangladesh", - "bb": "Barbados", - "by": "Belarus", - "be": "Belgium", - "bz": "Belize", - "bj": "Benin", - "bm": "Bermuda", - "bt": "Bhutan", - "bo": "Bolivia", - "bq": "Bonaire, Sint Eustatius and Saba", - "ba": "Bosnia and Herzegovina", - "bw": "Botswana", - "bv": "Bouvet Island", - "br": "Brazil", - "io": "British Indian Ocean Territory", - "bn": "Brunei Darussalam", - "bg": "Bulgaria", - "bf": "Burkina Faso", - "bi": "Burundi", - "cv": "Cabo Verde", - "kh": "Cambodia", - "cm": "Cameroon", - "ca": "Canada", - "ic": "Canary Islands", - "ky": "Cayman Islands", - "cf": "Central African Republic", - "ea": "Ceuta & Melilla", - "td": "Chad", - "cl": "Chile", - "cn": "China", - "cx": "Christmas Island", - "cc": "Cocos (Keeling) Islands", - "co": "Colombia", - "km": "Comoros", - "cg": "Congo", - "cd": "DR Congo", - "ck": "Cook Islands", - "cr": "Costa Rica", - "ci": "Côte d'Ivoire", - "hr": "Croatia", - "cu": "Cuba", - "cw": "Curaçao", - "cy": "Cyprus", - "cz": "Czechia", - "dk": "Denmark", - "dg": "Diego Garcia", - "dj": "Djibouti", - "dm": "Dominica", - "do": "Dominican Republic", - "tp": "East Timor", - "ec": "Ecuador", - "eg": "Egypt", - "sv": "El Salvador", - "gq": "Equatorial Guinea", - "er": "Eritrea", - "ee": "Estonia", - "sz": "Eswatini", - "et": "Ethiopia", - "ez": "Eurozone", - "fk": "Falkland Islands (Malvinas)", - "fo": "Faroe Islands", - "fj": "Fiji", - "fi": "Finland", - "fr": "France", - "gf": "French Guiana", - "pf": "French Polynesia", - "tf": "French Southern Territories", - "ga": "Gabon", - "gm": "Gambia", - "ge": "Georgia", - "de": "Germany", - "gh": "Ghana", - "gi": "Gibraltar", - "gr": "Greece", - "gl": "Greenland", - "gd": "Grenada", - "gp": "Guadeloupe", - "gu": "Guam", - "gt": "Guatemala", - "gg": "Guernsey", - "gn": "Guinea", - "gw": "Guinea-Bissau", - "gy": "Guyana", - "ht": "Haiti", - "hm": "Heard Island and McDonald Islands", - "va": "Holy See", - "hn": "Honduras", - "hk": "Hong Kong", - "hu": "Hungary", - "is": "Iceland", - "in": "India", - "id": "Indonesia", - "ir": "Iran", - "iq": "Iraq", - "ie": "Ireland", - "im": "Isle of Man", - "il": "Israel", - "it": "Italy", - "jm": "Jamaica", - "jp": "Japan", - "je": "Jersey", - "jo": "Jordan", - "kz": "Kazakhstan", - "ke": "Kenya", - "ki": "Kiribati", - "xk": "Kosovo", - "kp": "Korea (Democratic People's Republic of)", - "kr": "Korea, Republic of", - "kw": "Kuwait", - "kg": "Kyrgyzstan", - "la": "Lao People's Democratic Republic", - "lv": "Latvia", - "lb": "Lebanon", - "ls": "Lesotho", - "lr": "Liberia", - "ly": "Libya", - "li": "Liechtenstein", - "lt": "Lithuania", - "lu": "Luxembourg", - "mo": "Macao", - "mg": "Madagascar", - "mw": "Malawi", - "my": "Malaysia", - "mv": "Maldives", - "ml": "Mali", - "mt": "Malta", - "mh": "Marshall Islands", - "mq": "Martinique", - "mr": "Mauritania", - "mu": "Mauritius", - "yt": "Mayotte", - "mx": "Mexico", - "fm": "Micronesia", - "md": "Moldova", - "mc": "Monaco", - "mn": "Mongolia", - "me": "Montenegro", - "ms": "Montserrat", - "ma": "Morocco", - "mz": "Mozambique", - "mm": "Myanmar", - "na": "Namibia", - "nr": "Nauru", - "np": "Nepal", - "nl": "Netherlands", - "an": "Netherlands Antilles", - "nc": "New Caledonia", - "nz": "New Zealand", - "ni": "Nicaragua", - "ne": "Niger", - "ng": "Nigeria", - "nu": "Niue", - "nf": "Norfolk Island", - "mk": "North Macedonia", - "mp": "Northern Mariana Islands", - "no": "Norway", - "om": "Oman", - "pk": "Pakistan", - "pw": "Palau", - "ps": "Palestine, State of", - "pa": "Panama", - "pg": "Papua New Guinea", - "py": "Paraguay", - "pe": "Peru", - "ph": "Philippines", - "pn": "Pitcairn", - "pl": "Poland", - "pt": "Portugal", - "pr": "Puerto Rico", - "qa": "Qatar", - "re": "Réunion", - "ro": "Romania", - "ru": "Russian Federation", - "rw": "Rwanda", - "bl": "Saint Barthélemy", - "sh": "Saint Helena, Ascension and Tristan da Cunha", - "kn": "Saint Kitts and Nevis", - "lc": "Saint Lucia", - "mf": "Saint Martin (French part)", - "pm": "Saint Pierre and Miquelon", - "vc": "Saint Vincent and the Grenadines", - "ws": "Samoa", - "sm": "San Marino", - "st": "Sao Tome and Principe", - "sa": "Saudi Arabia", - "sn": "Senegal", - "rs": "Serbia", - "sc": "Seychelles", - "sl": "Sierra Leone", - "sg": "Singapore", - "sx": "Sint Maarten (Dutch part)", - "sk": "Slovakia", - "si": "Slovenia", - "sb": "Solomon Islands", - "so": "Somalia", - "za": "South Africa", - "gs": "South Georgia and the South Sandwich Islands", - "ss": "South Sudan", - "es": "Spain", - "lk": "Sri Lanka", - "sd": "Sudan", - "sr": "Suriname", - "sj": "Svalbard and Jan Mayen", - "se": "Sweden", - "ch": "Switzerland", - "sy": "Syrian Arab Republic", - "tw": "Taiwan", - "tj": "Tajikistan", - "tz": "Tanzania", - "th": "Thailand", - "tl": "Timor-Leste", - "tg": "Togo", - "tk": "Tokelau", - "to": "Tonga", - "tt": "Trinidad and Tobago", - "ta": "Tristan da Cunha", - "tn": "Tunisia", - "tr": "Turkey", - "tm": "Turkmenistan", - "tc": "Turks and Caicos Islands", - "tv": "Tuvalu", - "ug": "Uganda", - "ua": "Ukraine", - "ae": "United Arab Emirates", - "gb": "UK", - "un": "United Nations", - "us": "USA", - "um": "United States Minor Outlying Islands", - "uy": "Uruguay", - "uz": "Uzbekistan", - "vu": "Vanuatu", - "ve": "Venezuela", - "vn": "Viet Nam", - "vg": "Virgin Islands (British)", - "vi": "Virgin Islands (U.S.)", - "wf": "Wallis and Futuna", - "eh": "Western Sahara", - "ye": "Yemen", - "zm": "Zambia", - "zw": "Zimbabwe" -} \ No newline at end of file + "Country": { + "auto": "Automatic Selection", + "ac": "Ascension Island", + "af": "Afghanistan", + "ax": "Åland Islands", + "al": "Albania", + "dz": "Algeria", + "as": "American Samoa", + "ad": "Andorra", + "ao": "Angola", + "ai": "Anguilla", + "aq": "Antarctica", + "ag": "Antigua and Barbuda", + "ar": "Argentina", + "am": "Armenia", + "aw": "Aruba", + "au": "Australia", + "at": "Austria", + "az": "Azerbaijan", + "bs": "Bahamas", + "bh": "Bahrain", + "bd": "Bangladesh", + "bb": "Barbados", + "by": "Belarus", + "be": "Belgium", + "bz": "Belize", + "bj": "Benin", + "bm": "Bermuda", + "bt": "Bhutan", + "bo": "Bolivia", + "bq": "Bonaire, Sint Eustatius and Saba", + "ba": "Bosnia and Herzegovina", + "bw": "Botswana", + "bv": "Bouvet Island", + "br": "Brazil", + "io": "British Indian Ocean Territory", + "bn": "Brunei Darussalam", + "bg": "Bulgaria", + "bf": "Burkina Faso", + "bi": "Burundi", + "cv": "Cabo Verde", + "kh": "Cambodia", + "cm": "Cameroon", + "ca": "Canada", + "ic": "Canary Islands", + "ky": "Cayman Islands", + "cf": "Central African Republic", + "ea": "Ceuta & Melilla", + "td": "Chad", + "cl": "Chile", + "cn": "China", + "cx": "Christmas Island", + "cc": "Cocos (Keeling) Islands", + "co": "Colombia", + "km": "Comoros", + "cg": "Congo", + "cd": "DR Congo", + "ck": "Cook Islands", + "cr": "Costa Rica", + "ci": "Côte d'Ivoire", + "hr": "Croatia", + "cu": "Cuba", + "cw": "Curaçao", + "cy": "Cyprus", + "cz": "Czechia", + "dk": "Denmark", + "dg": "Diego Garcia", + "dj": "Djibouti", + "dm": "Dominica", + "do": "Dominican Republic", + "tp": "East Timor", + "ec": "Ecuador", + "eg": "Egypt", + "sv": "El Salvador", + "gq": "Equatorial Guinea", + "er": "Eritrea", + "ee": "Estonia", + "sz": "Eswatini", + "et": "Ethiopia", + "ez": "Eurozone", + "fk": "Falkland Islands (Malvinas)", + "fo": "Faroe Islands", + "fj": "Fiji", + "fi": "Finland", + "fr": "France", + "gf": "French Guiana", + "pf": "French Polynesia", + "tf": "French Southern Territories", + "ga": "Gabon", + "gm": "Gambia", + "ge": "Georgia", + "de": "Germany", + "gh": "Ghana", + "gi": "Gibraltar", + "gr": "Greece", + "gl": "Greenland", + "gd": "Grenada", + "gp": "Guadeloupe", + "gu": "Guam", + "gt": "Guatemala", + "gg": "Guernsey", + "gn": "Guinea", + "gw": "Guinea-Bissau", + "gy": "Guyana", + "ht": "Haiti", + "hm": "Heard Island and McDonald Islands", + "va": "Holy See", + "hn": "Honduras", + "hk": "Hong Kong", + "hu": "Hungary", + "is": "Iceland", + "in": "India", + "id": "Indonesia", + "ir": "Iran", + "iq": "Iraq", + "ie": "Ireland", + "im": "Isle of Man", + "il": "Israel", + "it": "Italy", + "jm": "Jamaica", + "jp": "Japan", + "je": "Jersey", + "jo": "Jordan", + "kz": "Kazakhstan", + "ke": "Kenya", + "ki": "Kiribati", + "xk": "Kosovo", + "kp": "Korea (Democratic People's Republic of)", + "kr": "Korea, Republic of", + "kw": "Kuwait", + "kg": "Kyrgyzstan", + "la": "Lao People's Democratic Republic", + "lv": "Latvia", + "lb": "Lebanon", + "ls": "Lesotho", + "lr": "Liberia", + "ly": "Libya", + "li": "Liechtenstein", + "lt": "Lithuania", + "lu": "Luxembourg", + "mo": "Macao", + "mg": "Madagascar", + "mw": "Malawi", + "my": "Malaysia", + "mv": "Maldives", + "ml": "Mali", + "mt": "Malta", + "mh": "Marshall Islands", + "mq": "Martinique", + "mr": "Mauritania", + "mu": "Mauritius", + "yt": "Mayotte", + "mx": "Mexico", + "fm": "Micronesia", + "md": "Moldova", + "mc": "Monaco", + "mn": "Mongolia", + "me": "Montenegro", + "ms": "Montserrat", + "ma": "Morocco", + "mz": "Mozambique", + "mm": "Myanmar", + "na": "Namibia", + "nr": "Nauru", + "np": "Nepal", + "nl": "Netherlands", + "an": "Netherlands Antilles", + "nc": "New Caledonia", + "nz": "New Zealand", + "ni": "Nicaragua", + "ne": "Niger", + "ng": "Nigeria", + "nu": "Niue", + "nf": "Norfolk Island", + "mk": "North Macedonia", + "mp": "Northern Mariana Islands", + "no": "Norway", + "om": "Oman", + "pk": "Pakistan", + "pw": "Palau", + "ps": "Palestine, State of", + "pa": "Panama", + "pg": "Papua New Guinea", + "py": "Paraguay", + "pe": "Peru", + "ph": "Philippines", + "pn": "Pitcairn", + "pl": "Poland", + "pt": "Portugal", + "pr": "Puerto Rico", + "qa": "Qatar", + "re": "Réunion", + "ro": "Romania", + "ru": "Russian Federation", + "rw": "Rwanda", + "bl": "Saint Barthélemy", + "sh": "Saint Helena, Ascension and Tristan da Cunha", + "kn": "Saint Kitts and Nevis", + "lc": "Saint Lucia", + "mf": "Saint Martin (French part)", + "pm": "Saint Pierre and Miquelon", + "vc": "Saint Vincent and the Grenadines", + "ws": "Samoa", + "sm": "San Marino", + "st": "Sao Tome and Principe", + "sa": "Saudi Arabia", + "sn": "Senegal", + "rs": "Serbia", + "sc": "Seychelles", + "sl": "Sierra Leone", + "sg": "Singapore", + "sx": "Sint Maarten (Dutch part)", + "sk": "Slovakia", + "si": "Slovenia", + "sb": "Solomon Islands", + "so": "Somalia", + "za": "South Africa", + "gs": "South Georgia and the South Sandwich Islands", + "ss": "South Sudan", + "es": "Spain", + "lk": "Sri Lanka", + "sd": "Sudan", + "sr": "Suriname", + "sj": "Svalbard and Jan Mayen", + "se": "Sweden", + "ch": "Switzerland", + "sy": "Syrian Arab Republic", + "tw": "Taiwan", + "tj": "Tajikistan", + "tz": "Tanzania", + "th": "Thailand", + "tl": "Timor-Leste", + "tg": "Togo", + "tk": "Tokelau", + "to": "Tonga", + "tt": "Trinidad and Tobago", + "ta": "Tristan da Cunha", + "tn": "Tunisia", + "tr": "Turkey", + "tm": "Turkmenistan", + "tc": "Turks and Caicos Islands", + "tv": "Tuvalu", + "ug": "Uganda", + "ua": "Ukraine", + "ae": "United Arab Emirates", + "gb": "UK", + "un": "United Nations", + "us": "USA", + "um": "United States Minor Outlying Islands", + "uy": "Uruguay", + "uz": "Uzbekistan", + "vu": "Vanuatu", + "ve": "Venezuela", + "vn": "Viet Nam", + "vg": "Virgin Islands (British)", + "vi": "Virgin Islands (U.S.)", + "wf": "Wallis and Futuna", + "eh": "Western Sahara", + "ye": "Yemen", + "zm": "Zambia", + "zw": "Zimbabwe" + } +} diff --git a/public/static/locales/en/donate.json b/public/static/locales/en/donate.json index 6236b2e021..c102fd28ca 100644 --- a/public/static/locales/en/donate.json +++ b/public/static/locales/en/donate.json @@ -1,115 +1,117 @@ { - "fortreeCountTrees": "for {{treeCount}} Tree", - "fortreeCountTrees_plural": "for {{treeCount}} Trees", - "yourTreesPlantedByOnLocation": "Your {{treeCount}} tree will be planted by {{projectName}} in {{location}}.", - "yourTreesPlantedByOnLocation_plural": "Your {{treeCount}} trees will be planted by {{projectName}} in {{location}}.", - "myTreesPlantedByOnLocation": "My {{treeCount}} tree is being planted in {{location}}.", - "myTreesPlantedByOnLocation_plural": "My {{treeCount}} trees are being planted in {{location}}.", - "projects": "Projects", - "topProjects": "Top Projects", - "allCountProjects": "All {{projectCount}} Projects", - "searchProjects": "Search Projects", - "viewProfile": "View Profile", - "contactDetails": "Contact Details", - "readMore": "Read More", - "readLess": "Read Less", - "treeDonation": "Tree Donation", - "myDonationGiftToSomeone": "My donation is dedicated to someone", - "taxDeductionNotYetAvailable": "Tax deduction is not yet available for ", - "taxDeductionNotAvailableForProject": "Tax deduction is not yet available for this project", - "youWillReceiveTaxDeduction": "You will receive a tax deduction receipt for ", - "toProjectByOrganization": "To {{projectName}} by {{organizationName}}", - "firstName": "First Name", - "lastName": "Last Name", - "email": "Email", - "address": "Address", - "city": "City", - "zipCode": "Postal/Zip Code", - "zipCodeAlphaNumValidation": "ZipCode is invalid", - "country": "Country", - "isACompanyDonation": "This donation is made by a company", - "companyName": "Company Name", - "giftRecipient": "Gift Recipient", - "directGiftRecipient": "This donation supports", - "recipientName": "Recipient Name", - "recipientNameRequired": "Recipient Name is required", - "removeRecipient": "Remove", - "giftMessage": "Gift Message", - "firstNameRequired": "First Name field is required", - "lastNameRequired": "Last Name field is required", - "emailRequired": "Email is required", - "addressRequired": "Address is required", - "cityRequired": "City is required", - "countryRequired": "Country is required", - "companyRequired": "Company Name is required", - "paymentDetails": "Payment Details", - "validationFailed": "Validation Failed", - "seedingYourDonation": "Seeding your donation", - "pleaseDoNotCloseThisTab": "Please do not close this tab!", - "perTree": "per tree", - "stopTalkingStartPlanting": "Stop talking. Start planting.", - "creditDebitCard": "Credit/Debit Card", - "cardNumber": "Card Number", - "expDate": "Exp. Date (MM/YY)", - "selectCurrency": "Select your Currency", - "treeDonationWithPFP": "Tree donation with Plant-for-the-Planet", - "unavailable": "unavailable", - "donationSuccessfulWith": "Your {{currency}} {{totalAmount}} donation was successfully paid with {{paymentTypeUsed}}.", - "donationSuccessful": "Your {{currency}} {{totalAmount}} donation was successful.", - "giftSentMessage": "We've sent an email to {{recipientName}} about the gift.", - "contributionMessage": "Maybe you'll visit them some day? In the mean time, maybe hook up your friends with some trees of their own by telling them about yours?", - "plantTreesAtURL": "Plant trees at {{url}}", - "copiedToClipboard": "Text Copied to Clipboard!", - "noProjectsFound": "No projects found", - "inTimeOfTaxReturns": "in time for tax returns.", - "titleToShare": "Planting trees against the climate crisis!", - "giftToName": "Gift to", - "thisDonationSupports": "This donation supports", - "plantTreesWith": "Plant trees with", - "textToShare": "Join {{name}} and thousand of others to plant a trillion trees to tackle the climate crisis #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "thankyouHeaderText": "We're on the road to a \n

Trillion Trees

", - "shareTextTitle": "Stop Talking. Start Plant", - "textToShareLinkedin": "Join {{name}} and thousand of others to plant a trillion trees to tackle the climate crisis", - "textToShareForMe": "Join me and thousand of others to plant a trillion trees to tackle the climate crisis", - "donationTokenInvalid": "The provided donation token is invalid.", - "giftTo": "Gift to", - "supporting": "Supporting", - "selectProject": "Select a project", - "giftValidation": "Please enter gift details", - "minDonate": "Minimum donation amount is", - "noPaymentMethodError": "Could not process your payment, please try again.", - "somethingWentWrong": "Something went wrong please try again soon!", - "underMaintenance": "App is undergoing maintenance, please check status.plant-for-the-planet.org for details", - "waitingConfirmation": "We are currently waiting a confirmation from your bank and will send you an email shortly. Please feel free to close this page.", - "yourDonationRef": "Your donation ref is {{donationID}}", - "payWithGiroPay": "Donate with GiroPay", - "payWithSofort": "Donate with SOFORT", - "donationFailed": "Donation Failed", - "donationFailedMessage": "Something went wrong while completing your payment. If you continue having issues please reach out to us at support@plant-for-the-planet.org", - "donationPending": "Completing your donation", - "donationPendingMessage": "We are currently waiting for the confirmation from your bank. This might take some time so, please feel free to close this page. We’ll send your receipt via email shortly.", - "sepaMessage": "By providing your IBAN and confirming this payment, you authorize Plant-for-the-Planet and Stripe, our payment service provider, to send instructions to your bank to debit your account. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. If you have any issues regarding your donation, please send us an email to support@plant-for-the-planet.org", - "donationRef": "Donation Ref", - "sepaDisclaimer": "SEPA payments take 2-14 business days (usually 3-5 days). As soon as it arrives we send you a confirmation email with your tree certificate and raise the tree counter.", - "sofortDisclaimer": "SOFORT payments take 2-14 business days (usually 2-3 days). As soon as it arrives we send you a confirmation email with your tree certificate and raise the tree counter.", - "askPublishName": "Show my full name in the Plant-for-the-Planet app & leaderboards.", - "nameAlreadyPublished": "Your full name will appear in leaderboard as your Plant-for-the-Planet profile is currently public.", - "orgNamePublishedTax": "Company name is visible on our leaderboard and app. Tax-deduction receipts will be issued for the same name.", - "orgNamePublished": "Company name is visible on our leaderboard and app.", - "aboutProject": "About Project", - "acceptingDonations": "Accepting Donations", - "natural-regeneration": "Natural Regeneration", - "managed-regeneration": "Managed Regeneration", - "large-scale-planting": "Large Scale Restoration", - "agroforestry": "Agroforestry", - "urban-planting": "Urban Restoration", - "other-planting": "Restoration", - "mangroves": "Mangroves", - "purpose": "Purpose", - "projectPurpose": "Project Purpose", - "type": "Type", - "projectType": "Project Type", - "restoration": "Restoration", - "filters": "Filters", - "perM2": "per m²" + "Donate": { + "fortreeCountTrees": "for {{treeCount}} Tree", + "fortreeCountTrees_plural": "for {{treeCount}} Trees", + "yourTreesPlantedByOnLocation": "Your {{treeCount}} tree will be planted by {{projectName}} in {{location}}.", + "yourTreesPlantedByOnLocation_plural": "Your {{treeCount}} trees will be planted by {{projectName}} in {{location}}.", + "myTreesPlantedByOnLocation": "My {{treeCount}} tree is being planted in {{location}}.", + "myTreesPlantedByOnLocation_plural": "My {{treeCount}} trees are being planted in {{location}}.", + "projects": "Projects", + "topProjects": "Top Projects", + "allCountProjects": "All {projectCount} Projects", + "searchProjects": "Search Projects", + "viewProfile": "View Profile", + "contactDetails": "Contact Details", + "readMore": "Read More", + "readLess": "Read Less", + "treeDonation": "Tree Donation", + "myDonationGiftToSomeone": "My donation is dedicated to someone", + "taxDeductionNotYetAvailable": "Tax deduction is not yet available for ", + "taxDeductionNotAvailableForProject": "Tax deduction is not yet available for this project", + "youWillReceiveTaxDeduction": "You will receive a tax deduction receipt for ", + "toProjectByOrganization": "To {{projectName}} by {{organizationName}}", + "firstName": "First Name", + "lastName": "Last Name", + "email": "Email", + "address": "Address", + "city": "City", + "zipCode": "Postal/Zip Code", + "zipCodeAlphaNumValidation": "ZipCode is invalid", + "country": "Country", + "isACompanyDonation": "This donation is made by a company", + "companyName": "Company Name", + "giftRecipient": "Gift Recipient", + "directGiftRecipient": "This donation supports", + "recipientName": "Recipient Name", + "recipientNameRequired": "Recipient Name is required", + "removeRecipient": "Remove", + "giftMessage": "Gift Message", + "firstNameRequired": "First Name field is required", + "lastNameRequired": "Last Name field is required", + "emailRequired": "Email is required", + "addressRequired": "Address is required", + "cityRequired": "City is required", + "countryRequired": "Country is required", + "companyRequired": "Company Name is required", + "paymentDetails": "Payment Details", + "validationFailed": "Validation Failed", + "seedingYourDonation": "Seeding your donation", + "pleaseDoNotCloseThisTab": "Please do not close this tab!", + "perTree": "per tree", + "stopTalkingStartPlanting": "Stop talking. Start planting.", + "creditDebitCard": "Credit/Debit Card", + "cardNumber": "Card Number", + "expDate": "Exp. Date (MM/YY)", + "selectCurrency": "Select your Currency", + "treeDonationWithPFP": "Tree donation with Plant-for-the-Planet", + "unavailable": "unavailable", + "donationSuccessfulWith": "Your {{currency}} {{totalAmount}} donation was successfully paid with {{paymentTypeUsed}}.", + "donationSuccessful": "Your {{currency}} {{totalAmount}} donation was successful.", + "giftSentMessage": "We've sent an email to {{recipientName}} about the gift.", + "contributionMessage": "Maybe you'll visit them some day? In the mean time, maybe hook up your friends with some trees of their own by telling them about yours?", + "plantTreesAtURL": "Plant trees at {{url}}", + "copiedToClipboard": "Text Copied to Clipboard!", + "noProjectsFound": "No projects found", + "inTimeOfTaxReturns": "in time for tax returns.", + "titleToShare": "Planting trees against the climate crisis!", + "giftToName": "Gift to", + "thisDonationSupports": "This donation supports", + "plantTreesWith": "Plant trees with", + "textToShare": "Join {{name}} and thousand of others to plant a trillion trees to tackle the climate crisis #StopTalkingStartPlanting #TrillionTrees @trilliontrees", + "thankyouHeaderText": "We're on the road to a \n

Trillion Trees

", + "shareTextTitle": "Stop Talking. Start Plant", + "textToShareLinkedin": "Join {{name}} and thousand of others to plant a trillion trees to tackle the climate crisis", + "textToShareForMe": "Join me and thousand of others to plant a trillion trees to tackle the climate crisis", + "donationTokenInvalid": "The provided donation token is invalid.", + "giftTo": "Gift to", + "supporting": "Supporting", + "selectProject": "Select a project", + "giftValidation": "Please enter gift details", + "minDonate": "Minimum donation amount is", + "noPaymentMethodError": "Could not process your payment, please try again.", + "somethingWentWrong": "Something went wrong please try again soon!", + "underMaintenance": "App is undergoing maintenance, please check status.plant-for-the-planet.org for details", + "waitingConfirmation": "We are currently waiting a confirmation from your bank and will send you an email shortly. Please feel free to close this page.", + "yourDonationRef": "Your donation ref is {{donationID}}", + "payWithGiroPay": "Donate with GiroPay", + "payWithSofort": "Donate with SOFORT", + "donationFailed": "Donation Failed", + "donationFailedMessage": "Something went wrong while completing your payment. If you continue having issues please reach out to us at support@plant-for-the-planet.org", + "donationPending": "Completing your donation", + "donationPendingMessage": "We are currently waiting for the confirmation from your bank. This might take some time so, please feel free to close this page. We’ll send your receipt via email shortly.", + "sepaMessage": "By providing your IBAN and confirming this payment, you authorize Plant-for-the-Planet and Stripe, our payment service provider, to send instructions to your bank to debit your account. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. If you have any issues regarding your donation, please send us an email to support@plant-for-the-planet.org", + "donationRef": "Donation Ref", + "sepaDisclaimer": "SEPA payments take 2-14 business days (usually 3-5 days). As soon as it arrives we send you a confirmation email with your tree certificate and raise the tree counter.", + "sofortDisclaimer": "SOFORT payments take 2-14 business days (usually 2-3 days). As soon as it arrives we send you a confirmation email with your tree certificate and raise the tree counter.", + "askPublishName": "Show my full name in the Plant-for-the-Planet app & leaderboards.", + "nameAlreadyPublished": "Your full name will appear in leaderboard as your Plant-for-the-Planet profile is currently public.", + "orgNamePublishedTax": "Company name is visible on our leaderboard and app. Tax-deduction receipts will be issued for the same name.", + "orgNamePublished": "Company name is visible on our leaderboard and app.", + "aboutProject": "About Project", + "acceptingDonations": "Accepting Donations", + "natural-regeneration": "Natural Regeneration", + "managed-regeneration": "Managed Regeneration", + "large-scale-planting": "Large Scale Restoration", + "agroforestry": "Agroforestry", + "urban-planting": "Urban Restoration", + "other-planting": "Restoration", + "mangroves": "Mangroves", + "purpose": "Purpose", + "projectPurpose": "Project Purpose", + "type": "Type", + "projectType": "Project Type", + "restoration": "Restoration", + "filters": "Filters", + "perM2": "per m²" + } } diff --git a/public/static/locales/en/manageProjects.json b/public/static/locales/en/manageProjects.json index 8c33f60d3d..a28cc21624 100644 --- a/public/static/locales/en/manageProjects.json +++ b/public/static/locales/en/manageProjects.json @@ -1,246 +1,248 @@ { - "basicDetails": "Basic Details", - "projectMedia": "Project Media", - "detailedAnalysis": "Detailed Analysis", - "projectSites": "Project Sites", - "projectSpending": "Project Spending", - "protectionStartedIN": "Protection started in", - "review": "Review", - "name": "Project Name", - "nameValidation": "Please enter Project Name", - "slug": "Project URL", - "slugValidation": "Please enter Project URL", - "classification": "Project Type", - "classificationValidation": "Please select Project type", - "countTarget": "Target", - "countTargetValidation": "Please enter target", - "countTargetValidation2": "Target should be more than 1", - "conservationImpacts": "Conservation Impacts", - "website": "Website", - "websiteValidationRequired": "Please enter website URL", - "websiteValidationInvalid": "Invalid website URL", - "aboutProject": "About Project", - "aboutProjectValidation": "Please enter About project", - "receiveDonations": "Receive Donations", - "receiveDonationsInfo": "Please activate once the project profile is complete. Plant-for-the-Planet will then review the profile and inform you if you are eligible to receive donation through this platform. This may take a few weeks.", - "unitCost": "Cost per unit (in EUR)", - "unitCostRequired": "Please enter cost per unit", - "invalidUnitCost": "Cost per unit should be more than €0 and less than €100", - "exit": "Exit to Projects", - "projectLocation": "Project Location", - "visitorAssistanceLabel": "I will provide lodging, site access and local transport if a reviewer is sent by Plant-for-the-Planet.", - "publishProject": "Publish Project", - "saveAndContinue": "Save & Continue", - "skip": "Skip", - "youtubeURL": "Youtube Video Link", - "youtubeURLValidation": "Invalid Youtube Video Link", - "addCaption": "Add Caption", - "yearOfAbandonment": "Approx. year of Abandonment", - "labelRestorationStarted": "Restoration Started", - "plantingDensity": "Planting Density", - "maxPlantingDensity": "Max Planting Density", - "employeeCount": "Employee Count", - "endangeredSpeciesValidation": "Not a Valid Input", - "endangeredSpecies": "Endangered Species", - "mainChallenge": "Main Challenge", - "whyThisSite": "Why this site?", - "siteOwner": "Site Owner", - "ownerName": "Owner Name", - "acquisitionDate": "Acquisition Date", - "yearOfDegradation": "Year of Degradation", - "causeOfDegradation": "Cause of Degradation", - "longTermPlan": "Long term plan for site", - "isCertified": "This project has been certified", - "certifierName": "Certifier Name", - "siteName": "Site Name", - "spendingYear": "Year", - "spendingAmount": "Spending (in EUR)", - "resetMessage": "Please fill the Basic Details first", - "uploadPhotos": "Upload Photos", - "dragIn": "or drag them in", - "backToBasic": "Back to Basic Details", - "projectNotFound": "Project Not Found", - "siteOwnerPrivate": "Private", - "siteOwnerPublic": "Public Property", - "siteOwnerSmallHolding": "Small Holding", - "siteOwnerCommunal": "Communal Land", - "siteOwnerOwned": "Owned by Owner", - "siteOwnerOther": "Other", - "yearAbandonedInfo": "When was the last significant human intervention in the site? Incl. logging, agriculture, cattle grazing, human induced burning.", - "treePerHa": "trees per ha", - "employeesCountInfo": "Equivalent of a 40 hour week. I.e. two half time employees count as one.", - "labelRestorationSeasons": "Restoration Seasons", - "labelMainInterventions": "Main Interventions", - "interventionTypes": { - "assisting-seed-rain": "Assisting Seed Rain", - "control-remove-livestock": "Control/Remove Livestock", - "cut-suppressing-grass": "Cut/Suppressing Grass", - "direct-seeding": "Direct Seeding", - "enrichment-planting": "Enrichment Planting", - "establish-firebreaks": "Establish Firebreaks", - "fire-patrols": "Fire Patrols", - "fire-suppression-team": "Fire Suppression Team", - "liberating-regenerants": "Liberating Regenerants", - "maintenance": "Maintenance", - "marking-regenerants": "Marking Regenerants", - "other-interventions": "Other Interventions", - "planting-trees": "Planting Trees", - "removal-contaminated-soil": "Removal of Contaminated Soil", - "removal-invasive-species": "Removal of Invasive Species", - "soil-improvement": "Soil Improvement", - "stop-tree-harvesting": "Stop Tree Harvesting" - }, - "missingInterventionsError": "Please select at least one intervention", - "timePeriod": "Time Period", - "max300Chars": "Maximum 300 characters allowed", - "longTermPlanInfo": "What measures are in place to project the forest in the long term? How is this funded? What resources will be extracted from the site?", - "backToMedia": "Back to Project Media", - "siteStatusPlanting": "Planting", - "siteStatusPlanted": "Planted", - "siteStatusBarren": "Barren", - "siteStatusReforestation": "Reforestation", - "siteStatusNotYetprotected": "Not Yet protected", - "siteStatusPartiallyprotected": "Partially protected", - "siteStatusFullyprotected": "Fully protected", - "siteStatus": "Site Status", - "selectProjectStatus": "Please select Site Status", - "saveAndAddSite": "Save & Add another site", - "addSite": "Add another site", - "backToAnalysis": "Back to Detailed Analysis", - "spendingYearValidation": "Please add Spending Year", - "spendingAmountValidation": "Please enter the Amount Spent", - "uploadReport": "Upload and save report", - "dragInPdf": "or drag in a pdf", - "addAnotherYear": "Add another year", - "backToSites": "Back to Project Sites", - "certifiedBy": "Certified By", - "certificationDateValidation": "Please add Certification date", - "uploadCertificate": "Upload Certificate", - "addCertificate": "Add another Certification", - "dropGeoJson": "Drop .geojson or .kml", - "projectUnderReview": "Your project is under review, kindly wait.", - "projectForReview": "You can now submit the project for review.", - "backToSpending": "Back to Project Spending", - "pendingReview": "Pending Review", - "submitForReview": "Submit for Review", - "addProject": "Add Project", - "addNewProject": "Add New Project", - "conservationProject": "Conservation Project", - "abandonment": "Abandonment", - "survivalRate": "Survival rate", - "survivalRateInfo": "Percentage of trees that survive the first year of plantation", - "employees": "Employees", - "siteOwnership": "Site ownership", - "longTermProtection": "Long Term Protection", - "externalCertifications": "External Certifications", - "projectSpendingFinancial": "Financial Project Spendings", - "issueDate": "Date issued", - "acquisitionYear": "Acquisition Year", - "largeScalePlanting": "Large Scale Planting", - "agroforestry": "Agroforestry", - "naturalRegeneration": "Natural Regeneration", - "managedRegeneration": "Managed Regeneration", - "urbanPlanting": "Urban Planting", - "otherPlanting": "Other Planting", - "projectType": "Project Type", - "protectionSeasons": "Protection Seasons", - "polygonRequired": "Polygon is required", - "fileSizeLimit": "File is larger than 10 mb", - "fileImageOnly": "File type must be image", - "filePDFOnly": "File type must be PDF", - "acceptedReview": "Changes to your project are Live", - "deniedReview": "Your review is denied", - "saveSite": "Save Site", - "latitude": "Latitude", - "longitude": "Longitude", - "latitudeRequired": "Latitude is required", - "longitudeRequired": "Longitude is required", - "manageProject": "Manage Projects", - "descriptionForManageProjects": "Showcase your restoration work for monitoring and to receive donations.", - "manageProjects": "Manage Projects", - "addConservationProjects": "Add Conservation Projects", - "areaProtected": "Area Protected (in ha)", - "areaProtectedInfo": "To enter decimals, please separate them using a “ . ”", - "ecosystem": "Ecosystem", - "protectionStartedIn": "Protection Started in", - "actions": "Actions", - "activitySeasons": "Activity Seasons", - "addAnotherSpecies": "Add Another Species", - "add": "Add", - "forestProtectionType": "Forest Protection Type/Measures", - "ecologicalBenefits": "Ecological Benefits", - "socialBenefits": "Social Benefits", - "coBenefits": "Co-Benefits", - "benefits": "Benefits", - "tropicalMoistForest": "Tropical Moist Forest", - "dry": "Dry", - "ecosystemType": "Please Select Ecosystem Type", - "tropicalDryForests": "Tropical Dry Forests", - "tropicalConiferousForests": "Tropical Coniferous Forests", - "tropicalGrasslandsForests": "Tropical Grasslands Forests", - "temperateBroadleafForests": "Temperate Broadleaf Forests", - "temperate-coniferous-forests": "Temperate Coniferous Forests", - "temperateGrasslandsForests": "Temperate Grasslands Forests", - "mediterraneanForests": "Mediterranean Forests", - "mangroves": "Mangroves", - "deserts": "Deserts", - "floodedGrasslands": "Flooded Grasslands", - "montaneGrasslands": "Montane Grassland", - "borealForests": "Boreal Forests", - "tundra": "Tundra", - "temperateConiferousForests": "Temperate Coniferous Forests", - "ecosystemTypes": { - "tropical-moist-forests": "Tropical Moist Forests", - "tropical-dry-forests": "Tropical Dry Forests", - "tropical-coniferous-forests": "Tropical Coniferous Forests", - "tropical-grasslands-forests": "Tropical Grasslands Forests", - "temperate-broadleaf-forests": "Temperate Broadleaf Forests", + "ManageProjects": { + "basicDetails": "Basic Details", + "projectMedia": "Project Media", + "detailedAnalysis": "Detailed Analysis", + "projectSites": "Project Sites", + "projectSpending": "Project Spending", + "protectionStartedIN": "Protection started in", + "review": "Review", + "name": "Project Name", + "nameValidation": "Please enter Project Name", + "slug": "Project URL", + "slugValidation": "Please enter Project URL", + "classification": "Project Type", + "classificationValidation": "Please select Project type", + "countTarget": "Target", + "countTargetValidation": "Please enter target", + "countTargetValidation2": "Target should be more than 1", + "conservationImpacts": "Conservation Impacts", + "website": "Website", + "websiteValidationRequired": "Please enter website URL", + "websiteValidationInvalid": "Invalid website URL", + "aboutProject": "About Project", + "aboutProjectValidation": "Please enter About project", + "receiveDonations": "Receive Donations", + "receiveDonationsInfo": "Please activate once the project profile is complete. Plant-for-the-Planet will then review the profile and inform you if you are eligible to receive donation through this platform. This may take a few weeks.", + "unitCost": "Cost per unit (in EUR)", + "unitCostRequired": "Please enter cost per unit", + "invalidUnitCost": "Cost per unit should be more than €0 and less than €100", + "exit": "Exit to Projects", + "projectLocation": "Project Location", + "visitorAssistanceLabel": "I will provide lodging, site access and local transport if a reviewer is sent by Plant-for-the-Planet.", + "publishProject": "Publish Project", + "saveAndContinue": "Save & Continue", + "skip": "Skip", + "youtubeURL": "Youtube Video Link", + "youtubeURLValidation": "Invalid Youtube Video Link", + "addCaption": "Add Caption", + "yearOfAbandonment": "Approx. year of Abandonment", + "labelRestorationStarted": "Restoration Started", + "plantingDensity": "Planting Density", + "maxPlantingDensity": "Max Planting Density", + "employeeCount": "Employee Count", + "endangeredSpeciesValidation": "Not a Valid Input", + "endangeredSpecies": "Endangered Species", + "mainChallenge": "Main Challenge", + "whyThisSite": "Why this site?", + "siteOwner": "Site Owner", + "ownerName": "Owner Name", + "acquisitionDate": "Acquisition Date", + "yearOfDegradation": "Year of Degradation", + "causeOfDegradation": "Cause of Degradation", + "longTermPlan": "Long term plan for site", + "isCertified": "This project has been certified", + "certifierName": "Certifier Name", + "siteName": "Site Name", + "spendingYear": "Year", + "spendingAmount": "Spending (in EUR)", + "resetMessage": "Please fill the Basic Details first", + "uploadPhotos": "Upload Photos", + "dragIn": "or drag them in", + "backToBasic": "Back to Basic Details", + "projectNotFound": "Project Not Found", + "siteOwnerPrivate": "Private", + "siteOwnerPublic": "Public Property", + "siteOwnerSmallHolding": "Small Holding", + "siteOwnerCommunal": "Communal Land", + "siteOwnerOwned": "Owned by Owner", + "siteOwnerOther": "Other", + "yearAbandonedInfo": "When was the last significant human intervention in the site? Incl. logging, agriculture, cattle grazing, human induced burning.", + "treePerHa": "trees per ha", + "employeesCountInfo": "Equivalent of a 40 hour week. I.e. two half time employees count as one.", + "labelRestorationSeasons": "Restoration Seasons", + "labelMainInterventions": "Main Interventions", + "interventionTypes": { + "assisting-seed-rain": "Assisting Seed Rain", + "control-remove-livestock": "Control/Remove Livestock", + "cut-suppressing-grass": "Cut/Suppressing Grass", + "direct-seeding": "Direct Seeding", + "enrichment-planting": "Enrichment Planting", + "establish-firebreaks": "Establish Firebreaks", + "fire-patrols": "Fire Patrols", + "fire-suppression-team": "Fire Suppression Team", + "liberating-regenerants": "Liberating Regenerants", + "maintenance": "Maintenance", + "marking-regenerants": "Marking Regenerants", + "other-interventions": "Other Interventions", + "planting-trees": "Planting Trees", + "removal-contaminated-soil": "Removal of Contaminated Soil", + "removal-invasive-species": "Removal of Invasive Species", + "soil-improvement": "Soil Improvement", + "stop-tree-harvesting": "Stop Tree Harvesting" + }, + "missingInterventionsError": "Please select at least one intervention", + "timePeriod": "Time Period", + "max300Chars": "Maximum 300 characters allowed", + "longTermPlanInfo": "What measures are in place to project the forest in the long term? How is this funded? What resources will be extracted from the site?", + "backToMedia": "Back to Project Media", + "siteStatusPlanting": "Planting", + "siteStatusPlanted": "Planted", + "siteStatusBarren": "Barren", + "siteStatusReforestation": "Reforestation", + "siteStatusNotYetprotected": "Not Yet protected", + "siteStatusPartiallyprotected": "Partially protected", + "siteStatusFullyprotected": "Fully protected", + "siteStatus": "Site Status", + "selectProjectStatus": "Please select Site Status", + "saveAndAddSite": "Save & Add another site", + "addSite": "Add another site", + "backToAnalysis": "Back to Detailed Analysis", + "spendingYearValidation": "Please add Spending Year", + "spendingAmountValidation": "Please enter the Amount Spent", + "uploadReport": "Upload and save report", + "dragInPdf": "or drag in a pdf", + "addAnotherYear": "Add another year", + "backToSites": "Back to Project Sites", + "certifiedBy": "Certified By", + "certificationDateValidation": "Please add Certification date", + "uploadCertificate": "Upload Certificate", + "addCertificate": "Add another Certification", + "dropGeoJson": "Drop .geojson or .kml", + "projectUnderReview": "Your project is under review, kindly wait.", + "projectForReview": "You can now submit the project for review.", + "backToSpending": "Back to Project Spending", + "pendingReview": "Pending Review", + "submitForReview": "Submit for Review", + "addProject": "Add Project", + "addNewProject": "Add New Project", + "conservationProject": "Conservation Project", + "abandonment": "Abandonment", + "survivalRate": "Survival rate", + "survivalRateInfo": "Percentage of trees that survive the first year of plantation", + "employees": "Employees", + "siteOwnership": "Site ownership", + "longTermProtection": "Long Term Protection", + "externalCertifications": "External Certifications", + "projectSpendingFinancial": "Financial Project Spendings", + "issueDate": "Date issued", + "acquisitionYear": "Acquisition Year", + "largeScalePlanting": "Large Scale Planting", + "agroforestry": "Agroforestry", + "naturalRegeneration": "Natural Regeneration", + "managedRegeneration": "Managed Regeneration", + "urbanPlanting": "Urban Planting", + "otherPlanting": "Other Planting", + "projectType": "Project Type", + "protectionSeasons": "Protection Seasons", + "polygonRequired": "Polygon is required", + "fileSizeLimit": "File is larger than 10 mb", + "fileImageOnly": "File type must be image", + "filePDFOnly": "File type must be PDF", + "acceptedReview": "Changes to your project are Live", + "deniedReview": "Your review is denied", + "saveSite": "Save Site", + "latitude": "Latitude", + "longitude": "Longitude", + "latitudeRequired": "Latitude is required", + "longitudeRequired": "Longitude is required", + "manageProject": "Manage Projects", + "descriptionForManageProjects": "Showcase your restoration work for monitoring and to receive donations.", + "manageProjects": "Manage Projects", + "addConservationProjects": "Add Conservation Projects", + "areaProtected": "Area Protected (in ha)", + "areaProtectedInfo": "To enter decimals, please separate them using a “ . ”", + "ecosystem": "Ecosystem", + "protectionStartedIn": "Protection Started in", + "actions": "Actions", + "activitySeasons": "Activity Seasons", + "addAnotherSpecies": "Add Another Species", + "add": "Add", + "forestProtectionType": "Forest Protection Type/Measures", + "ecologicalBenefits": "Ecological Benefits", + "socialBenefits": "Social Benefits", + "coBenefits": "Co-Benefits", + "benefits": "Benefits", + "tropicalMoistForest": "Tropical Moist Forest", + "dry": "Dry", + "ecosystemType": "Please Select Ecosystem Type", + "tropicalDryForests": "Tropical Dry Forests", + "tropicalConiferousForests": "Tropical Coniferous Forests", + "tropicalGrasslandsForests": "Tropical Grasslands Forests", + "temperateBroadleafForests": "Temperate Broadleaf Forests", "temperate-coniferous-forests": "Temperate Coniferous Forests", - "temperate-grasslands-forests": "Temperate Grassland Forests", - "mediterranean-forests": "Mediterranean Forests", + "temperateGrasslandsForests": "Temperate Grasslands Forests", + "mediterraneanForests": "Mediterranean Forests", "mangroves": "Mangroves", "deserts": "Deserts", - "flooded-grasslands": "Flooded Grasslands", - "montane-grasslands": "Montane Grasslands", - "boreal-forests": "Boreal Forests", - "tundra": "Tundra" - }, - "unitTypeRequired": "Please select a unit type", - "unitType": "Unit Type", - "unitTypes": { - "tree": "tree", - "m2": "m²" - }, - "tenure": "Tenure", - "rent": "Rent", - "ownershipType": "Ownership Type", - "landOwnershipType": "Land Ownership Type", - "restorationProject": "Restoration Project", - "addProjetDescription": "You're few steps away from showcasing your work on the Plant-for-the-planet platform.", - "englishOnly": " Please create projects in English only.", - "important": "Important:", - "addProjetContact": "If you need any help contact us at ", - "supportLink": "support@plant-for-the-planet.org", - "wrongCoordinates": "Wrong Coordinates", - "actionInfo": "The actions your organization is taking to conserve the ecosystem.", - "mainChallengeInfo": "The biggest challenge this project is facing.", - "motivationInfo": "The motivation behind protecting this specific ecosystem.", - "hectar": "hectar", - "validation": "{{fieldName}} is Invalid", - "date": "Date", - "plantingDensityValidation": "Please enter Planting Density", - "maxPlantingDensityValidation": "please enter Maximum Planting Density", - "onlyEnglish": "Please create/edit projects in English only. Translations of Projects are managed automatically by Plant-for-the-Planet.", - "since": "since", - "Since": "Since", - "and": "and", - "errorForMaxPlantingDensity": "This value should be greater than planting density", - "managePayoutsButton": "Manage Payouts", - "siteNameValidation": "Please enter a site name", - "reviewNote": "Important Note : Plant-for-the-Planet will review and validate your data. To continue with the onboarding and verification process, and to approve your project for donations, several Documents must be provided:", - "legalAccreditation": "Legal accreditation (Registration certificate/ registration number) showcasing the charitable/ non-profit status of your organization – not older than 2 years!", - "taxExemption": "Tax exemption documentation (if applicable in your country)", - "annualReport": "Latest annual report", - "financialReport": "Latest audited financial report", - "PlantingReport": "Project Progress Report" -} \ No newline at end of file + "floodedGrasslands": "Flooded Grasslands", + "montaneGrasslands": "Montane Grassland", + "borealForests": "Boreal Forests", + "tundra": "Tundra", + "temperateConiferousForests": "Temperate Coniferous Forests", + "ecosystemTypes": { + "tropical-moist-forests": "Tropical Moist Forests", + "tropical-dry-forests": "Tropical Dry Forests", + "tropical-coniferous-forests": "Tropical Coniferous Forests", + "tropical-grasslands-forests": "Tropical Grasslands Forests", + "temperate-broadleaf-forests": "Temperate Broadleaf Forests", + "temperate-coniferous-forests": "Temperate Coniferous Forests", + "temperate-grasslands-forests": "Temperate Grassland Forests", + "mediterranean-forests": "Mediterranean Forests", + "mangroves": "Mangroves", + "deserts": "Deserts", + "flooded-grasslands": "Flooded Grasslands", + "montane-grasslands": "Montane Grasslands", + "boreal-forests": "Boreal Forests", + "tundra": "Tundra" + }, + "unitTypeRequired": "Please select a unit type", + "unitType": "Unit Type", + "unitTypes": { + "tree": "tree", + "m2": "m²" + }, + "tenure": "Tenure", + "rent": "Rent", + "ownershipType": "Ownership Type", + "landOwnershipType": "Land Ownership Type", + "restorationProject": "Restoration Project", + "addProjetDescription": "You're few steps away from showcasing your work on the Plant-for-the-planet platform.", + "englishOnly": " Please create projects in English only.", + "important": "Important:", + "addProjetContact": "If you need any help contact us at ", + "supportLink": "support@plant-for-the-planet.org", + "wrongCoordinates": "Wrong Coordinates", + "actionInfo": "The actions your organization is taking to conserve the ecosystem.", + "mainChallengeInfo": "The biggest challenge this project is facing.", + "motivationInfo": "The motivation behind protecting this specific ecosystem.", + "hectar": "hectar", + "validation": "{{fieldName}} is Invalid", + "date": "Date", + "plantingDensityValidation": "Please enter Planting Density", + "maxPlantingDensityValidation": "please enter Maximum Planting Density", + "onlyEnglish": "Please create/edit projects in English only. Translations of Projects are managed automatically by Plant-for-the-Planet.", + "since": "since", + "Since": "Since", + "and": "and", + "errorForMaxPlantingDensity": "This value should be greater than planting density", + "managePayoutsButton": "Manage Payouts", + "siteNameValidation": "Please enter a site name", + "reviewNote": "Important Note : Plant-for-the-Planet will review and validate your data. To continue with the onboarding and verification process, and to approve your project for donations, several Documents must be provided:", + "legalAccreditation": "Legal accreditation (Registration certificate/ registration number) showcasing the charitable/ non-profit status of your organization – not older than 2 years!", + "taxExemption": "Tax exemption documentation (if applicable in your country)", + "annualReport": "Latest annual report", + "financialReport": "Latest audited financial report", + "PlantingReport": "Project Progress Report" + } +} diff --git a/public/static/locales/en/maps.json b/public/static/locales/en/maps.json index 53499763ab..48a044ad9a 100644 --- a/public/static/locales/en/maps.json +++ b/public/static/locales/en/maps.json @@ -1,50 +1,52 @@ { - "explore": "Explore", - "forests": "Current Forests", - "restoration": "Restoration Potential", - "deforestation": "Deforestation", - "planted": "Planted", - "projects": "Projects", - "3trilliontrees": "The world has about 3 trillion trees today (“Forests”). And space for up to a trillion more (“Reforestation Potential”).", - "high": "High", - "low": "Low", - "forestInfo": "3.04 trillion trees currently exist globally. Down from six trillion trees before humans started cutting down forests about 11,000 years ago.", - "restorationInfo": " Half a billion hectares are suitable for wide-scale restoration of closed forests. Further one and a half billion hectares are best sited for mosaic restoration, which combines forests with other land uses like agroforestry, smallholder agriculture, and settlements.", - "location": "Location", - "timeTravel": "Time Travel", - "vegetationChange": "Vegetation Change", - "beta": "BETA", - "baseLayer": "Base Layer & Vector Maps", - "satelliteImagery": "Satellite Imagery", - "fieldData": "Field Data", - "trees": "Trees", - "ha": "ha", - "plantingDate": "Planting Date", - "plantingDensity": "Planting Density", - "speciesPlanted": "Species Planted", - "sampleTrees": "Sample Trees", - "meterHigh": "m high", - "cmWide": "cm wide", - "treesPerHa": "trees per ha", - "sampleTree": "Sample Tree", - "scientificName": "Scientific Name", - "measurements": "Measurements", - "treeTag": "Tree Tag", - "1Tree": "1 Tree", - "plot": "Plot", - "tag": "Tag", - "plantingDensityInfo": "In case of enrichment planting density can be lower.", - "plantationDensityFormula": "Planting Density = No. of Trees / Planting Area", - "unknown": "Unknown", - "showWholeArea": "Show Whole Area", - "daysAgo": "{{days}} days ago", - "today": "Today", - "yesterday": "Yesterday", - "clickForDetails": "Click for Details", - "treeMapper": "TreeMapper", - "showProjectList": "Show Project List", - "showProjectDetails": "Show Project Details", - "hideProjectList": "Hide Project List", - "hideProjectDetails": "Hide Project Details", - "countries": "Countries" -} \ No newline at end of file + "Maps": { + "explore": "Explore", + "forests": "Current Forests", + "restoration": "Restoration Potential", + "deforestation": "Deforestation", + "planted": "Planted", + "projects": "Projects", + "3trilliontrees": "The world has about 3 trillion trees today (“Forests”). And space for up to a trillion more (“Reforestation Potential”).", + "high": "High", + "low": "Low", + "forestInfo": "3.04 trillion trees currently exist globally. Down from six trillion trees before humans started cutting down forests about 11,000 years ago.", + "restorationInfo": " Half a billion hectares are suitable for wide-scale restoration of closed forests. Further one and a half billion hectares are best sited for mosaic restoration, which combines forests with other land uses like agroforestry, smallholder agriculture, and settlements.", + "location": "Location", + "timeTravel": "Time Travel", + "vegetationChange": "Vegetation Change", + "beta": "BETA", + "baseLayer": "Base Layer & Vector Maps", + "satelliteImagery": "Satellite Imagery", + "fieldData": "Field Data", + "trees": "Trees", + "ha": "ha", + "plantingDate": "Planting Date", + "plantingDensity": "Planting Density", + "speciesPlanted": "Species Planted", + "sampleTrees": "Sample Trees", + "meterHigh": "m high", + "cmWide": "cm wide", + "treesPerHa": "trees per ha", + "sampleTree": "Sample Tree", + "scientificName": "Scientific Name", + "measurements": "Measurements", + "treeTag": "Tree Tag", + "1Tree": "1 Tree", + "plot": "Plot", + "tag": "Tag", + "plantingDensityInfo": "In case of enrichment planting density can be lower.", + "plantationDensityFormula": "Planting Density = No. of Trees / Planting Area", + "unknown": "Unknown", + "showWholeArea": "Show Whole Area", + "daysAgo": "{{days}} days ago", + "today": "Today", + "yesterday": "Yesterday", + "clickForDetails": "Click for Details", + "treeMapper": "TreeMapper", + "showProjectList": "Show Project List", + "showProjectDetails": "Show Project Details", + "hideProjectList": "Hide Project List", + "hideProjectDetails": "Hide Project Details", + "countries": "Countries" + } +} diff --git a/src/features/common/Layout/Navbar/index.tsx b/src/features/common/Layout/Navbar/index.tsx index 6d2ba57e1f..985d90e109 100644 --- a/src/features/common/Layout/Navbar/index.tsx +++ b/src/features/common/Layout/Navbar/index.tsx @@ -1,7 +1,7 @@ import Link from 'next/link'; import { useRouter } from 'next/router'; import React, { useContext, useEffect, useState } from 'react'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import Me from '../../../../../public/assets/images/navigation/Me'; import MeSelected from '../../../../../public/assets/images/navigation/MeSelected'; import { ThemeContext } from '../../../../theme/themeContext'; @@ -28,7 +28,8 @@ const useWidth = () => { }; export default function NavbarComponent() { - const { t, ready, i18n } = useTranslation(['common']); + const t = useTranslations('Common'); + const locale = useLocale(); const router = useRouter(); const subMenuPath = { overview: '', @@ -170,8 +171,8 @@ export default function NavbarComponent() { } > {user && SingleLink.loggedInTitle - ? t('common:' + SingleLink.loggedInTitle) - : t('common:' + SingleLink.title)} + ? t(SingleLink.loggedInTitle) + : t(SingleLink.title)}

); @@ -181,8 +182,8 @@ export default function NavbarComponent() { let aboutOnclick = `${SingleLink.onclick}${ (tenantConfig.config.slug === 'planet' || tenantConfig.config.slug === 'ttc') && - lang_path[i18n.language as keyof typeof lang_path] - ? lang_path[i18n.language as keyof typeof lang_path] + lang_path[locale as keyof typeof lang_path] + ? lang_path[locale as keyof typeof lang_path] : '' }`; @@ -226,7 +227,7 @@ export default function NavbarComponent() { : '' } > - {t('common:' + SingleLink.title)} + {t(SingleLink.title)}

) : (

- {t('common:' + SingleLink.title)} + {t(SingleLink.title)}

)}
@@ -250,10 +251,8 @@ export default function NavbarComponent() { key={submenu.title} className={'menuRow'} href={`https://a.plant-for-the-planet.org/${ - lang_path[i18n.language as keyof typeof lang_path] - ? lang_path[ - i18n.language as keyof typeof lang_path - ] + lang_path[locale as keyof typeof lang_path] + ? lang_path[locale as keyof typeof lang_path] : 'en' }/${ subMenuPath[ @@ -269,9 +268,7 @@ export default function NavbarComponent() { }} > -
- {t('common:' + submenu.title)} -
+
{t(submenu.title)}
); @@ -338,7 +335,7 @@ export default function NavbarComponent() { {t('common:about_pftp')} ) : ( @@ -346,12 +343,12 @@ export default function NavbarComponent() { {t('common:about_pftp')} )} - {ready && } + diff --git a/src/features/donations/components/DirectGift.tsx b/src/features/donations/components/DirectGift.tsx index dd1036d63d..771b25f320 100644 --- a/src/features/donations/components/DirectGift.tsx +++ b/src/features/donations/components/DirectGift.tsx @@ -1,7 +1,7 @@ import React from 'react'; import styles from '../styles/DirectGift.module.scss'; import CancelIcon from '../../../../public/assets/images/icons/CancelIcon'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { useRouter } from 'next/router'; import { SetState } from '../../common/types/common'; @@ -18,20 +18,20 @@ interface Props { export default function DirectGift({ directGift, setShowDirectGift }: Props) { const router = useRouter(); - const { t, ready } = useTranslation(['donate', 'common']); + const t = useTranslations('Donate'); const handleProfileRedirect = () => { router.push('/t/[id]', `/t/${directGift.id}`); }; - return ready ? ( + return (
{directGift.type === 'individual' - ? t('donate:giftToName') - : t('donate:plantTreesWith')}{' '} + ? t('giftToName') + : t('plantTreesWith')}{' '} {directGift.displayName}
-
{t('donate:selectProject')}
+
{t('selectProject')}
- ) : null; + ); } diff --git a/src/features/projects/components/PopupProject.tsx b/src/features/projects/components/PopupProject.tsx index 0a0d05a8c2..3bde56647e 100644 --- a/src/features/projects/components/PopupProject.tsx +++ b/src/features/projects/components/PopupProject.tsx @@ -1,6 +1,6 @@ import React, { ReactElement, RefObject } from 'react'; import getImageUrl from '../../../utils/getImageURL'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import getFormatedCurrency from '../../../utils/countryCurrency/getFormattedCurrency'; import { localizedAbbreviatedNumber } from '../../../utils/getFormattedNumber'; import { truncateString } from '../../../utils/getTruncatedString'; @@ -32,7 +32,11 @@ export default function PopupProject({ project, buttonRef, }: Props): ReactElement { - const { t, i18n, ready } = useTranslation(['donate', 'common', 'country']); + const tDonate = useTranslations('Donate'); + const tCommon = useTranslations('Common'); + const tCountry = useTranslations('Country'); + const tManageProjects = useTranslations('ManageProjects'); + const locale = useLocale(); const { token } = useUserProps(); const { embed } = React.useContext(ParamsContext); const { tenantConfig } = useTenant(); @@ -72,7 +76,7 @@ export default function PopupProject({ popupId: 'popupProjectInfoPopover', }); - return ready ? ( + return (
{project.image && typeof project.image !== 'undefined' ? ( @@ -101,14 +105,13 @@ export default function PopupProject({
{project.ecosystem !== null && (
- {t(`manageProjects:ecosystemTypes.${project.ecosystem}`)} + {tManageProjects(`ecosystemTypes.${project.ecosystem}`)} {project.purpose === 'trees' && ' /'}
)} {project.purpose === 'trees' && (
- {project.classification && - t(`donate:${project.classification}`)} + {project.classification && tDonate(project.classification)}
)}
@@ -141,20 +144,20 @@ export default function PopupProject({ {project.purpose === 'trees' && project.countPlanted > 0 && ( <> {localizedAbbreviatedNumber( - i18n.language, + locale, Number(project.countPlanted), 1 )}{' '} {project.unitType === 'tree' - ? t('common:tree', { + ? tCommon('tree', { count: Number(project.countPlanted), }) - : t('common:m2')}{' '} + : tCommon('m2')}{' '} •{' '} )} - {t('country:' + project.country.toLowerCase())} + {tCountry(project.country.toLowerCase())}
@@ -180,22 +183,18 @@ export default function PopupProject({ >
{tenantConfig.config.slug === 'salesforce' - ? `${t('common:salesforceDisabledDonateButtonText')}` - : `${t('common:disabledDonateButtonText')}`} + ? `${tCommon('salesforceDisabledDonateButtonText')}` + : `${tCommon('disabledDonateButtonText')}`}
- {t('common:notDonatable')} + {tCommon('notDonatable')} ) : (
- {getFormatedCurrency( - i18n.language, - project.currency, - project.unitCost - )}{' '} + {getFormatedCurrency(locale, project.currency, project.unitCost)}{' '} - {project.unitType === 'tree' && t('donate:perTree')} - {project.unitType === 'm2' && t('donate:perM2')} + {project.unitType === 'tree' && tDonate('perTree')} + {project.unitType === 'm2' && tDonate('perM2')}
)} @@ -209,7 +208,7 @@ export default function PopupProject({ onClick={handleDonationOpen} className={`donateButton ${donateButtonBackgroundColor}`} > - {t('common:donate')} + {tCommon('donate')} ) : null} @@ -227,12 +226,10 @@ export default function PopupProject({ }`, }} > - {t('common:by', { + {tCommon('by', { tpoName: project.tpo.name, })} - ) : ( - <> ); } diff --git a/src/features/projects/components/ProjectSnippet.tsx b/src/features/projects/components/ProjectSnippet.tsx index 1501d4e680..d69d106c34 100644 --- a/src/features/projects/components/ProjectSnippet.tsx +++ b/src/features/projects/components/ProjectSnippet.tsx @@ -1,7 +1,7 @@ import React, { ReactElement } from 'react'; import getImageUrl from '../../../utils/getImageURL'; import { useRouter } from 'next/router'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import getFormatedCurrency from '../../../utils/countryCurrency/getFormattedCurrency'; import EditIcon from '../../../../public/assets/images/icons/manageProjects/Pencil'; import Link from 'next/link'; @@ -45,12 +45,11 @@ export default function ProjectSnippet({ displayPopup, }: Props): ReactElement { const router = useRouter(); - const { t, i18n, ready } = useTranslation([ - 'donate', - 'common', - 'country', - 'manageProjects', - ]); + const locale = useLocale(); + const tDonate = useTranslations('Donate'); + const tCommon = useTranslations('Common'); + const tCountry = useTranslations('Country'); + const tManageProjects = useTranslations('ManageProjects'); const { embed, callbackUrl } = React.useContext(ParamsContext); const ImageSource = project.image ? getImageUrl('project', 'medium', project.image) @@ -100,7 +99,7 @@ export default function ProjectSnippet({ ? 'topUnapproved' : 'notDonatable'; - return ready ? ( + return (
{editMode ? ( @@ -153,14 +152,14 @@ export default function ProjectSnippet({
{ecosystem !== null && (
- {t(`manageProjects:ecosystemTypes.${ecosystem}`)} + {tManageProjects(`ecosystemTypes.${ecosystem}`)} {project.purpose === 'trees' && ' /'}
)}
{project.purpose === 'trees' && project.classification && - t(`donate:${project.classification}`)} + tDonate(project.classification)}
@@ -186,20 +185,20 @@ export default function ProjectSnippet({ {project.purpose === 'trees' && project.countPlanted > 0 && ( <> {localizedAbbreviatedNumber( - i18n.language, + locale, Number(project.countPlanted), 1 )}{' '} {project.unitType === 'tree' - ? t('common:tree', { + ? tCommon('tree', { count: Number(project.countPlanted), }) - : t('common:m2')}{' '} + : tCommon('m2')}{' '} •{' '} )} - {t('country:' + project.country.toLowerCase())} + {tCountry(project.country.toLowerCase())} @@ -225,23 +224,19 @@ export default function ProjectSnippet({ >
{tenantConfig.config.slug === 'salesforce' - ? `${t('common:salesforceDisabledDonateButtonText')}` - : `${t('common:disabledDonateButtonText')}`} + ? `${tCommon('salesforceDisabledDonateButtonText')}` + : `${tCommon('disabledDonateButtonText')}`}
- {t('common:notDonatable')} + {tCommon('notDonatable')} ) : (
- {getFormatedCurrency( - i18n.language, - project.currency, - project.unitCost - )}{' '} + {getFormatedCurrency(locale, project.currency, project.unitCost)}{' '} {project.purpose === 'conservation' - ? t('donate:perM2') - : t('donate:perTree')} + ? tDonate('perM2') + : tDonate('perTree')}
)} @@ -255,7 +250,7 @@ export default function ProjectSnippet({ className={`donateButton ${donateButtonBackgroundColor}`} data-test-id="donateButton" > - {t('common:donate')} + {tCommon('donate')} )} @@ -277,12 +272,10 @@ export default function ProjectSnippet({ }`, }} > - {t('common:by', { + {tCommon('by', { tpoName: project.tpo.name, })} - ) : ( - <> ); } diff --git a/src/features/projects/components/ProjectsMap.tsx b/src/features/projects/components/ProjectsMap.tsx index dc63c82d5f..aa5a66f2d1 100644 --- a/src/features/projects/components/ProjectsMap.tsx +++ b/src/features/projects/components/ProjectsMap.tsx @@ -9,7 +9,7 @@ import { useProjectProps } from '../../common/Layout/ProjectPropsContext'; import PlantLocations from './maps/PlantLocations'; import LayerIcon from '../../../../public/assets/images/icons/LayerIcon'; import LayerDisabled from '../../../../public/assets/images/icons/LayerDisabled'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { ParamsContext } from '../../common/Layout/QueryParamsContext'; import { PopupData } from './maps/Markers'; @@ -47,7 +47,7 @@ export default function ProjectsMap(): ReactElement { setSamplePlantLocation, } = useProjectProps(); - const { t } = useTranslation(['maps']); + const t = useTranslations('Maps'); const { embed, showProjectList } = React.useContext(ParamsContext); //Map const _onStateChange = (state: any) => setMapState({ ...state }); diff --git a/src/features/projects/components/TopProjectBadge.tsx b/src/features/projects/components/TopProjectBadge.tsx index a909403554..a9adb87976 100644 --- a/src/features/projects/components/TopProjectBadge.tsx +++ b/src/features/projects/components/TopProjectBadge.tsx @@ -1,5 +1,4 @@ import { ReactElement } from 'react'; -import { Trans, useTranslation } from 'next-i18next'; import { bindPopover, usePopupState, @@ -8,6 +7,7 @@ import { import HoverPopover from 'material-ui-popup-state/HoverPopover'; import TopProjectIcon from '../../../../public/assets/images/icons/project/TopProjectIcon'; import themeProperties from '../../../theme/themeProperties'; +import { useTranslations } from 'next-intl'; interface Props { displayPopup: boolean; @@ -18,14 +18,14 @@ const TopProjectBadge = ({ displayPopup }: Props): ReactElement => { variant: 'popover', popupId: 'topProjectPopover', }); - const { t } = useTranslation('common'); + const t = useTranslations('Common'); return ( <>
-
{t('common:topProject')}
+
{t('topProject')}
{displayPopup && ( { }} >
- - The project inspection revealed that this project fulfilled at - least 12 of the 19 Top Project{' '} - e.stopPropagation()} - > - standards. - - + {t.rich('top_project_standards_fulfilled', { + standardsLink: (chunks) => ( + e.stopPropagation()} + > + {chunks} + + ), + })}
)} diff --git a/src/features/projects/components/maps/Credits.tsx b/src/features/projects/components/maps/Credits.tsx index 72f9e77c04..1e35e4d065 100644 --- a/src/features/projects/components/maps/Credits.tsx +++ b/src/features/projects/components/maps/Credits.tsx @@ -1,6 +1,6 @@ import React, { ReactElement } from 'react'; import styles from '../../styles/ProjectsMap.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import SelectLanguageAndCountry from '../../../common/Layout/Footer/SelectLanguageAndCountry'; import DarkModeSwitch from '../../../common/Layout/DarkModeSwitch.tsx'; import { ParamsContext } from '../../../common/Layout/QueryParamsContext'; @@ -12,7 +12,9 @@ interface Props { export default function Credits({ setCurrencyCode }: Props): ReactElement { const { tenantConfig } = useTenant(); - const { i18n, t } = useTranslation(['common', 'maps']); + const tCommon = useTranslations('Common'); + const tMaps = useTranslations('Maps'); + const locale = useLocale(); const [selectedCurrency, setSelectedCurrency] = React.useState('EUR'); const [selectedCountry, setSelectedCountry] = React.useState('DE'); const [openLanguageModal, setLanguageModalOpen] = React.useState(false); @@ -50,19 +52,18 @@ export default function Credits({ setCurrencyCode }: Props): ReactElement { setLanguageModalOpen(true); }} > - {`🌐 ${ - i18n.language ? i18n.language.toUpperCase() : '' - } • ${selectedCurrency}`} + {`🌐 ${locale ? locale.toUpperCase() : ''} • ${selectedCurrency}`} )} - {(tenantConfig.config.slug === 'ttc' || tenantConfig.config.slug === 'planet') && + {(tenantConfig.config.slug === 'ttc' || + tenantConfig.config.slug === 'planet') && !isEmbed ? ( - {t('common:shop')} + {tCommon('shop')} ) : null} @@ -71,33 +72,33 @@ export default function Credits({ setCurrencyCode }: Props): ReactElement { href={`https://status.pp.eco/`} target={isEmbed ? '_top' : '_blank'} > - {t('common:status')} + {tCommon('status')} {!isEmbed && ( - {t('common:imprint')} + {tCommon('imprint')} )} {!isEmbed && ( - {t('common:privacy')} + {tCommon('privacy')} )} {!isEmbed && ( - {t('common:terms')} + {tCommon('terms')} )}
- {t('common:mapInfo')} + {tCommon('mapInfo')}
- {t('maps:baseLayer')} + {tMaps('baseLayer')}

Esri Community Maps Contributors, Esri, HERE, Garmin, METI/NASA, USGS{' '} @@ -125,7 +126,7 @@ export default function Credits({ setCurrencyCode }: Props): ReactElement { DS, USDA FSA, USGS, Aerogrid, IGN, IGP, and the GIS User Community

- {t('maps:satelliteImagery')} + {tMaps('satelliteImagery')}

Image courtesy of Planet Labs, Inc

Copernicus Sentinel data 2017-2021

Landsat-8 image courtesy of the U.S. Geological Survey

@@ -139,7 +140,7 @@ export default function Credits({ setCurrencyCode }: Props): ReactElement { href="mailto:support@plant-for-the-planet.org" target={'_blank'} > - {t('common:contact')} + {tCommon('contact')}
)} diff --git a/src/features/projects/components/maps/Explore.tsx b/src/features/projects/components/maps/Explore.tsx index 41bf98ff22..2ef190da1c 100644 --- a/src/features/projects/components/maps/Explore.tsx +++ b/src/features/projects/components/maps/Explore.tsx @@ -2,7 +2,7 @@ import React, { ReactElement } from 'react'; import styles from '../../styles/ProjectsMap.module.scss'; import CancelIcon from '../../../../../public/assets/images/icons/CancelIcon'; import ExploreIcon from '../../../../../public/assets/images/icons/ExploreIcon'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { Modal, FormGroup, FormControlLabel } from '@mui/material'; import Switch from '../../../common/InputTypes/ToggleSwitch'; import { @@ -56,7 +56,7 @@ export default function Explore(): ReactElement { exploreProjects, } = useProjectProps(); - const { t } = useTranslation(['maps']); + const t = useTranslations('Maps'); const router = useRouter(); const { theme } = React.useContext(ThemeContext); @@ -234,7 +234,7 @@ export default function Explore(): ReactElement { onClick={() => setExploreExpanded(true)} className={styles.exploreText} > - {t('maps:explore')} + {t('explore')}

)}
@@ -307,7 +307,7 @@ export default function Explore(): ReactElement { name="deforestation" /> } - label={t('maps:deforestation')} + label={t('deforestation')} />
{ @@ -364,13 +364,13 @@ export default function Explore(): ReactElement { name="projects" /> } - label={t('maps:projects')} + label={t('projects')} />
{/*
*/}
-

{t('maps:3trilliontrees')}

+

{t('3trilliontrees')}

diff --git a/src/features/projects/components/maps/ExploreInfoModal.tsx b/src/features/projects/components/maps/ExploreInfoModal.tsx index df55123821..7db3c24f3c 100644 --- a/src/features/projects/components/maps/ExploreInfoModal.tsx +++ b/src/features/projects/components/maps/ExploreInfoModal.tsx @@ -1,6 +1,6 @@ import React, { ReactElement, RefObject } from 'react'; import styles from '../../styles/ProjectsMap.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import OpenLink from '../../../../../public/assets/images/icons/OpenLink'; import CancelIcon from '../../../../../public/assets/images/icons/CancelIcon'; import { ExploreOption } from '../../../common/types/ProjectPropsContextInterface'; @@ -19,103 +19,97 @@ function ExploreInfoModal({ setInfoExpanded, setModalOpen, }: Props): ReactElement { - const { t, ready } = useTranslation(['maps']); + const t = useTranslations('Maps'); return ( - <> - {ready ? ( -
- {infoExpanded === 'Forests' ? ( -
-
{t('maps:forests')}
-
-
-

{t('maps:low')}

-
-

{t('maps:high')}

-
-

{t('maps:forestInfo')}

- - -

- Crowther, T. W. et al. (2015) Mapping tree -
density at a global scale. Nature 525, 201–205. -

-
-
+
+ {infoExpanded === 'Forests' ? ( +
+
{t('forests')}
+
+
+

{t('low')}

+
+

{t('high')}

- ) : null} - {infoExpanded === 'Restoration' ? ( -
-
{t('maps:restoration')}
-
-
-

{t('maps:low')}

-
-

{t('maps:high')}

-
-

- {t('maps:restorationInfo')} -

- - -

- Bastin, J. F. et al. (2019) The Global Tree -
Restoration Potential. Science 365(6448), 76-79. -

-
-
-
- ) : null} - {infoExpanded === 'Deforestation' ? ( - - ) : null} - {infoExpanded === 'Planted' ? ( - +
+ ) : null} + {infoExpanded === 'Restoration' ? ( +
+
{t('restoration')}
+
+
+

{t('low')}

+
+

{t('high')}

- ) : null} -
{ - setInfoExpanded(null); - setModalOpen(false); - }} - className={styles.infoClose} - > - +

{t('restorationInfo')}

+ + +

+ Bastin, J. F. et al. (2019) The Global Tree +
Restoration Potential. Science 365(6448), 76-79. +

+
) : null} - + {infoExpanded === 'Deforestation' ? ( + + ) : null} + {infoExpanded === 'Planted' ? ( +
+
{infoExpanded}
+
+
+ ) : null} +
{ + setInfoExpanded(null); + setModalOpen(false); + }} + className={styles.infoClose} + > + +
+
); } diff --git a/src/features/projects/components/projectDetails/TopProjectReports.tsx b/src/features/projects/components/projectDetails/TopProjectReports.tsx index 81737c29ef..74edf0d7bc 100644 --- a/src/features/projects/components/projectDetails/TopProjectReports.tsx +++ b/src/features/projects/components/projectDetails/TopProjectReports.tsx @@ -5,23 +5,21 @@ import { getPDFFile } from '../../../../utils/getImageURL'; import parse from 'date-fns/parse'; import format from 'date-fns/format'; import { localeMapForDate } from '../../../../utils/language/getLanguageName'; -import { Trans } from 'react-i18next'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { Review } from '@planet-sdk/common/build/types/project/common'; - interface Props { projectReviews: Review[]; } export default function TopProjectReports({ projectReviews }: Props) { - const { t, ready } = useTranslation(['common']); + const t = useTranslations('Common'); const displayDate = (date: string) => { - return format(parse(date, 'MM-yyyy', new Date()), 'LLLL yyyy',{ + return format(parse(date, 'MM-yyyy', new Date()), 'LLLL yyyy', { locale: localeMapForDate[localStorage.getItem('language') || 'en'], }); }; - return ready ? ( + return ( <>
@@ -29,19 +27,20 @@ export default function TopProjectReports({ projectReviews }: Props) { {projectReviews.map((review) => (

- - The project was inspected in a multiday field review in{' '} - {displayDate(review.issueMonth)} and fullfills our{' '} - e.stopPropagation()} - > - standards. - - + {t.rich('reviewInfo', { + reviewMonth: displayDate(review.issueMonth), + standardsLink: (chunks) => ( + e.stopPropagation()} + > + {chunks} + + ), + })}

e.stopPropagation()} > - {t('common:viewReport')} + {t('viewReport')}
))}
- ) : null; + ); } diff --git a/src/features/projects/components/projects/Header.tsx b/src/features/projects/components/projects/Header.tsx index 9bd84b7736..e76bc15237 100644 --- a/src/features/projects/components/projects/Header.tsx +++ b/src/features/projects/components/projects/Header.tsx @@ -1,6 +1,6 @@ import React, { ReactElement } from 'react'; import SearchIcon from '../../../../../public/assets/images/icons/SearchIcon'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { SetState } from '../../../common/types/common'; import { MapProject } from '../../../common/types/ProjectPropsContextInterface'; @@ -19,8 +19,8 @@ function Header({ setSearchMode, projects, }: Props): ReactElement { - const { t, ready } = useTranslation(['donate']); - return ready ? ( + const t = useTranslations('Donate'); + return (
{showTopProjectsList ? (
@@ -30,7 +30,7 @@ function Header({ selectedTab === 'top' ? 'tabButtonSelected' : 'tabButtonText' } > - {t('donate:topProjects')} + {t('topProjects')}
{selectedTab === 'top' ? (
@@ -43,7 +43,7 @@ function Header({ selectedTab === 'all' ? 'tabButtonSelected' : 'tabButtonText' } > - {t('donate:allCountProjects', { + {t('allCountProjects', { projectCount: projects.length, })}
@@ -53,7 +53,7 @@ function Header({
) : ( -

{t('donate:stopTalkingStartPlanting')}

+

{t('stopTalkingStartPlanting')}

)}
- ) : ( - <> ); } diff --git a/src/features/projects/components/projects/SearchBar.tsx b/src/features/projects/components/projects/SearchBar.tsx index 81e86ea143..adf496a09b 100644 --- a/src/features/projects/components/projects/SearchBar.tsx +++ b/src/features/projects/components/projects/SearchBar.tsx @@ -1,5 +1,5 @@ import React, { RefObject } from 'react'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import CancelIcon from '../../../../../public/assets/images/icons/CancelIcon'; import SearchIcon from '../../../../../public/assets/images/icons/SearchIcon'; import { TextField } from '@mui/material'; @@ -17,8 +17,8 @@ function SearchBar({ searchValue, searchRef, }: Props) { - const { t, ready } = useTranslation(['donate']); - return ready ? ( + const t = useTranslations('Donate'); + return ( <> - ) : null; + ); } export default SearchBar; diff --git a/src/features/projects/screens/Projects.tsx b/src/features/projects/screens/Projects.tsx index b4b3a33f02..b59059829d 100644 --- a/src/features/projects/screens/Projects.tsx +++ b/src/features/projects/screens/Projects.tsx @@ -2,7 +2,7 @@ import React, { ReactElement } from 'react'; import dynamic from 'next/dynamic'; import MuiButton from '../../common/InputTypes/MuiButton'; import ProjectLoader from '../../common/ContentLoaders/Projects/ProjectLoader'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import LazyLoad from 'react-lazyload'; import NotFound from '../../../../public/assets/images/NotFound'; import Header from '../components/projects/Header'; @@ -43,7 +43,9 @@ function ProjectsList({ const isEmbed = embed === 'true'; const [scrollY, setScrollY] = React.useState(0); const [hideSidebar, setHideSidebar] = React.useState(isEmbed); - const { t, ready } = useTranslation(['donate', 'country', 'maps']); + const tDonate = useTranslations('Donate'); + const tCountry = useTranslations('Country'); + const tMaps = useTranslations('Maps'); const [selectedTab, setSelectedTab] = React.useState<'all' | 'top'>('all'); const [searchMode, setSearchMode] = React.useState(false); const [searchValue, setSearchValue] = React.useState(''); @@ -122,7 +124,7 @@ function ProjectsList({ .toLowerCase() : ''; const projectCountry = project.properties.country - ? t('country:' + project.properties.country.toLowerCase()) + ? tCountry(project.properties.country.toLowerCase()) .normalize('NFD') .replace(/[\u0300-\u036f]/g, '') .toLowerCase() @@ -177,10 +179,8 @@ function ProjectsList({ setErrors(handleError(err as APIError)); } } - if (ready) { - setListOrder(); - } - }, [ready]); + setListOrder(); + }, []); const topProjects = React.useMemo( () => getProjects(projects, 'top'), @@ -197,23 +197,23 @@ function ProjectsList({ }, []); const NoProjectFound = () => { - return ready ? ( + return (
- {t('donate:noProjectsFound')} + {tDonate('noProjectsFound')}
- ) : null; + ); }; const toggleSidebar = () => { setHideSidebar(!hideSidebar); }; - return ready ? ( + return ( <> {isEmbed && isMobile && showProjectList === undefined && ( @@ -222,7 +222,7 @@ function ProjectsList({ variant={hideSidebar ? 'outlined' : 'contained'} className="toggleButton" > - {hideSidebar ? t('maps:showProjectList') : t('maps:hideProjectList')} + {hideSidebar ? tMaps('showProjectList') : tMaps('hideProjectList')} )} {showProjects ? ( @@ -314,8 +314,6 @@ function ProjectsList({
) : null} - ) : ( - <> ); } From 472876a29a099b8bce6437686b1ef34ef06791b8 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 21 Feb 2024 16:02:50 +0530 Subject: [PATCH 09/70] feat: updates LanguageSelection logic (footer) --- .../Footer/SelectLanguageAndCountry.tsx | 61 ++++++++++++------- .../common/Layout/QueryParamsContext.tsx | 36 ++--------- src/utils/apiRequests/api.ts | 47 ++++++-------- 3 files changed, 62 insertions(+), 82 deletions(-) diff --git a/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx b/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx index 422ace3453..3048e8be2a 100644 --- a/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx +++ b/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx @@ -21,8 +21,9 @@ import supportedLanguages from '../../../../utils/language/supportedLanguages.js import { ThemeContext } from '../../../../theme/themeContext'; import GreenRadio from '../../InputTypes/GreenRadio'; import styles from './SelectLanguageAndCountry.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { useTenant } from '../TenantContext'; +import { useRouter } from 'next/router'; interface MapCountryProps { value: string; @@ -90,13 +91,16 @@ function MapLanguage({ value, handleChange }: MapLanguageProps) { // Maps the radio buttons for countries function MapCountry({ value, handleChange }: MapCountryProps) { - const { t, i18n, ready } = useTranslation(['country']); + const t = useTranslations('Country'); + const locale = useLocale(); const country = getStoredConfig('country'); const priorityCountries = country === value ? [value] : [value, country]; - const sortedCountriesData = ready - ? sortCountriesByTranslation(t, i18n.language, priorityCountries) - : {}; - return ready ? ( + const sortedCountriesData = sortCountriesByTranslation( + t, + locale, + priorityCountries + ); + return ( } label={ - t('country:' + country.countryCode.toLowerCase()) + + t(country.countryCode.toLowerCase()) + ' · ' + country.currencyCode } @@ -119,7 +123,7 @@ function MapCountry({ value, handleChange }: MapCountryProps) { ))} - ) : null; + ); } export default function TransitionsModal({ @@ -133,7 +137,9 @@ export default function TransitionsModal({ const [modalLanguage, setModalLanguage] = useState('en'); const [selectedModalCountry, setSelectedModalCountry] = useState('DE'); - const { t, i18n, ready } = useTranslation(['common', 'country']); + const tCommon = useTranslations('Common'); + const locale = useLocale(); + const router = useRouter(); const { theme } = useContext(ThemeContext); @@ -150,10 +156,6 @@ export default function TransitionsModal({ // changes the language and currency code in footer state and local storage // when user clicks on OK function handleOKClick() { - // window.localStorage.setItem('language', modalLanguage); - - i18n.changeLanguage(modalLanguage); - window.localStorage.setItem('language', modalLanguage); window.localStorage.setItem('countryCode', selectedModalCountry); setSelectedCountry(selectedModalCountry); const currencyCode = ( @@ -164,14 +166,29 @@ export default function TransitionsModal({ setSelectedCurrency(currencyCode); if (setCurrencyCode) setCurrencyCode(currencyCode); } + // TODOO - loader while changing the locale + if (modalLanguage !== locale) { + const { asPath, pathname } = router; + if (pathname === '/sites/[slug]/[locale]') { + router.push(`/${modalLanguage}`); + } else { + const splitPathnames = asPath.split('/'); + if (splitPathnames.length > 2) { + const newPathname = splitPathnames.slice(2).join('/'); + router.push(`/${modalLanguage}/${newPathname}`); + } else { + router.push(`/${modalLanguage}`); + } + } + } handleModalClose(); } useEffect(() => { - if (i18n.language) { - setModalLanguage(i18n.language); + if (locale) { + setModalLanguage(locale); } - }, [i18n.language]); + }, [locale]); // changes the selected country in local state whenever the currency changes // in Footer state useEffect(() => { @@ -180,7 +197,7 @@ export default function TransitionsModal({ } }, [selectedCountry]); - return ready ? ( + return (
-

{t('common:selectLanguage')}

+

{tCommon('selectLanguage')}

{/* maps the radio button for languages */} -

{t('common:selectCountry')}

+

{tCommon('selectCountry')}

{/* maps the radio button for countries */}
-

{t('common:cancel')}

+

{tCommon('cancel')}

- ) : null; + ); } diff --git a/src/features/common/Layout/QueryParamsContext.tsx b/src/features/common/Layout/QueryParamsContext.tsx index 5e6d9ab7f8..2fce5fe997 100644 --- a/src/features/common/Layout/QueryParamsContext.tsx +++ b/src/features/common/Layout/QueryParamsContext.tsx @@ -1,7 +1,7 @@ import React, { createContext, FC, useEffect, useState } from 'react'; import { useRouter } from 'next/router'; -import { useTranslation } from 'next-i18next'; import { useTenant } from './TenantContext'; +import { useLocale } from 'next-intl'; type QueryParamType = string | undefined | string[] | null; export interface ParamsContextType { @@ -26,8 +26,9 @@ export const ParamsContext = createContext({ }); const QueryParamsProvider: FC = ({ children }) => { - const { i18n } = useTranslation(); + const locale = useLocale(); const { tenantConfig } = useTenant(); + // TODOO - use tenant supported locales const tenantSupportedLocale = tenantConfig.config.languages ?? ['en']; const [isContextLoaded, setIsContextLoaded] = useState(false); const [embed, setEmbed] = useState(undefined); @@ -63,34 +64,9 @@ const QueryParamsProvider: FC = ({ children }) => { }, [router]); useEffect(() => { - if (localStorage.getItem('language') === null) { - const userBrowserLanguage = navigator.language ?? navigator.languages[0]; - // checks whether tenant supported locale matches the user browser preference locale - const languageMatched = tenantSupportedLocale.find((locale) => { - return ( - locale[0] + locale[1] === - userBrowserLanguage[0] + userBrowserLanguage[1] - ); - }); - - if (languageMatched !== undefined) { - localStorage.setItem('language', languageMatched); - setLanguage(languageMatched); - i18n.changeLanguage(languageMatched); - } else { - localStorage.setItem('language', 'en'); - setLanguage('en'); - i18n.changeLanguage('en'); - } - } - }, [tenantSupportedLocale]); - - useEffect(() => { - if (i18n && i18n.isInitialized && language) { - i18n.changeLanguage(language as string); - /* localStorage.setItem('language', language as string); */ //not needed as i18n handles setting the local storage - } - }, [language, i18n.isInitialized]); + if (localStorage.getItem('language') !== locale) + localStorage.setItem('language', locale); + }, [locale]); return ( { + const lang = localStorage.getItem('language') || 'en'; const header = { 'tenant-key': `${tenant}`, 'X-SESSION-ID': await getsessionId(), Authorization: `Bearer ${token}`, - 'x-locale': `${ - localStorage.getItem('language') ? localStorage.getItem('language') : 'en' - }`, + 'x-locale': lang, }; const response = await fetch(`${process.env.API_ENDPOINT}/app/profile`, { method: 'GET', @@ -58,11 +57,7 @@ export function getRequest( headers: { 'tenant-key': `${tenant}`, 'X-SESSION-ID': await getsessionId(), - 'x-locale': `${ - localStorage.getItem('language') - ? localStorage.getItem('language') - : 'en' - }`, + 'x-locale': lang, 'x-accept-versions': version ? version : '1.0.3', }, }); @@ -103,7 +98,7 @@ export function getAuthenticatedRequest( 'tenant-key': `${tenant}`, 'X-SESSION-ID': await getsessionId(), Authorization: `Bearer ${token}`, - 'x-locale': `${lang}`, + 'x-locale': lang, 'x-accept-versions': version ? version : '1.0.3', ...(header ? header : {}), }; @@ -144,6 +139,7 @@ export function postAuthenticatedRequest( logoutUser: (value?: string | undefined) => void, headers?: Record ) { + const lang = localStorage.getItem('language') || 'en'; return new Promise((resolve, reject) => { (async () => { try { @@ -153,11 +149,7 @@ export function postAuthenticatedRequest( 'tenant-key': `${tenant}`, 'X-SESSION-ID': await getsessionId(), Authorization: `Bearer ${token}`, - 'x-locale': `${ - localStorage.getItem('language') - ? localStorage.getItem('language') - : 'en' - }`, + 'x-locale': lang, ...(headers ? headers : {}), }; const res = await fetch(process.env.API_ENDPOINT + url, { @@ -189,7 +181,12 @@ export function postAuthenticatedRequest( }); } -export function postRequest(tenant: string | undefined, url: string, data: any) { +export function postRequest( + tenant: string | undefined, + url: string, + data: any +) { + const lang = localStorage.getItem('language') || 'en'; return new Promise((resolve, reject) => { (async () => { try { @@ -200,11 +197,7 @@ export function postRequest(tenant: string | undefined, url: string, data: an 'Content-Type': 'application/json', 'tenant-key': `${tenant}`, 'X-SESSION-ID': await getsessionId(), - 'x-locale': `${ - localStorage.getItem('language') - ? localStorage.getItem('language') - : 'en' - }`, + 'x-locale': lang, }, }); @@ -230,6 +223,7 @@ export function deleteAuthenticatedRequest( token: string | null, logoutUser: (value?: string | undefined) => void ) { + const lang = localStorage.getItem('language') || 'en'; return new Promise((resolve, reject) => { (async () => { try { @@ -239,11 +233,7 @@ export function deleteAuthenticatedRequest( 'tenant-key': `${tenant}`, 'X-SESSION-ID': await getsessionId(), Authorization: `Bearer ${token}`, - 'x-locale': `${ - localStorage.getItem('language') - ? localStorage.getItem('language') - : 'en' - }`, + 'x-locale': lang, }; const res = await fetch(process.env.API_ENDPOINT + url, { method: 'DELETE', @@ -281,6 +271,7 @@ export function putAuthenticatedRequest( logoutUser: (value?: string | undefined) => void ) { return new Promise((resolve, reject) => { + const lang = localStorage.getItem('language') || 'en'; (async () => { try { if (token && validateToken(token)) { @@ -289,11 +280,7 @@ export function putAuthenticatedRequest( 'tenant-key': `${tenant}`, 'X-SESSION-ID': await getsessionId(), Authorization: `Bearer ${token}`, - 'x-locale': `${ - localStorage.getItem('language') - ? localStorage.getItem('language') - : 'en' - }`, + 'x-locale': lang, }; const res = await fetch(process.env.API_ENDPOINT + url, { method: 'PUT', From 4c431ed8da13b514a044c211ff9c66e3f129d58a Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 21 Feb 2024 17:20:13 +0530 Subject: [PATCH 10/70] feat: enclose translation files in outer namespace (de/en only) --- public/static/locales/de/bulkCodes.json | 220 +++---- public/static/locales/de/donationLink.json | 46 +- public/static/locales/de/editProfile.json | 116 ++-- public/static/locales/de/giftfunds.json | 14 +- public/static/locales/de/leaderboard.json | 14 +- public/static/locales/de/managePayouts.json | 148 ++--- public/static/locales/de/me.json | 552 +++++++++--------- public/static/locales/de/planet.json | 28 +- public/static/locales/de/planetcash.json | 62 +- public/static/locales/de/profile.json | 98 ++-- public/static/locales/de/redeem.json | 38 +- public/static/locales/de/registerTrees.json | 22 +- public/static/locales/de/tenants.json | 100 ++-- public/static/locales/de/treemapper.json | 132 ++--- .../locales/de/treemapperAnalytics.json | 114 ++-- public/static/locales/en/bulkCodes.json | 220 +++---- public/static/locales/en/donationLink.json | 46 +- public/static/locales/en/editProfile.json | 116 ++-- public/static/locales/en/giftfunds.json | 14 +- public/static/locales/en/leaderboard.json | 14 +- public/static/locales/en/managePayouts.json | 148 ++--- public/static/locales/en/me.json | 552 +++++++++--------- public/static/locales/en/planet.json | 28 +- public/static/locales/en/planetcash.json | 62 +- public/static/locales/en/profile.json | 98 ++-- public/static/locales/en/redeem.json | 38 +- public/static/locales/en/registerTrees.json | 22 +- public/static/locales/en/tenants.json | 100 ++-- public/static/locales/en/treemapper.json | 134 ++--- .../locales/en/treemapperAnalytics.json | 120 ++-- 30 files changed, 1746 insertions(+), 1670 deletions(-) diff --git a/public/static/locales/de/bulkCodes.json b/public/static/locales/de/bulkCodes.json index 7e08181318..1c3f0bbb19 100644 --- a/public/static/locales/de/bulkCodes.json +++ b/public/static/locales/de/bulkCodes.json @@ -1,106 +1,116 @@ { - "bulkCodesTitle": "Baumurkunden & Codes erzeugen", - "partnerSignupInfo": "Unsere Funktion Planet Cash / Bulk-Codes ist eine neue Funktion speziell für Partner von Plant-for-the-Planet. Melden Sie sich gerne bei Interesse bei <2>partner@plant-for-the-planet.org.", - "bulkCodesDescription1": "Mit PlanetCash kannst du Tausende von Codes auf einmal erzeugen. Das Erzeugen von Urkunden und Codes wird deine Baumzahl steigen lassen.", - "bulkCodesDescription2": "Mit dieser Funktion kannst du Codes für benutzerdefinierte Zertifikate, Geschenkkarten, Spenden im Namen von Nutzern und einlösbare Codes erstellen, die du mit deinen Produkten verknüpfen kannst.", - "tabCreationMethod": "Herstellungsmethode", - "tabSelectProject": "Projekt aussuchen", - "tabIssueCodes": "Codes erzeugen", - "issueCodes": "Codes erzeugen", - "issuingCodes": "erzeuge Codes...", - "importMethodText": { - "title": "Erstelle personalisierte Baumurkunden", - "subtitle": "Verwende diese Methode (maximal 1000 Empfänger in einer Operation), wenn eines der folgenden Kriterien auf deinen Anwendungsfall zutrifft:", - "details": ["Ich möchte für jeden Code den Namen des Empfängers oder seine E-Mail-Adresse angeben.", "Ich möchte, dass Plant-for-the-Planet nach der Erstellung automatisch eine E-Mail an die Empfänger sendet (optional).", "Ich möchte Codes für verschiedene Zahlen von Bäumen vergeben."] - }, - "genericMethodText": { - "title": "Generische Codes erstellen", - "subtitle": "Verwende diese Methode, wenn die folgenden Kriterien auf deinen Anwendungsfall zutreffen:", - "details": ["Alle Codes werden den gleichen Wert haben.", "Ich möchte eine Reihe von Codes für beliebige Empfänger generieren.", "Namen und E-Mail-Adressen können nicht mit dem Code verknüpft werden."] - }, - "projectName": "Projektname", - "costPerUnit": "Kosten pro Einheit", - "labelComment": "Kommentar [Privat]", - "unitOfMeasurement": "Maßeinheit", - "units": { - "ha": "ha", - "tree": "Baum", - "m2": "m²" - }, - "unitsPerCode": "Einheiten pro Code*", - "totalNumberOfCodes": "Gesamtzahl der Codes*", - "occasion": "Anlass", - "total": "Insgesamt", - "chargeConsentText": "Indem du auf Codes erzeugen klickst, erklärst du dich damit einverstanden, dass der oben genannte Betrag von deinem Konto abgebucht wird.", - "invalidEmailWarningText": "Bitte stelle sicher, dass die Empfängeremail eine gültige E-Mail ist. Die Verwendung von Pseudo-E-Mails oder ungültigen E-Mails führt zur Sperrung des Kontos in Übereinstimmung mit den Geschäftsbedingungen der Plattform.", - "projectRequired": "Es wurde kein Projekt ausgewählt.", - "unitsPerCodeRequired": "Jeder Code sollte mindestens eine Einheit enthalten.", - "codeQuantityRequired": "Du musst mindestens einen Code erstellen.", - "unitsPerCodeInvalidRange": "Ein Code kann bis zu 1000 Einheiten enthalten.", - "codeQuantityInvalidRange": "Es können maximal 5000 Codes erstellt werden.", - "featureAvailability": "Diese Funktion ist nur für Partnerprojekte verfügbar.", - "planetCashDisabled": "PlanetCash ist nicht aktiviert. Bitte aktiviere PlanetCash, um diese Funktion zu nutzen.", - "insufficientPCashBalance": "Unzureichendes Guthaben", - "addBalanceGeneric": "Bitte klicke hier, um Guthaben hinzuzufügen.", - "instructionsUploadCSV": { - "empty": "Drag & Drop / Klicke zur Auswahl einer .xslx/.csv-Datei zum Hochladen.", - "error": "Bitte prüfe etwaige Probleme und ziehe die .xslx/.csv-Datei zum Hochladen hierher.", - "processing": "Bitte warte, während wir deine Datei analysieren...", - "success": "Weiter oder ziehe eine .xslx or .csv-Datei hierher, um die aktuelle Datei zu ersetzen." - }, - "statusUploadCSV": { - "error": "Fehler", - "success": "Dateianalyse abgeschlossen" - }, - "errorUploadCSV": { - "fileInvalidType": "Nur .csv or .xslx Dateien sind zulässig", - "tooManyFiles": "Bitte lade nur eine einzige Datei hoch.", - "fileTooSmall": "Die hochgeladene Datei scheint leer zu sein", - "fileTooLarge": "Die hochgeladene Datei darf höchstens 5 MB groß sein.", - "missingColumns": "In der hochgeladenen Datei fehlen die folgenden Spalten: ", - "noRecipientData": "Keine Empfängerdaten gefunden.", - "tooManyRecipients": "Maximal 1000 Empfänger können in einer Transaktion verarbeitet werden.", - "unitsNotProvided": "Einheiten fehlen oder sind ungültig bei einigen Empfängern.", - "notifyNotPossible": "E-Mail und Name fehlen bei einigen Empfängern, die benachrichtigt werden sollen.", - "instructionRowError": "In der 1. Zeile ist ein Fehler aufgetreten. Bitte prüfe, ob du die Anweisungen gelöscht hast oder ob zusätzliche Daten vorhanden sind.", - "invalidEmails": "recipient_email enthält falsche/ungültige E-Mails in den folgenden Zeilen: {{rowList}}. Bitte entferne ungültige Emails oder füge gültige Emails hinzu.", - "generalError": "Es ist ein Fehler aufgetreten. Bitte versuche es nach einer Weile erneut." - }, - "errorAddRecipient": { - "unitsNotProvided": "Pflicht", - "requiredForNotifications": "Benötigt (für Email Empfänger)", - "emailInvalid": "Ungültige Email" - }, - "successUploadCSV": { - "ignoredColumns": "Zusätzliche Spalten wurden ignoriert" - }, - "importInstructions": "Bitte lesen Sie die <2>Dokumentation hier, lade die <5>Excel-Vorlage hier und die <8>CSV-Vorlage hier herunter.", - "tableHeaders": { - "recipient_name": "Empfängername", - "recipient_email": "Empfängeremail", - "recipient_notify": "Email senden?", - "units": "Einheiten", - "recipient_message": "Nachricht" - }, - "tableHeaderHelpText": { - "recipient_name": "Optional. Name des Empfängers, wird auf der Urkunde angezeigt, und falls eingewilligt, in der Email, die an diesen geschickt wird. Benötigt, wenn Emails verschickt werden sollen.", - "recipient_email": "Optional. Benötigt um die Urkunde per Email an den Empfänger zu schicken.", - "recipient_notify": "Optional. Wähle \"Ja\", wenn du möchtest, dass Plant-for-the-Planet den Empfänger automatisch per Email informiert.", - "units": "Pflicht. Anzahl der Bäume für den Empfänger, z.B, 5 für 5 Bäume.", - "recipient_message": "Optional. Nachricht an den Empfänger, die in der Email enthalten ist, wenn Benachrichtigen auf \"Ja\" steht. Wenn nichts angegeben wird, wird eine Standardnachricht gesendet." - }, - "donationSuccess": "Deine Spende war erfolgreich. Du wirst in Kürze zur Anzeige der Spendendetails weitergeleitet...", - "donationError": { - "planet_cash_insufficient_credit": "Verfügbares Guthaben = {{availableBalance}}. Bitte lade Guthaben auf dein PlanetCash-Konto auf, um diese Spende zu tätigen.", - "default": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es nach einer Weile erneut.", - "planet_cash_payment_failure": "Die Transaktion ist fehlgeschlagen. {{reason}}", - "planet_cash_invalid_project": "Du kannst für das ausgewählte Projekt nicht spenden." - }, - "titleAddRecipientButton": "Empfänger zur Tabelle hinzufügen", - "notifyRecipientOptions": { - "yes": "Ja", - "no": "Nein" - }, - "fileUploadWarning": "Dies wird die bestehenden Empfängerdaten löschen, möchtest du fortfahren?", - "unsavedDataWarning": "Einige Empfängerdaten sind nicht gespeichert. Möchtest du fortfahren? Nicht gespeicherte Daten gehen verloren." -} \ No newline at end of file + "BulkCodes": { + "bulkCodesTitle": "Baumurkunden & Codes erzeugen", + "partnerSignupInfo": "Unsere Funktion Planet Cash / Bulk-Codes ist eine neue Funktion speziell für Partner von Plant-for-the-Planet. Melden Sie sich gerne bei Interesse bei <2>partner@plant-for-the-planet.org.", + "bulkCodesDescription1": "Mit PlanetCash kannst du Tausende von Codes auf einmal erzeugen. Das Erzeugen von Urkunden und Codes wird deine Baumzahl steigen lassen.", + "bulkCodesDescription2": "Mit dieser Funktion kannst du Codes für benutzerdefinierte Zertifikate, Geschenkkarten, Spenden im Namen von Nutzern und einlösbare Codes erstellen, die du mit deinen Produkten verknüpfen kannst.", + "tabCreationMethod": "Herstellungsmethode", + "tabSelectProject": "Projekt aussuchen", + "tabIssueCodes": "Codes erzeugen", + "issueCodes": "Codes erzeugen", + "issuingCodes": "erzeuge Codes...", + "importMethodText": { + "title": "Erstelle personalisierte Baumurkunden", + "subtitle": "Verwende diese Methode (maximal 1000 Empfänger in einer Operation), wenn eines der folgenden Kriterien auf deinen Anwendungsfall zutrifft:", + "details": [ + "Ich möchte für jeden Code den Namen des Empfängers oder seine E-Mail-Adresse angeben.", + "Ich möchte, dass Plant-for-the-Planet nach der Erstellung automatisch eine E-Mail an die Empfänger sendet (optional).", + "Ich möchte Codes für verschiedene Zahlen von Bäumen vergeben." + ] + }, + "genericMethodText": { + "title": "Generische Codes erstellen", + "subtitle": "Verwende diese Methode, wenn die folgenden Kriterien auf deinen Anwendungsfall zutreffen:", + "details": [ + "Alle Codes werden den gleichen Wert haben.", + "Ich möchte eine Reihe von Codes für beliebige Empfänger generieren.", + "Namen und E-Mail-Adressen können nicht mit dem Code verknüpft werden." + ] + }, + "projectName": "Projektname", + "costPerUnit": "Kosten pro Einheit", + "labelComment": "Kommentar [Privat]", + "unitOfMeasurement": "Maßeinheit", + "units": { + "ha": "ha", + "tree": "Baum", + "m2": "m²" + }, + "unitsPerCode": "Einheiten pro Code*", + "totalNumberOfCodes": "Gesamtzahl der Codes*", + "occasion": "Anlass", + "total": "Insgesamt", + "chargeConsentText": "Indem du auf Codes erzeugen klickst, erklärst du dich damit einverstanden, dass der oben genannte Betrag von deinem Konto abgebucht wird.", + "invalidEmailWarningText": "Bitte stelle sicher, dass die Empfängeremail eine gültige E-Mail ist. Die Verwendung von Pseudo-E-Mails oder ungültigen E-Mails führt zur Sperrung des Kontos in Übereinstimmung mit den Geschäftsbedingungen der Plattform.", + "projectRequired": "Es wurde kein Projekt ausgewählt.", + "unitsPerCodeRequired": "Jeder Code sollte mindestens eine Einheit enthalten.", + "codeQuantityRequired": "Du musst mindestens einen Code erstellen.", + "unitsPerCodeInvalidRange": "Ein Code kann bis zu 1000 Einheiten enthalten.", + "codeQuantityInvalidRange": "Es können maximal 5000 Codes erstellt werden.", + "featureAvailability": "Diese Funktion ist nur für Partnerprojekte verfügbar.", + "planetCashDisabled": "PlanetCash ist nicht aktiviert. Bitte aktiviere PlanetCash, um diese Funktion zu nutzen.", + "insufficientPCashBalance": "Unzureichendes Guthaben", + "addBalanceGeneric": "Bitte klicke hier, um Guthaben hinzuzufügen.", + "instructionsUploadCSV": { + "empty": "Drag & Drop / Klicke zur Auswahl einer .xslx/.csv-Datei zum Hochladen.", + "error": "Bitte prüfe etwaige Probleme und ziehe die .xslx/.csv-Datei zum Hochladen hierher.", + "processing": "Bitte warte, während wir deine Datei analysieren...", + "success": "Weiter oder ziehe eine .xslx or .csv-Datei hierher, um die aktuelle Datei zu ersetzen." + }, + "statusUploadCSV": { + "error": "Fehler", + "success": "Dateianalyse abgeschlossen" + }, + "errorUploadCSV": { + "fileInvalidType": "Nur .csv or .xslx Dateien sind zulässig", + "tooManyFiles": "Bitte lade nur eine einzige Datei hoch.", + "fileTooSmall": "Die hochgeladene Datei scheint leer zu sein", + "fileTooLarge": "Die hochgeladene Datei darf höchstens 5 MB groß sein.", + "missingColumns": "In der hochgeladenen Datei fehlen die folgenden Spalten: ", + "noRecipientData": "Keine Empfängerdaten gefunden.", + "tooManyRecipients": "Maximal 1000 Empfänger können in einer Transaktion verarbeitet werden.", + "unitsNotProvided": "Einheiten fehlen oder sind ungültig bei einigen Empfängern.", + "notifyNotPossible": "E-Mail und Name fehlen bei einigen Empfängern, die benachrichtigt werden sollen.", + "instructionRowError": "In der 1. Zeile ist ein Fehler aufgetreten. Bitte prüfe, ob du die Anweisungen gelöscht hast oder ob zusätzliche Daten vorhanden sind.", + "invalidEmails": "recipient_email enthält falsche/ungültige E-Mails in den folgenden Zeilen: {{rowList}}. Bitte entferne ungültige Emails oder füge gültige Emails hinzu.", + "generalError": "Es ist ein Fehler aufgetreten. Bitte versuche es nach einer Weile erneut." + }, + "errorAddRecipient": { + "unitsNotProvided": "Pflicht", + "requiredForNotifications": "Benötigt (für Email Empfänger)", + "emailInvalid": "Ungültige Email" + }, + "successUploadCSV": { + "ignoredColumns": "Zusätzliche Spalten wurden ignoriert" + }, + "importInstructions": "Bitte lesen Sie die <2>Dokumentation hier, lade die <5>Excel-Vorlage hier und die <8>CSV-Vorlage hier herunter.", + "tableHeaders": { + "recipient_name": "Empfängername", + "recipient_email": "Empfängeremail", + "recipient_notify": "Email senden?", + "units": "Einheiten", + "recipient_message": "Nachricht" + }, + "tableHeaderHelpText": { + "recipient_name": "Optional. Name des Empfängers, wird auf der Urkunde angezeigt, und falls eingewilligt, in der Email, die an diesen geschickt wird. Benötigt, wenn Emails verschickt werden sollen.", + "recipient_email": "Optional. Benötigt um die Urkunde per Email an den Empfänger zu schicken.", + "recipient_notify": "Optional. Wähle \"Ja\", wenn du möchtest, dass Plant-for-the-Planet den Empfänger automatisch per Email informiert.", + "units": "Pflicht. Anzahl der Bäume für den Empfänger, z.B, 5 für 5 Bäume.", + "recipient_message": "Optional. Nachricht an den Empfänger, die in der Email enthalten ist, wenn Benachrichtigen auf \"Ja\" steht. Wenn nichts angegeben wird, wird eine Standardnachricht gesendet." + }, + "donationSuccess": "Deine Spende war erfolgreich. Du wirst in Kürze zur Anzeige der Spendendetails weitergeleitet...", + "donationError": { + "planet_cash_insufficient_credit": "Verfügbares Guthaben = {{availableBalance}}. Bitte lade Guthaben auf dein PlanetCash-Konto auf, um diese Spende zu tätigen.", + "default": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es nach einer Weile erneut.", + "planet_cash_payment_failure": "Die Transaktion ist fehlgeschlagen. {{reason}}", + "planet_cash_invalid_project": "Du kannst für das ausgewählte Projekt nicht spenden." + }, + "titleAddRecipientButton": "Empfänger zur Tabelle hinzufügen", + "notifyRecipientOptions": { + "yes": "Ja", + "no": "Nein" + }, + "fileUploadWarning": "Dies wird die bestehenden Empfängerdaten löschen, möchtest du fortfahren?", + "unsavedDataWarning": "Einige Empfängerdaten sind nicht gespeichert. Möchtest du fortfahren? Nicht gespeicherte Daten gehen verloren." + } +} diff --git a/public/static/locales/de/donationLink.json b/public/static/locales/de/donationLink.json index 7147243c60..e384b42ae0 100644 --- a/public/static/locales/de/donationLink.json +++ b/public/static/locales/de/donationLink.json @@ -1,23 +1,25 @@ { - "donationLinkTitle": "Erstelle deinen Spenden-Link", - "donationLinkDescription": "Gestalte den Spenden-Link so, dass er deinen Bedürfnissen entspricht, damit deine Spender ein tolles Erlebnis haben. Verwende die Vorschau, um zu sehen, wie der Link am Ende aussehen wird.", - "qrCodeDiscription": "Anstelle des Links kann auch der QR-Code verwendet werden, um zum Projekt zu gelangen.", - "labelCountry": "Land", - "labelLanguages": "Sprache", - "countryLanguageTitle": "Land und Sprache einstellen", - "projectTitle": "Dein Projekt einstellen", - "treeCounterTitle": "Unterstütze meinen TreeCounter", - "testingTitle": "Testmodus", - "urlTitle": "Deine Spenden-Link-URL", - "qrCodeTitle": "Spenden-Link QR-Code", - "languages": "Sprachen", - "preview": "Vorschau", - "copy": "Kopieren", - "treeCounterSubtitle": "Baumspenden über diesen Link unterstützen direkt mein Profil", - "testingModeSubtitle1": "Verwende zum Testen den Link, der jetzt angezeigt wird. Dies dient nur zu Testzwecken. Damit der richtige Link freigegeben werden kann, musst du den Testmodus deaktivieren.", - "testingModeSubtitle2": "Du kannst den Spendenvorgang mit Kartendaten testen unter", - "linkAndQRCodeUpdatedMessage": "Link und QR-Code wurden aktualisiert.", - "treeCounterPrivateAccountSubtitle": "Um dein Profil zu unterstützen, musst du es in den Kontoeinstellungen auf öffentlich setzen.", - "automaticSelection": "Automatische Auswahl", - "qrCodeFileName": "Spenden-Link-QR-Code" -} \ No newline at end of file + "DonationLink": { + "donationLinkTitle": "Erstelle deinen Spenden-Link", + "donationLinkDescription": "Gestalte den Spenden-Link so, dass er deinen Bedürfnissen entspricht, damit deine Spender ein tolles Erlebnis haben. Verwende die Vorschau, um zu sehen, wie der Link am Ende aussehen wird.", + "qrCodeDiscription": "Anstelle des Links kann auch der QR-Code verwendet werden, um zum Projekt zu gelangen.", + "labelCountry": "Land", + "labelLanguages": "Sprache", + "countryLanguageTitle": "Land und Sprache einstellen", + "projectTitle": "Dein Projekt einstellen", + "treeCounterTitle": "Unterstütze meinen TreeCounter", + "testingTitle": "Testmodus", + "urlTitle": "Deine Spenden-Link-URL", + "qrCodeTitle": "Spenden-Link QR-Code", + "languages": "Sprachen", + "preview": "Vorschau", + "copy": "Kopieren", + "treeCounterSubtitle": "Baumspenden über diesen Link unterstützen direkt mein Profil", + "testingModeSubtitle1": "Verwende zum Testen den Link, der jetzt angezeigt wird. Dies dient nur zu Testzwecken. Damit der richtige Link freigegeben werden kann, musst du den Testmodus deaktivieren.", + "testingModeSubtitle2": "Du kannst den Spendenvorgang mit Kartendaten testen unter", + "linkAndQRCodeUpdatedMessage": "Link und QR-Code wurden aktualisiert.", + "treeCounterPrivateAccountSubtitle": "Um dein Profil zu unterstützen, musst du es in den Kontoeinstellungen auf öffentlich setzen.", + "automaticSelection": "Automatische Auswahl", + "qrCodeFileName": "Spenden-Link-QR-Code" + } +} diff --git a/public/static/locales/de/editProfile.json b/public/static/locales/de/editProfile.json index e579dcc477..f3fad99da1 100644 --- a/public/static/locales/de/editProfile.json +++ b/public/static/locales/de/editProfile.json @@ -1,60 +1,62 @@ { - "loginTitle": "{{log}} - Anmeldung", - "signUpText": "Registrierung vervollständigen", - "profileTypes": "{{item.title}}", - "createAccount": "Konto erstellen", - "individual": "Person", - "tpo": "Renaturierungsorganisation", - "education": "Schule", - "organization": "Firma", - "profileCreated": "Profil erfolgreich erstellt!", - "profileCreationFailed": "Fehler bei der Profilerstellung. Bitte versuchen Sie es erneut.", - "profileCreationError": "Fehler bei der Profilerstellung.", - "edit": "Profil bearbeiten", - "privateAccountTxt": "Dein Profil wird ausgeblendet und nur Dein Vorname erscheint in der Bestenliste", - "save": "Speichern", - "profilePicUpdated": "Profilbild wird aktualisiert...", - "profileSaved": "Erfolgreich gespeichert!", - "profileSaveFailed": "Fehler beim Aktualisieren des Profils.", - "changeAccountToPublic": "Konto auf öffentlich umstellen", - "publicAccount": "Öffentliches Konto", - "accountPrivacyChangeText": "Um ein Profil-Widget erstellen zu können, musst Du ein öffentliches Konto haben. Wenn Du auf \"Weiter\" klickst, änderst Du Deine Datenschutzeinstellungen auf \"öffentlich\".", - "continue": "Weiter", - "cancel": "Abbrechen", - "termAndCondition": "Ich stimme den <0>Nutzungsbedingungen der Plant-for-the-Planet Plattform zu.", - "termAndConditionError": "Bitte stimme den Nutzungsbedingungen zu", - "fieldLabels": { - "profileType": "Ich bin ein", - "firstName": "Vorname", - "lastName": "Nachname", - "name": "Name der {{type}}", - "email": "Email", - "address": "Adresse", - "city": "Stadt", - "zipCode": "Postleitzahl", - "country": "Land", - "bio": "Profilbeschreibung", - "website": "Website", - "privateAccount": "Privatkonto", - "subscribe": "Nachrichten per E-Mail abonnieren" - }, - "validationErrors": { - "maxChars": "Sollte {{max}} oder weniger Buchstaben haben", - "firstNameRequired": "Vorname ist ein Pflichtfeld", - "firstNameInvalid": "Vorname ist ungültig. Er kann nicht mit einem Sonderzeichen beginnen, und nur diese Sonderzeichen sind erlaubt: Leerzeichen ' . -", - "lastNameRequired": "Nachname ist ein Pflichtfeld", - "lastNameInvalid": "Nachname ist ungültig. Er kann kann nicht mit einem Sonderzeichen beginnen, und nur diese Sonderzeichen sind erlaubt: Leerzeichen ' . -", - "emailRequired": "Email ist ein Pflichtfeld", - "nameRequired": "Bitte gib einen Namen ein", - "nameInvalid": "Name ist ungültig. Nur diese Sonderzeichen sind erlaubt: Leerzeichen . , ' & ( ) ! -", - "addressRequired": "Adresse ist ein Pflichfeld", - "addressInvalid": "Adresse ist ungültig. Nur diese Sonderzeichen sind erlaubt: Leerzeichen . , # - /", - "cityRequired": "Stadt ist ein Pflichtfeld", - "cityInvalid": "Stadt ist ungültig. Nur Buchstaben und diese Sonderzeichen sind erlaubt: Leerzeichen . , ( ) -", - "zipCodeRequired": "Postleitzahl ist ein Pflichtfeld", - "zipCodeInvalid": "Postleitzahl ist ungültig", - "websiteInvalid": "Bitte gib eine gültige Website-URL ein", - "countryRequired": "Land ist ein Pflichtfeld", - "companyRequired": "Firmenname ist ein Pflichtfeld" + "EditProfile": { + "loginTitle": "{{log}} - Anmeldung", + "signUpText": "Registrierung vervollständigen", + "profileTypes": "{{item.title}}", + "createAccount": "Konto erstellen", + "individual": "Person", + "tpo": "Renaturierungsorganisation", + "education": "Schule", + "organization": "Firma", + "profileCreated": "Profil erfolgreich erstellt!", + "profileCreationFailed": "Fehler bei der Profilerstellung. Bitte versuchen Sie es erneut.", + "profileCreationError": "Fehler bei der Profilerstellung.", + "edit": "Profil bearbeiten", + "privateAccountTxt": "Dein Profil wird ausgeblendet und nur Dein Vorname erscheint in der Bestenliste", + "save": "Speichern", + "profilePicUpdated": "Profilbild wird aktualisiert...", + "profileSaved": "Erfolgreich gespeichert!", + "profileSaveFailed": "Fehler beim Aktualisieren des Profils.", + "changeAccountToPublic": "Konto auf öffentlich umstellen", + "publicAccount": "Öffentliches Konto", + "accountPrivacyChangeText": "Um ein Profil-Widget erstellen zu können, musst Du ein öffentliches Konto haben. Wenn Du auf \"Weiter\" klickst, änderst Du Deine Datenschutzeinstellungen auf \"öffentlich\".", + "continue": "Weiter", + "cancel": "Abbrechen", + "termAndCondition": "Ich stimme den <0>Nutzungsbedingungen der Plant-for-the-Planet Plattform zu.", + "termAndConditionError": "Bitte stimme den Nutzungsbedingungen zu", + "fieldLabels": { + "profileType": "Ich bin ein", + "firstName": "Vorname", + "lastName": "Nachname", + "name": "Name der {{type}}", + "email": "Email", + "address": "Adresse", + "city": "Stadt", + "zipCode": "Postleitzahl", + "country": "Land", + "bio": "Profilbeschreibung", + "website": "Website", + "privateAccount": "Privatkonto", + "subscribe": "Nachrichten per E-Mail abonnieren" + }, + "validationErrors": { + "maxChars": "Sollte {{max}} oder weniger Buchstaben haben", + "firstNameRequired": "Vorname ist ein Pflichtfeld", + "firstNameInvalid": "Vorname ist ungültig. Er kann nicht mit einem Sonderzeichen beginnen, und nur diese Sonderzeichen sind erlaubt: Leerzeichen ' . -", + "lastNameRequired": "Nachname ist ein Pflichtfeld", + "lastNameInvalid": "Nachname ist ungültig. Er kann kann nicht mit einem Sonderzeichen beginnen, und nur diese Sonderzeichen sind erlaubt: Leerzeichen ' . -", + "emailRequired": "Email ist ein Pflichtfeld", + "nameRequired": "Bitte gib einen Namen ein", + "nameInvalid": "Name ist ungültig. Nur diese Sonderzeichen sind erlaubt: Leerzeichen . , ' & ( ) ! -", + "addressRequired": "Adresse ist ein Pflichfeld", + "addressInvalid": "Adresse ist ungültig. Nur diese Sonderzeichen sind erlaubt: Leerzeichen . , # - /", + "cityRequired": "Stadt ist ein Pflichtfeld", + "cityInvalid": "Stadt ist ungültig. Nur Buchstaben und diese Sonderzeichen sind erlaubt: Leerzeichen . , ( ) -", + "zipCodeRequired": "Postleitzahl ist ein Pflichtfeld", + "zipCodeInvalid": "Postleitzahl ist ungültig", + "websiteInvalid": "Bitte gib eine gültige Website-URL ein", + "countryRequired": "Land ist ein Pflichtfeld", + "companyRequired": "Firmenname ist ein Pflichtfeld" + } } } diff --git a/public/static/locales/de/giftfunds.json b/public/static/locales/de/giftfunds.json index bf0acd2b65..9821818cdd 100644 --- a/public/static/locales/de/giftfunds.json +++ b/public/static/locales/de/giftfunds.json @@ -1,7 +1,9 @@ { - "title": "GiftFund", - "description1": "Wenn du diese Seite sehen, dann hast du noch Guthaben in deinem GiftFund für dein aktives PlanetCash Konto. Prüfe die Informationen unten.", - "description2": "Wenn du Fragen hast, wende dich bitte an deinen Key Account Manager.", - "project": "Projekt", - "units": "Verfügbare Einheiten" -} \ No newline at end of file + "GiftFunds": { + "title": "GiftFund", + "description1": "Wenn du diese Seite sehen, dann hast du noch Guthaben in deinem GiftFund für dein aktives PlanetCash Konto. Prüfe die Informationen unten.", + "description2": "Wenn du Fragen hast, wende dich bitte an deinen Key Account Manager.", + "project": "Projekt", + "units": "Verfügbare Einheiten" + } +} diff --git a/public/static/locales/de/leaderboard.json b/public/static/locales/de/leaderboard.json index cb91f9d619..deddf08d17 100644 --- a/public/static/locales/de/leaderboard.json +++ b/public/static/locales/de/leaderboard.json @@ -1,7 +1,9 @@ { - "forestFrontrunners": "Baum-Bestenliste", - "mostRecent": "Neueste Spenden", - "mostTrees": "Die meisten Bäume", - "videoTitle": "Und schließlich dies", - "searchUser": "Benutzer suchen" -} \ No newline at end of file + "LeaderBoard": { + "forestFrontrunners": "Baum-Bestenliste", + "mostRecent": "Neueste Spenden", + "mostTrees": "Die meisten Bäume", + "videoTitle": "Und schließlich dies", + "searchUser": "Benutzer suchen" + } +} diff --git a/public/static/locales/de/managePayouts.json b/public/static/locales/de/managePayouts.json index 9cf94c501a..4cee86ffd2 100644 --- a/public/static/locales/de/managePayouts.json +++ b/public/static/locales/de/managePayouts.json @@ -1,74 +1,76 @@ { - "title": "Auszahlungen verwalten", - "description": "Halte deine Auszahlungsinformationen auf dem neuesten Stand (z. B. Zeitplan, Bankverbindung), um reibungslose Auszahlungen zu ermöglichen", - "tabPayoutSchedule": "Auszahlungszeitplan", - "tabAddBankDetails": "Bankverbindung hinzufügen", - "tabOverview": "Übersicht", - "payoutInformation1": "Die Auszahlung erfolgt automatisch jedes Jahr oder wenn eine Organisation 30.000 EUR oder den Gegenwert in einer anderen Währung gesammelt hat.", - "payoutInformation2": "Die Auszahlungen werden von der Plant-for-the-Planet Foundation und ihren Schwesterorganisationen vorgenommen, z.B. Plant-for-the-Planet US, Plant-for-the-Planet Switzerland usw.", - "payoutInformation3": "Du kannst den Auszahlungszeitplan anpassen und erhältst häufige Auszahlungen, solange du das Kriterium des Mindestbetrags von 1.500 EUR erfüllen.", - "supportInformation": "Wenn du einen Ausnahmefall hast, wenden dich bitte an<1><2>support@plant-for-the-planet.org.", - "scheduleFrequencies": { - "monthly": "Monatlich", - "quarterly": "Vierteljährlich", - "semiannually": "Halbjährlich", - "annually": "Jährlich", - "manual": "manuell" - }, - "defaultCurrency": "Standard", - "labels": { - "currency": "Währung", - "scheduleFrequency": "Häufigkeit der Zahlungen", - "payoutMinAmount": "Mindestauszahlungsbetrag", - "bankName": "Name der Bank", - "bankAddress": "Adresse der Bank", - "bankCountry": "Land der Bank", - "holderName": "Name des Kontoinhabers", - "holderAddress": "Adresse des Kontoinhabers", - "remarks": "Zusätzliche Details", - "accountNumber": "IBAN / Kontonummer", - "routingNumber": "ABA / Routing-Nummer (nur US)", - "bic": "BIC / SWIFT", - "branchCode": "Filialnummer" - }, - "errors": { - "scheduleFrequencyRequired": "Zahlungsfrequenz ist erforderlich", - "payoutMinAmountRequired": "Mindestauszahlungsbetrag ist erforderlich", - "payoutMinAmountTooLow": "Der Mindestauszahlungsbetrag sollte mindestens {{currency}} {{minAmount}} betragen", - "bankNameRequired": "Der Name der Bank ist erforderlich.", - "bankAddressRequired": "Die Bankadresse ist erforderlich.", - "holderNameRequired": "Der Name des Inhabers ist erforderlich.", - "holderAddressRequired": "Die Adresse des Inhabers ist erforderlich.", - "accountNumberRequired": "Die Kontonummer ist erforderlich.", - "bicRequired": "BIC / SWIFT-Code ist erforderlich.", - "noAccountFound": "Es wurde kein Konto abgefragt" - }, - "placeholders": { - "payoutMinAmount": "Sollte mindestens {{currency}} {{minAmount}} sein", - "bankName": "z.B. Century Bank LLC", - "bankAddress": "z. B. 1 West St, Hamington Way, MA, 10311, USA", - "holderName": "z.B. John Doe", - "holderAddress": "z. B. 21 Penn Avenue, MA 10317 USA", - "remarks": "z.B. lease include ref acct=1237 on the transfer." - }, - "helperText": { - "currency": "Wähle \"Standard\", wenn es sich um dein Standard-Bankkonto handelt. Wenn du spezielle Angaben für eine Währung machen musst, wähle diese bitte hier aus und gib die Details an. Wir werden auch die Standard-Mindestbeträge für eine Auszahlung verwenden.", - "remarks": "Gib hier zusätzliche Einzelheiten an, z. B. Angaben zur zwischengeschalteten Bank, PC (Purpose Codes) oder andere Referenzen." - }, - "saveButton": "Speichern", - "accountError": { - "min_amount_range": "Der Mindestauszahlungsbetrag muss mindestens {{currency}} {{min}} betragen.", - "min_amount_forbidden": "Du kannst für das Standardkonto keinen Mindestbetrag für die Auszahlung festlegen.", - "account_duplicate": "Es gibt bereits ein {{currency}}-Konto.", - "default": "Beim Erstellen des Kontos ist ein Fehler aufgetreten. Bitte versuche es nach einer Weile erneut." - }, - "accountCreationSuccess": "Deine Kontodaten wurden erfolgreich gespeichert.", - "accountUpdationSuccess": "Dein Kontodaten wurden erfolgreich aktualisiert.", - "scheduleSaveSuccess": "Dein Auszahlungsplan wurde erfolgreich gespeichert.", - "editAccountButton": "Konto bearbeiten", - "accountTitleText": "Überweisung in {{currency}}", - "addBankDetailsButton": "Bankverbindung hinzufügen", - "noBankAccountText": "Du hast noch keine Bankverbindung angegeben.", - "editBankAccountTitle": "Konto bearbeiten", - "minPayoutText": "Min. Auszahlung: {{amount}}" -} \ No newline at end of file + "ManagePayouts": { + "title": "Auszahlungen verwalten", + "description": "Halte deine Auszahlungsinformationen auf dem neuesten Stand (z. B. Zeitplan, Bankverbindung), um reibungslose Auszahlungen zu ermöglichen", + "tabPayoutSchedule": "Auszahlungszeitplan", + "tabAddBankDetails": "Bankverbindung hinzufügen", + "tabOverview": "Übersicht", + "payoutInformation1": "Die Auszahlung erfolgt automatisch jedes Jahr oder wenn eine Organisation 30.000 EUR oder den Gegenwert in einer anderen Währung gesammelt hat.", + "payoutInformation2": "Die Auszahlungen werden von der Plant-for-the-Planet Foundation und ihren Schwesterorganisationen vorgenommen, z.B. Plant-for-the-Planet US, Plant-for-the-Planet Switzerland usw.", + "payoutInformation3": "Du kannst den Auszahlungszeitplan anpassen und erhältst häufige Auszahlungen, solange du das Kriterium des Mindestbetrags von 1.500 EUR erfüllen.", + "supportInformation": "Wenn du einen Ausnahmefall hast, wenden dich bitte an<1><2>support@plant-for-the-planet.org.", + "scheduleFrequencies": { + "monthly": "Monatlich", + "quarterly": "Vierteljährlich", + "semiannually": "Halbjährlich", + "annually": "Jährlich", + "manual": "manuell" + }, + "defaultCurrency": "Standard", + "labels": { + "currency": "Währung", + "scheduleFrequency": "Häufigkeit der Zahlungen", + "payoutMinAmount": "Mindestauszahlungsbetrag", + "bankName": "Name der Bank", + "bankAddress": "Adresse der Bank", + "bankCountry": "Land der Bank", + "holderName": "Name des Kontoinhabers", + "holderAddress": "Adresse des Kontoinhabers", + "remarks": "Zusätzliche Details", + "accountNumber": "IBAN / Kontonummer", + "routingNumber": "ABA / Routing-Nummer (nur US)", + "bic": "BIC / SWIFT", + "branchCode": "Filialnummer" + }, + "errors": { + "scheduleFrequencyRequired": "Zahlungsfrequenz ist erforderlich", + "payoutMinAmountRequired": "Mindestauszahlungsbetrag ist erforderlich", + "payoutMinAmountTooLow": "Der Mindestauszahlungsbetrag sollte mindestens {{currency}} {{minAmount}} betragen", + "bankNameRequired": "Der Name der Bank ist erforderlich.", + "bankAddressRequired": "Die Bankadresse ist erforderlich.", + "holderNameRequired": "Der Name des Inhabers ist erforderlich.", + "holderAddressRequired": "Die Adresse des Inhabers ist erforderlich.", + "accountNumberRequired": "Die Kontonummer ist erforderlich.", + "bicRequired": "BIC / SWIFT-Code ist erforderlich.", + "noAccountFound": "Es wurde kein Konto abgefragt" + }, + "placeholders": { + "payoutMinAmount": "Sollte mindestens {{currency}} {{minAmount}} sein", + "bankName": "z.B. Century Bank LLC", + "bankAddress": "z. B. 1 West St, Hamington Way, MA, 10311, USA", + "holderName": "z.B. John Doe", + "holderAddress": "z. B. 21 Penn Avenue, MA 10317 USA", + "remarks": "z.B. lease include ref acct=1237 on the transfer." + }, + "helperText": { + "currency": "Wähle \"Standard\", wenn es sich um dein Standard-Bankkonto handelt. Wenn du spezielle Angaben für eine Währung machen musst, wähle diese bitte hier aus und gib die Details an. Wir werden auch die Standard-Mindestbeträge für eine Auszahlung verwenden.", + "remarks": "Gib hier zusätzliche Einzelheiten an, z. B. Angaben zur zwischengeschalteten Bank, PC (Purpose Codes) oder andere Referenzen." + }, + "saveButton": "Speichern", + "accountError": { + "min_amount_range": "Der Mindestauszahlungsbetrag muss mindestens {{currency}} {{min}} betragen.", + "min_amount_forbidden": "Du kannst für das Standardkonto keinen Mindestbetrag für die Auszahlung festlegen.", + "account_duplicate": "Es gibt bereits ein {{currency}}-Konto.", + "default": "Beim Erstellen des Kontos ist ein Fehler aufgetreten. Bitte versuche es nach einer Weile erneut." + }, + "accountCreationSuccess": "Deine Kontodaten wurden erfolgreich gespeichert.", + "accountUpdationSuccess": "Dein Kontodaten wurden erfolgreich aktualisiert.", + "scheduleSaveSuccess": "Dein Auszahlungsplan wurde erfolgreich gespeichert.", + "editAccountButton": "Konto bearbeiten", + "accountTitleText": "Überweisung in {{currency}}", + "addBankDetailsButton": "Bankverbindung hinzufügen", + "noBankAccountText": "Du hast noch keine Bankverbindung angegeben.", + "editBankAccountTitle": "Konto bearbeiten", + "minPayoutText": "Min. Auszahlung: {{amount}}" + } +} diff --git a/public/static/locales/de/me.json b/public/static/locales/de/me.json index 6fd919799f..c311ebf3ae 100644 --- a/public/static/locales/de/me.json +++ b/public/static/locales/de/me.json @@ -1,277 +1,279 @@ { - "managePayouts": { - "menuText": "Auszahlungen verwalten", - "titleOverview": "Auszahlungen verwalten - Übersicht", - "titleAddBankDetails": "Auszahlungen verwalten - Bankdaten hinzufügen", - "titlePayoutSchedule": "Auszahlungen verwalten - Auszahlungen planen", - "titleEditBankDetails": "Auszahlungen verwalten - Bankdaten bearbeiten" - }, - "donationLinkTitle": "Spenden-Link erstellen", - "planetcash": { - "menuText": "PlanetCash", - "submenuText": "Mein PlanetCash", - "titleAccount": "PlanetCash - Konten", - "titleTransactions": "PlanetCash - Transaktionen", - "titleCreateAccount": "PlanetCash - Konto erstellen" - }, - "treesPlanted": "Bäume gepflanzt", - "treesPlanted_plural": "Bäume gepflanzt", - "bulkCodesTitleStep3": "Baumurkunden & Codes erzeugen - Codes generieren", - "bulkCodesTitleStep2": "Baumurkunden & Codes erzeugen - Projekt auswählen", - "bulkCodesTitle": "Baumurkunden & Codes erzeugen - Methode auswählen", - "bulkCodes": "Baumurkunden & Codes", - "target": "Ziel", - "editTarget": "Ziel ändern", - "share": "Teilen", - "registerTrees": "Bäume registrieren", - "registerTree": "Baum registrieren", - "linkedIn": "LinkedIn", - "registerTreesDescription": "Registriere Bäume, die Du z. B. im Garten selbst gepflanzt hast.", - "myForest": "Mein Wald", - "giftToGiftee": "Geschenk an {{gifteeName}}", - "settingManageProject": "Projekte verwalten", - "deleteAccount": "Konto löschen", - "userTree": "Bäume registrieren", - "accountHistory": "Kontoverlauf", - "logout": "Abmelden", - "close": "Schließen", - "addTarget": "Ziel hinzufügen", - "noOfTrees": "Wieviele Bäume?", - "datePlanted": "Pflanzdatum", - "speciesIsRequired": "Art ist erforderlich", - "treeSpecies": "Baumarten", - "drawPolygon": "Bitte zeichne das Gebiet ein, in dem Du die Bäume gepflanzt hast. Wenn Du fertig bist, klicke wieder auf den ersten Standort.", - "selectLocation": "Baumpflanzungsort auf der Karte auswählen", - "registerButton": "Registrieren", - "startDrawing": "Zeichnung beginnen", - "save": "Speichern", - "treesRequired": "Anzahl Bäume ist erforderlich", - "wentWrong": "Etwas ging schief. Bitte kontaktiere support@plant-for-the-planet.org", - "locationMissing": "Standort auf der Karte auswählen", - "uploadPhotos": "Fotos hochladen", - "dragHere": "oder hierher ziehen", - "contribNotFound": "Beitrag nicht gefunden", - "errorOccured": "Aufgetretener Fehler", - "contribSuccess": "Erfolgreich hinzugefügt {{treeCount}} {{treeSpecies}} 🌳 vom {{plantDate}}", - "moreThanOne": "mindestens 1 Baum erforderlich", - "registered": "Registriert", - "receivedTrees": "Empfangene Bäume", - "redeemedTrees": "Eingelöste Bäume", - "myAccount": "Mein Konto", - "all": "Alle", - "noRecords": "Keine Einträge", - "filters": "Filter", - "registeredTrees": "Registrierte Bäume", - "embedWidget": "Widget einbetten", - "donationLink": "Spenden-Link erstellen", - "gift": "Geschenk", - "donation": "Spende", - "tree-donation": "Baumspende", - "tree-gift": "Baumgeschenk", - "tree-cash": "TreeCash", - "planet-cash": "PlanetCash", - "trees": "Bäume", - "amount": "Betrag", - "created": "Erstellungsdatum", - "paymentMethod": "Zahlungsmethode", - "frequency": "Häufigkeit", - "monthly": "Monatlich", - "yearly": "Jährlich", - "totalDonated": "Insgesamt gespendet", - "firstDonation": "Datum der ersten Spende", - "donorNameRequired": "Name des Spenders erforderlich", - "donationAmountRequired": "Spendenbetrag erforderlich", - "frequencyRequired": "Häufigkeit erforderlich", - "project": "Projektname", - "planetCashPayment": "PlanetCash Zahlung", - "method": "Zahlungsmethode", - "unitCost": "Kosten pro {{unitType}}", - "treeCount": "Baumanzahl", - "lastUpdate": "Letzte Aktualisierung", - "donorCertificate": "Spenderzertifikat", - "editDonation": "Spende bearbeiten", - "pauseDonation": "Spende pausieren", - "cancelDonation": "Spende beenden", - "reactivateDonation": "Spende wieder aktivieren", - "resumeDonation": "Spende weiterführen", - "donationName": "Name der Spende", - "donationAmount": "Spendenbetrag", - "makeChanges": "Ändern", - "cancel": "Abbrechen", - "yes": "Ja", - "no": "Nein", - "editDonationConfirmation": "Spende bearbeiten", - "editDonationDescription": "Du kannst folgendes ändern:", - "pauseDonationConfirmation": "Spende pausieren", - "pauseDonationDescription": "Du kannst sie nach der Pause weiter fortführen.", - "pauseUntilResume": "Pausieren bis ich weitermache", - "pausedUntilResumed": "Pausiert bis zur Wiederaufnahme", - "pausedUntil": "Pausiert bis", - "pauseUntilDate": "Pausieren bis zum gewählten Datum", - "reactivateDonationConfirmation": "Spende wieder aktivieren", - "reactivateDonationDescription": "Deine Spende wird wieder aktiviert und zum Datum {{currentPeriodEnds}} weitergeführt.", - "cancelDonationConfirmation": "Spende beenden", - "cancelDonationDescription": "Einmal beendet kann die Spende nicht weitergeführt werden.", - "cancelDonationPaypalDescription": "Diese Spende wird sofort storniert und kann nicht wieder aufgenommen werden.", - "cancelledOn": "Beendet am", - "willBeCancelledOn": "Wird beendet am", - "nextOn": "Nächstes Mal am", - "download": "Herunterladen", - "donations": "Spenden", - "in-progress": "In Bearbeitung", - "donation-in-progress": "In Bearbeitung", - "donation-tree-cash": "TreeCash", - "donation-success": "Erfolgreich", - "cancelled": "Abgebrochen", - "card": "Karte", - "sepa": "SEPA", - "success": "Erfolgreich", - "paid": "Erfolgreich", - "initiated": "Initiiert", - "failed": "Fehlgeschlagen", - "pending": "Ausstehend", - "refunded": "Erstattet", - "referred": "Weitergeleitet", - "in-dispute": "Strittig", - "dispute-lost": "Streitfall verloren", - "nameForest": "Wald von {{name}}", - "taxReceipt": "Spendenbescheinigung", - "history": "Historie/Spendenbescheinigung", - "recurrency": "Dauerspenden", - "new": "Neu", - "beta": "Beta", - "date": "Datum", - "treemapper": "TreeMapper", - "register-trees": "Bäume registrieren", - "manage-projects": "Projekte verwalten", - "app-payouts": "App Auszahlungen", - "app-payout-open": "Offene Auszahlungen", - "app-payout-pending": "Ausstehende Auszahlungen", - "app-payout-assigned": "Angewiesene Auszahlungen", - "app-payout-complete": "Abgeschlossene Auszahlungen", - "app-payout": "App Auszahlung", - "reference": "Referenz", - "fee": "Gebühr", - "net": "NET", - "status": "Status", - "paymentDate": "Zahlungsdatum", - "bankName": "Bankname", - "accountHolder": "Kontoinhaber", - "aba": "ABA", - "bic": "BIC", - "iban": "IBAN", - "swift": "SWIFT", - "isDefault": "Standard-Konto", - "bankAccountCreated": "Bankkonto erstellt", - "bankAccountUpdated": "Bankkonto aktualisiert", - "donation-all": "Spenden", - "donation-canceled": "Abgebrochen", - "payout-all": "Auszahlungen", - "payout-action-required": "Maßnahme erforderlich", - "payout-pending": "Ausstehend", - "payout-completed": "Abgeschlossen", - "donorName": "Spendername", - "paidAmount": "Bezahlter Betrag", - "projectGuid": "Projekt-GUID", - "totalAmount": "Gesamtbetrag", - "disputeFee": "Streitgebühr", - "planetFee": "Planet Gebühr", - "transactionFee": "Transaktionsgebühr", - "transferFee": "Überweisungsgebühr", - "giftComment": "Kommentar (Privat)", - "giftOccasion": "Anlass", - "open": "Offen", - "downloads": "Downloads", - "account": "Konto", - "loadMore": "Mehr laden", - "setTarget": "Ziel setzen", - "targetSave": "Speichern", - "targetErrorMessage": "Zahl muss größer als Null sein", - "taxDeductibleReceipt": "Spendenbescheinigung", - "giftCertificate": "Geschenkzertifikat", - "downloadCodes": "Codes herunterladen", - "downloadCodesGeneralError": "Download fehlgeschlagen. Bitte versuche es später noch einmal.", - "downloadCodesNetworkError": "Codes können nicht abgerufen werden. Bitte überprüfe deine Verbindung.", - "paypal-paypal": "Paypal", - "stripe-": "Stripe", - "unknown-method": "Unbekannt", - "stripe-sofort": "Sofort (Stripe)", - "tree-cash-tree-cash": "TreeCash", - "planet-cash-planet-cash": "PlanetCash", - "stripe-card": "Kreditkarte", - "stripe-giropay": "GiroPay (Stripe)", - "action-required": "Maßnahme erforderlich", - "completed": "Abgeschlossen", - "donationsSubTitle": "Verwalte alle deine Spenden und Zahlungen an einem Ort.", - "recurrencySubTitle": "Verwalte alle deine Dauerspenden an einem Ort.", - "payments": "Zahlungen", - "stripe-sepa_debit": "SEPA (Stripe)", - "sepa_debit": "SEPA (Stripe)", - "offline": "Offline", - "offline-offline": "Offline", - "profile": "Profil", - "projects": "Projekte", - "settings": "Einstellungen", - "editProfile": "Profil bearbeiten", - "deleteProfile": "Profil löschen", - "widgets": "Widgets", - "pauseNote": "Hinweis: Du kannst ein Datum auswählen, dass hinter dem aktuellen Zeitraum liegt.", - "cancelImmediately": "Sofort beenden", - "cancelOnSelectedDate": "Wähle Datum der Beendigung", - "conservation-donation": "Spende für den Naturschutz", - "funds-donation": "Spende", - "bouquet-donation": "Bouquet-Spende", - "transferDetails": "Überweisungsdetails", - "beneficiary": "Begünstigter", - "donationNote": { - "offline-offline": "Banküberweisungen benötigen in der Regel 1-5 Werktage, um uns zu erreichen. Sobald deine Überweisung eintrifft, senden wir dir eine Bestätigungs-E-Mail mit deinen Belegen (und deinem Zertifikat).", - "stripe-sepa_debit": "SEPA-Zahlungen dauern 2-14 Arbeitstage (normalerweise 3-5 Tage). Sobald deine Überweisung eintrifft, senden wir dir eine Bestätigungs-E-Mail.", - "stripe-sofort": "SOFORT-Zahlungen dauern 2-14 Werktage (normalerweise 2-3 Tage). Sobald deine Überweisung eintrifft, senden wir dir eine Bestätigungs-E-Mail.", - "in-dispute": "Deine Überweisung wurde angefochten. In der Regel werden von den Zahlungsanbietern $7 - $15.00 Gebühren erhoben. Bitte kontaktiere support@plant-for-the-planet.org für weitere Informationen." - }, - "active": "aktiv", - "canceled": "abgebrochen", - "incomplete": "ausstehend", - "incomplete_expired": "abgebrochen", - "past_due": "überfällig", - "unpaid": "unbezahlt", - "trialing": "aktiv", - "paused": "pausiert", - "plantLocations": "Standorte der Pflanzungen", - "mySpecies": "Meine Arten", - "import": "Importieren", - "pausingDonation": "Spende pausieren", - "cancellingDonation": "Spende abbrechen", - "reactivatingDonation": "Spende wieder aktivieren", - "editingDonation": "Spende bearbeiten", - "noteToWait": "Hinweis: Es dauert 5-10 Minuten, bis die Dauerspende aktualisiert ist.", - "apiKey": "API-Schlüssel", - "apiKeyMessage1": "Der API-Schlüssel ist wie ein digitales Passwort, mit dem du in jeder Anwendung unter deinem Profil auftreten kannst. Er ermöglicht es Anwendungen auch, in deinem Namen zu spenden, PlanetCash zu nutzen und Transaktionen einzusehen.", - "apiKeyMessage2": "Sobald du einen API-Schlüssel generiert hast, benötigen wir eine Zwei-Faktor-Authentifizierung für deine Anmeldung. Diese kannst du beim nächsten Mal einrichten, wenn du dich anmeldest.", - "apiKeyMessage3": "Wenn du den API-Schlüssel neu generierst, wird dein bestehender API-Schlüssel sofort ungültig.", - "regenerateKey": "Schlüssel neu generieren", - "giftFund": "GiftFund", - "dataExplorer": "Daten-Explorer", - "switchUser": "Sich als Benutzer identifizieren", - "switchUserMessage": "Gib die E-Mail-Adresse des Benutzers, zu dem du wechseln möchtest, in das unten stehende Feld ein.", - "profileEmail": "E-Mail des Profils", - "supportPin": "Support-PIN", - "alphaNumeric": "Eingabe eines 4-stelligen alphanumerischen Codes", - "switch": "Identifizieren als", - "targetUser": "Du identifizierst dich derzeit als {{impersonatedEmail}}", - "exitImpersonation": "Fremd-Indentifizierung entfernen", - "enterTheEmail": "Gib die E-Mail des Zielbenutzers ein", - "enterSupportPin": "Gib den Support-PIN des Zielbenutzers ein", - "invalidEmail": "Gib eine gültige Email-Adresse ein", - "wrongEntered": "E-Mail-ID oder Support-PIN ist falsch!", - "donatedTrees": "Gespendete Bäume", - "resetPin": "PIN zurücksetzen", - "donate": "Spenden", - "donated": "Gespendet", - "conserved": "Erhalten", - "restored": "Wiederhergestellt", - "membershipCtaButtonText": "Jetzt mitmachen", - "membershipCtaCopy": "Unterstütze uns und <2>WERDE MITGLIED", - "shareUrl": "Teile URL", - "treesOfTrees": "{{count1}} von {{count2}}" + "Me": { + "managePayouts": { + "menuText": "Auszahlungen verwalten", + "titleOverview": "Auszahlungen verwalten - Übersicht", + "titleAddBankDetails": "Auszahlungen verwalten - Bankdaten hinzufügen", + "titlePayoutSchedule": "Auszahlungen verwalten - Auszahlungen planen", + "titleEditBankDetails": "Auszahlungen verwalten - Bankdaten bearbeiten" + }, + "donationLinkTitle": "Spenden-Link erstellen", + "planetcash": { + "menuText": "PlanetCash", + "submenuText": "Mein PlanetCash", + "titleAccount": "PlanetCash - Konten", + "titleTransactions": "PlanetCash - Transaktionen", + "titleCreateAccount": "PlanetCash - Konto erstellen" + }, + "treesPlanted": "Bäume gepflanzt", + "treesPlanted_plural": "Bäume gepflanzt", + "bulkCodesTitleStep3": "Baumurkunden & Codes erzeugen - Codes generieren", + "bulkCodesTitleStep2": "Baumurkunden & Codes erzeugen - Projekt auswählen", + "bulkCodesTitle": "Baumurkunden & Codes erzeugen - Methode auswählen", + "bulkCodes": "Baumurkunden & Codes", + "target": "Ziel", + "editTarget": "Ziel ändern", + "share": "Teilen", + "registerTrees": "Bäume registrieren", + "registerTree": "Baum registrieren", + "linkedIn": "LinkedIn", + "registerTreesDescription": "Registriere Bäume, die Du z. B. im Garten selbst gepflanzt hast.", + "myForest": "Mein Wald", + "giftToGiftee": "Geschenk an {{gifteeName}}", + "settingManageProject": "Projekte verwalten", + "deleteAccount": "Konto löschen", + "userTree": "Bäume registrieren", + "accountHistory": "Kontoverlauf", + "logout": "Abmelden", + "close": "Schließen", + "addTarget": "Ziel hinzufügen", + "noOfTrees": "Wieviele Bäume?", + "datePlanted": "Pflanzdatum", + "speciesIsRequired": "Art ist erforderlich", + "treeSpecies": "Baumarten", + "drawPolygon": "Bitte zeichne das Gebiet ein, in dem Du die Bäume gepflanzt hast. Wenn Du fertig bist, klicke wieder auf den ersten Standort.", + "selectLocation": "Baumpflanzungsort auf der Karte auswählen", + "registerButton": "Registrieren", + "startDrawing": "Zeichnung beginnen", + "save": "Speichern", + "treesRequired": "Anzahl Bäume ist erforderlich", + "wentWrong": "Etwas ging schief. Bitte kontaktiere support@plant-for-the-planet.org", + "locationMissing": "Standort auf der Karte auswählen", + "uploadPhotos": "Fotos hochladen", + "dragHere": "oder hierher ziehen", + "contribNotFound": "Beitrag nicht gefunden", + "errorOccured": "Aufgetretener Fehler", + "contribSuccess": "Erfolgreich hinzugefügt {{treeCount}} {{treeSpecies}} 🌳 vom {{plantDate}}", + "moreThanOne": "mindestens 1 Baum erforderlich", + "registered": "Registriert", + "receivedTrees": "Empfangene Bäume", + "redeemedTrees": "Eingelöste Bäume", + "myAccount": "Mein Konto", + "all": "Alle", + "noRecords": "Keine Einträge", + "filters": "Filter", + "registeredTrees": "Registrierte Bäume", + "embedWidget": "Widget einbetten", + "donationLink": "Spenden-Link erstellen", + "gift": "Geschenk", + "donation": "Spende", + "tree-donation": "Baumspende", + "tree-gift": "Baumgeschenk", + "tree-cash": "TreeCash", + "planet-cash": "PlanetCash", + "trees": "Bäume", + "amount": "Betrag", + "created": "Erstellungsdatum", + "paymentMethod": "Zahlungsmethode", + "frequency": "Häufigkeit", + "monthly": "Monatlich", + "yearly": "Jährlich", + "totalDonated": "Insgesamt gespendet", + "firstDonation": "Datum der ersten Spende", + "donorNameRequired": "Name des Spenders erforderlich", + "donationAmountRequired": "Spendenbetrag erforderlich", + "frequencyRequired": "Häufigkeit erforderlich", + "project": "Projektname", + "planetCashPayment": "PlanetCash Zahlung", + "method": "Zahlungsmethode", + "unitCost": "Kosten pro {{unitType}}", + "treeCount": "Baumanzahl", + "lastUpdate": "Letzte Aktualisierung", + "donorCertificate": "Spenderzertifikat", + "editDonation": "Spende bearbeiten", + "pauseDonation": "Spende pausieren", + "cancelDonation": "Spende beenden", + "reactivateDonation": "Spende wieder aktivieren", + "resumeDonation": "Spende weiterführen", + "donationName": "Name der Spende", + "donationAmount": "Spendenbetrag", + "makeChanges": "Ändern", + "cancel": "Abbrechen", + "yes": "Ja", + "no": "Nein", + "editDonationConfirmation": "Spende bearbeiten", + "editDonationDescription": "Du kannst folgendes ändern:", + "pauseDonationConfirmation": "Spende pausieren", + "pauseDonationDescription": "Du kannst sie nach der Pause weiter fortführen.", + "pauseUntilResume": "Pausieren bis ich weitermache", + "pausedUntilResumed": "Pausiert bis zur Wiederaufnahme", + "pausedUntil": "Pausiert bis", + "pauseUntilDate": "Pausieren bis zum gewählten Datum", + "reactivateDonationConfirmation": "Spende wieder aktivieren", + "reactivateDonationDescription": "Deine Spende wird wieder aktiviert und zum Datum {{currentPeriodEnds}} weitergeführt.", + "cancelDonationConfirmation": "Spende beenden", + "cancelDonationDescription": "Einmal beendet kann die Spende nicht weitergeführt werden.", + "cancelDonationPaypalDescription": "Diese Spende wird sofort storniert und kann nicht wieder aufgenommen werden.", + "cancelledOn": "Beendet am", + "willBeCancelledOn": "Wird beendet am", + "nextOn": "Nächstes Mal am", + "download": "Herunterladen", + "donations": "Spenden", + "in-progress": "In Bearbeitung", + "donation-in-progress": "In Bearbeitung", + "donation-tree-cash": "TreeCash", + "donation-success": "Erfolgreich", + "cancelled": "Abgebrochen", + "card": "Karte", + "sepa": "SEPA", + "success": "Erfolgreich", + "paid": "Erfolgreich", + "initiated": "Initiiert", + "failed": "Fehlgeschlagen", + "pending": "Ausstehend", + "refunded": "Erstattet", + "referred": "Weitergeleitet", + "in-dispute": "Strittig", + "dispute-lost": "Streitfall verloren", + "nameForest": "Wald von {{name}}", + "taxReceipt": "Spendenbescheinigung", + "history": "Historie/Spendenbescheinigung", + "recurrency": "Dauerspenden", + "new": "Neu", + "beta": "Beta", + "date": "Datum", + "treemapper": "TreeMapper", + "register-trees": "Bäume registrieren", + "manage-projects": "Projekte verwalten", + "app-payouts": "App Auszahlungen", + "app-payout-open": "Offene Auszahlungen", + "app-payout-pending": "Ausstehende Auszahlungen", + "app-payout-assigned": "Angewiesene Auszahlungen", + "app-payout-complete": "Abgeschlossene Auszahlungen", + "app-payout": "App Auszahlung", + "reference": "Referenz", + "fee": "Gebühr", + "net": "NET", + "status": "Status", + "paymentDate": "Zahlungsdatum", + "bankName": "Bankname", + "accountHolder": "Kontoinhaber", + "aba": "ABA", + "bic": "BIC", + "iban": "IBAN", + "swift": "SWIFT", + "isDefault": "Standard-Konto", + "bankAccountCreated": "Bankkonto erstellt", + "bankAccountUpdated": "Bankkonto aktualisiert", + "donation-all": "Spenden", + "donation-canceled": "Abgebrochen", + "payout-all": "Auszahlungen", + "payout-action-required": "Maßnahme erforderlich", + "payout-pending": "Ausstehend", + "payout-completed": "Abgeschlossen", + "donorName": "Spendername", + "paidAmount": "Bezahlter Betrag", + "projectGuid": "Projekt-GUID", + "totalAmount": "Gesamtbetrag", + "disputeFee": "Streitgebühr", + "planetFee": "Planet Gebühr", + "transactionFee": "Transaktionsgebühr", + "transferFee": "Überweisungsgebühr", + "giftComment": "Kommentar (Privat)", + "giftOccasion": "Anlass", + "open": "Offen", + "downloads": "Downloads", + "account": "Konto", + "loadMore": "Mehr laden", + "setTarget": "Ziel setzen", + "targetSave": "Speichern", + "targetErrorMessage": "Zahl muss größer als Null sein", + "taxDeductibleReceipt": "Spendenbescheinigung", + "giftCertificate": "Geschenkzertifikat", + "downloadCodes": "Codes herunterladen", + "downloadCodesGeneralError": "Download fehlgeschlagen. Bitte versuche es später noch einmal.", + "downloadCodesNetworkError": "Codes können nicht abgerufen werden. Bitte überprüfe deine Verbindung.", + "paypal-paypal": "Paypal", + "stripe-": "Stripe", + "unknown-method": "Unbekannt", + "stripe-sofort": "Sofort (Stripe)", + "tree-cash-tree-cash": "TreeCash", + "planet-cash-planet-cash": "PlanetCash", + "stripe-card": "Kreditkarte", + "stripe-giropay": "GiroPay (Stripe)", + "action-required": "Maßnahme erforderlich", + "completed": "Abgeschlossen", + "donationsSubTitle": "Verwalte alle deine Spenden und Zahlungen an einem Ort.", + "recurrencySubTitle": "Verwalte alle deine Dauerspenden an einem Ort.", + "payments": "Zahlungen", + "stripe-sepa_debit": "SEPA (Stripe)", + "sepa_debit": "SEPA (Stripe)", + "offline": "Offline", + "offline-offline": "Offline", + "profile": "Profil", + "projects": "Projekte", + "settings": "Einstellungen", + "editProfile": "Profil bearbeiten", + "deleteProfile": "Profil löschen", + "widgets": "Widgets", + "pauseNote": "Hinweis: Du kannst ein Datum auswählen, dass hinter dem aktuellen Zeitraum liegt.", + "cancelImmediately": "Sofort beenden", + "cancelOnSelectedDate": "Wähle Datum der Beendigung", + "conservation-donation": "Spende für den Naturschutz", + "funds-donation": "Spende", + "bouquet-donation": "Bouquet-Spende", + "transferDetails": "Überweisungsdetails", + "beneficiary": "Begünstigter", + "donationNote": { + "offline-offline": "Banküberweisungen benötigen in der Regel 1-5 Werktage, um uns zu erreichen. Sobald deine Überweisung eintrifft, senden wir dir eine Bestätigungs-E-Mail mit deinen Belegen (und deinem Zertifikat).", + "stripe-sepa_debit": "SEPA-Zahlungen dauern 2-14 Arbeitstage (normalerweise 3-5 Tage). Sobald deine Überweisung eintrifft, senden wir dir eine Bestätigungs-E-Mail.", + "stripe-sofort": "SOFORT-Zahlungen dauern 2-14 Werktage (normalerweise 2-3 Tage). Sobald deine Überweisung eintrifft, senden wir dir eine Bestätigungs-E-Mail.", + "in-dispute": "Deine Überweisung wurde angefochten. In der Regel werden von den Zahlungsanbietern $7 - $15.00 Gebühren erhoben. Bitte kontaktiere support@plant-for-the-planet.org für weitere Informationen." + }, + "active": "aktiv", + "canceled": "abgebrochen", + "incomplete": "ausstehend", + "incomplete_expired": "abgebrochen", + "past_due": "überfällig", + "unpaid": "unbezahlt", + "trialing": "aktiv", + "paused": "pausiert", + "plantLocations": "Standorte der Pflanzungen", + "mySpecies": "Meine Arten", + "import": "Importieren", + "pausingDonation": "Spende pausieren", + "cancellingDonation": "Spende abbrechen", + "reactivatingDonation": "Spende wieder aktivieren", + "editingDonation": "Spende bearbeiten", + "noteToWait": "Hinweis: Es dauert 5-10 Minuten, bis die Dauerspende aktualisiert ist.", + "apiKey": "API-Schlüssel", + "apiKeyMessage1": "Der API-Schlüssel ist wie ein digitales Passwort, mit dem du in jeder Anwendung unter deinem Profil auftreten kannst. Er ermöglicht es Anwendungen auch, in deinem Namen zu spenden, PlanetCash zu nutzen und Transaktionen einzusehen.", + "apiKeyMessage2": "Sobald du einen API-Schlüssel generiert hast, benötigen wir eine Zwei-Faktor-Authentifizierung für deine Anmeldung. Diese kannst du beim nächsten Mal einrichten, wenn du dich anmeldest.", + "apiKeyMessage3": "Wenn du den API-Schlüssel neu generierst, wird dein bestehender API-Schlüssel sofort ungültig.", + "regenerateKey": "Schlüssel neu generieren", + "giftFund": "GiftFund", + "dataExplorer": "Daten-Explorer", + "switchUser": "Sich als Benutzer identifizieren", + "switchUserMessage": "Gib die E-Mail-Adresse des Benutzers, zu dem du wechseln möchtest, in das unten stehende Feld ein.", + "profileEmail": "E-Mail des Profils", + "supportPin": "Support-PIN", + "alphaNumeric": "Eingabe eines 4-stelligen alphanumerischen Codes", + "switch": "Identifizieren als", + "targetUser": "Du identifizierst dich derzeit als {{impersonatedEmail}}", + "exitImpersonation": "Fremd-Indentifizierung entfernen", + "enterTheEmail": "Gib die E-Mail des Zielbenutzers ein", + "enterSupportPin": "Gib den Support-PIN des Zielbenutzers ein", + "invalidEmail": "Gib eine gültige Email-Adresse ein", + "wrongEntered": "E-Mail-ID oder Support-PIN ist falsch!", + "donatedTrees": "Gespendete Bäume", + "resetPin": "PIN zurücksetzen", + "donate": "Spenden", + "donated": "Gespendet", + "conserved": "Erhalten", + "restored": "Wiederhergestellt", + "membershipCtaButtonText": "Jetzt mitmachen", + "membershipCtaCopy": "Unterstütze uns und <2>WERDE MITGLIED", + "shareUrl": "Teile URL", + "treesOfTrees": "{{count1}} von {{count2}}" + } } diff --git a/public/static/locales/de/planet.json b/public/static/locales/de/planet.json index cc3d632cf7..746c32524c 100644 --- a/public/static/locales/de/planet.json +++ b/public/static/locales/de/planet.json @@ -1,14 +1,16 @@ { - "treesDonated": "Gespendete Bäume seit dem Start der Plattform (2019)", - "plantedByTPO": "Gepflanzt von den {{projects}}+ teilnehmenden Projekten", - "plantedGlobally": "An uns gemeldete Bäume seit 2006", - "forestLoss": "Netto-Waldverlust pro Jahr", - "estimateOf": "Schätzung des jährlichen Baumverlusts nach", - "globallySince": "Anzahl der Bäume, die der Billion Tree Campaign (später Trillion Tree Campaign) seit ihrer Gründung durch das UNEP im Jahr 2006 selbst gemeldet wurden", - "restoreTrees": "Wie können wir 1000 Milliarden Bäume wiederherstellen?", - "watchVideo": "Video ansehen", - "selectProjects": "Wie wir Projekte auswählen", - "learnMore": "Erfahre mehr", - "treesDonatedDescription": "Alle von Plant-for-the-Planet verarbeiteten Baumspenden seit 2019. Beinhaltet Bäume, die direkt über unsere Apps gespendet wurden, sowie große Privat- und Unternehmensspenden. Diese Spenden gingen nicht nur an Projekte, die direkt von Plant-for-the-Planet betrieben werden, sondern an alle teilnehmenden Wiederherstellungsorganisationen. Einige gespendete Bäume sind möglicherweise noch nicht gepflanzt worden.", - "treesPlantedDescription": "Alle über Plant-for-the-Planet gespendeten Bäume und Bäume, die von den teilnehmenden Wiederherstellungsorganisationen als gepflanzt gemeldet wurden." -} \ No newline at end of file + "Planet": { + "treesDonated": "Gespendete Bäume seit dem Start der Plattform (2019)", + "plantedByTPO": "Gepflanzt von den {{projects}}+ teilnehmenden Projekten", + "plantedGlobally": "An uns gemeldete Bäume seit 2006", + "forestLoss": "Netto-Waldverlust pro Jahr", + "estimateOf": "Schätzung des jährlichen Baumverlusts nach", + "globallySince": "Anzahl der Bäume, die der Billion Tree Campaign (später Trillion Tree Campaign) seit ihrer Gründung durch das UNEP im Jahr 2006 selbst gemeldet wurden", + "restoreTrees": "Wie können wir 1000 Milliarden Bäume wiederherstellen?", + "watchVideo": "Video ansehen", + "selectProjects": "Wie wir Projekte auswählen", + "learnMore": "Erfahre mehr", + "treesDonatedDescription": "Alle von Plant-for-the-Planet verarbeiteten Baumspenden seit 2019. Beinhaltet Bäume, die direkt über unsere Apps gespendet wurden, sowie große Privat- und Unternehmensspenden. Diese Spenden gingen nicht nur an Projekte, die direkt von Plant-for-the-Planet betrieben werden, sondern an alle teilnehmenden Wiederherstellungsorganisationen. Einige gespendete Bäume sind möglicherweise noch nicht gepflanzt worden.", + "treesPlantedDescription": "Alle über Plant-for-the-Planet gespendeten Bäume und Bäume, die von den teilnehmenden Wiederherstellungsorganisationen als gepflanzt gemeldet wurden." + } +} diff --git a/public/static/locales/de/planetcash.json b/public/static/locales/de/planetcash.json index c31c3a50bb..467a6da2fd 100644 --- a/public/static/locales/de/planetcash.json +++ b/public/static/locales/de/planetcash.json @@ -1,32 +1,34 @@ { - "title": "PlanetCash", - "partnerSignupInfo": "Unsere Funktion Planet Cash / Bulk-Codes ist eine neue Funktion speziell für Partner von Plant-for-the-Planet. Melden Sie sich gerne bei Interesse bei <2>partner@plant-for-the-planet.org.", - "description": "PlanetCash ist ein entwicklerfreundliches Tool, das die Plant-for-the-Planet Plattform mit APIs und eingebauten Tools erweitert. Das PlanetCash-Guthaben ist ein Beitrag zu Plant-for-the-Planet, der vom Spender für verschiedene Projekte auf der Plattform verwendet werden kann.", - "termsText": "Bedingungen & Konditionen anzeigen.", - "learnMoreText": "Erfahre mehr über PlanetCash.", - "tabAccounts": "Konten", - "tabCreateAccount": "Konto erstellen", - "tabTransactions": "Transaktionen", - "accountTitleText": "{{currency}} PlanetCash Konto ({{country}})", - "createAccountTitleText": "Anmeldung für PlanetCash", - "addBalanceButton": "Guthaben hinzufügen", - "labelAccountHolder": "Kontoinhaber", - "labelBalance": "Guthaben", - "labelCreditLimit": "Grenze", - "deactivateAccountButton": "Deaktivieren", - "activateAccountButton": "Aktivieren", - "accountInactiveHelpText": "Dieses Konto ist inaktiv und kann nicht verwendet werden, um Beiträge zu leisten. Um dieses Konto zu aktivieren, wende dich bitte an support@plant-for-the-planet.org.", - "noAccountsText": "Du scheinst noch kein PlanetCash-Konto angelegt zu haben.", - "createPlanetCashButton": "Planet Cash Konto erstellen", - "accountQuotaReachedText": "Du kannst keine weiteren Konten erstellen, da dein Kontokontingent ausgeschöpft haben.", - "accountCreationSuccess": "Ihr PlanetCash-Konto wurde erfolgreich erstellt", - "labelCountry": "Land", - "planetCashTerms1": "Indem ich auf \"PlanetCash-Konto erstellen\" klicke, erkläre ich mich mit den Allgemeinen Geschäftsbedingungen von Plant-for-the-Planet und PlanetCash einverstanden.", - "planetCashTerms2": "Ich verstehe, dass PlanetCash-Spenden nicht zurückerstattet werden können, und dass nicht zugewiesene Zahlungen nach sechs Monaten automatisch Projekten auf der Plattform zugewiesen werden.", - "planetCashTerms3": "Spenden auf das PlanetCash-Konto aus persönlichen Gründen sind in dem Land, das du in diesem Schritt auswählst, in der Regel steuerlich absetzbar. Die kommerzielle Nutzung von PlanetCash ist möglicherweise nicht steuerlich absetzbar. Wenn du Fragen hast, wende dich bitte an support@plant-for-the-planet.org oder an deinen Steuerberater.", - "accountError": { - "active_account_exists": "Es existiert bereits ein aktives Konto. Deaktiviere dieses Konto, bevor du ein anderes Konto aktivierst.", - "duplicate_account": "Du hast bereits ein Konto für {{country}} erstellt", - "default": "Beim Erstellen des Kontos ist ein Fehler aufgetreten. Bitte versuche es nach einer Weile erneut." + "PlanetCash": { + "title": "PlanetCash", + "partnerSignupInfo": "Unsere Funktion Planet Cash / Bulk-Codes ist eine neue Funktion speziell für Partner von Plant-for-the-Planet. Melden Sie sich gerne bei Interesse bei <2>partner@plant-for-the-planet.org.", + "description": "PlanetCash ist ein entwicklerfreundliches Tool, das die Plant-for-the-Planet Plattform mit APIs und eingebauten Tools erweitert. Das PlanetCash-Guthaben ist ein Beitrag zu Plant-for-the-Planet, der vom Spender für verschiedene Projekte auf der Plattform verwendet werden kann.", + "termsText": "Bedingungen & Konditionen anzeigen.", + "learnMoreText": "Erfahre mehr über PlanetCash.", + "tabAccounts": "Konten", + "tabCreateAccount": "Konto erstellen", + "tabTransactions": "Transaktionen", + "accountTitleText": "{{currency}} PlanetCash Konto ({{country}})", + "createAccountTitleText": "Anmeldung für PlanetCash", + "addBalanceButton": "Guthaben hinzufügen", + "labelAccountHolder": "Kontoinhaber", + "labelBalance": "Guthaben", + "labelCreditLimit": "Grenze", + "deactivateAccountButton": "Deaktivieren", + "activateAccountButton": "Aktivieren", + "accountInactiveHelpText": "Dieses Konto ist inaktiv und kann nicht verwendet werden, um Beiträge zu leisten. Um dieses Konto zu aktivieren, wende dich bitte an support@plant-for-the-planet.org.", + "noAccountsText": "Du scheinst noch kein PlanetCash-Konto angelegt zu haben.", + "createPlanetCashButton": "Planet Cash Konto erstellen", + "accountQuotaReachedText": "Du kannst keine weiteren Konten erstellen, da dein Kontokontingent ausgeschöpft haben.", + "accountCreationSuccess": "Ihr PlanetCash-Konto wurde erfolgreich erstellt", + "labelCountry": "Land", + "planetCashTerms1": "Indem ich auf \"PlanetCash-Konto erstellen\" klicke, erkläre ich mich mit den Allgemeinen Geschäftsbedingungen von Plant-for-the-Planet und PlanetCash einverstanden.", + "planetCashTerms2": "Ich verstehe, dass PlanetCash-Spenden nicht zurückerstattet werden können, und dass nicht zugewiesene Zahlungen nach sechs Monaten automatisch Projekten auf der Plattform zugewiesen werden.", + "planetCashTerms3": "Spenden auf das PlanetCash-Konto aus persönlichen Gründen sind in dem Land, das du in diesem Schritt auswählst, in der Regel steuerlich absetzbar. Die kommerzielle Nutzung von PlanetCash ist möglicherweise nicht steuerlich absetzbar. Wenn du Fragen hast, wende dich bitte an support@plant-for-the-planet.org oder an deinen Steuerberater.", + "accountError": { + "active_account_exists": "Es existiert bereits ein aktives Konto. Deaktiviere dieses Konto, bevor du ein anderes Konto aktivierst.", + "duplicate_account": "Du hast bereits ein Konto für {{country}} erstellt", + "default": "Beim Erstellen des Kontos ist ein Fehler aufgetreten. Bitte versuche es nach einer Weile erneut." + } } -} \ No newline at end of file +} diff --git a/public/static/locales/de/profile.json b/public/static/locales/de/profile.json index bec17a2e36..4c1b915f2f 100644 --- a/public/static/locales/de/profile.json +++ b/public/static/locales/de/profile.json @@ -1,51 +1,53 @@ { - "myProfile": { - "memberSince": "Mitglied seit {{date}}", - "userDescription": "{{bio}}" - }, - "feature": { - "redeem": "Einlösen", - "registerTree": "Baum registrieren", - "share": "Teilen" - }, - "myPublicProfile": { - "support": "Support", - "link": "Link" - }, - "myForestMap": { - "plantedTree_one": "{{count, number}} Baum", - "plantedTree_other": "{{count, number}} Bäume", - "treesPlanted": "Gepflanzte Bäume", - "restored": "Wiederhergestellt", - "registered": "Registriert", - "conservation": "Naturschutz", - "projects": "Projekte", - "countries": "Länder", - "donations": "Spenden", - "area": "{{areaConserved}} m²", - "zoomIn": "Für weitere Details heranzoomen", - "totalDonation_one": "{{count, number}} Spende ", - "totalDonation_other": "{{count, number}} Spenden ", - "totalProject_one": "für {{count, number}} Projekt", - "totalProject_other": "für {{count, number}} Projekte", - "tpoName": "By {{tpo}}" - }, - "myTreeCounter": { - "treesPlanted": "Bäume gepflanzt", - "editTarget": "Ziel bearbeiten" - }, - "myContributions": { - "treesPlantedAndAreaRestored": "Bäume gepflanzt & Gebiete wiederhergestellt", - "treeRegistered_one": "{{count, number}} Baum registriert", - "treeRegistered_other": "{{count, number}} Bäume registriert", - "receivedFrom": "Empfangen von {{name}}", - "loadMoreContribution": "Lade weitere Beiträge", - "loadingContribution": "Lade Beiträge....", - "donate": "Spenden", - "donateAgain": "Erneut spenden", - "conservedSmall": "geschützt", - "restoredSmall": "wiederhergestellt", - "areaType": "{{areaConserved}} m² {{type}}", - "areaConserved": "Geschütze Fläche" + "Profile": { + "myProfile": { + "memberSince": "Mitglied seit {{date}}", + "userDescription": "{{bio}}" + }, + "feature": { + "redeem": "Einlösen", + "registerTree": "Baum registrieren", + "share": "Teilen" + }, + "myPublicProfile": { + "support": "Support", + "link": "Link" + }, + "myForestMap": { + "plantedTree_one": "{{count, number}} Baum", + "plantedTree_other": "{{count, number}} Bäume", + "treesPlanted": "Gepflanzte Bäume", + "restored": "Wiederhergestellt", + "registered": "Registriert", + "conservation": "Naturschutz", + "projects": "Projekte", + "countries": "Länder", + "donations": "Spenden", + "area": "{{areaConserved}} m²", + "zoomIn": "Für weitere Details heranzoomen", + "totalDonation_one": "{{count, number}} Spende ", + "totalDonation_other": "{{count, number}} Spenden ", + "totalProject_one": "für {{count, number}} Projekt", + "totalProject_other": "für {{count, number}} Projekte", + "tpoName": "By {{tpo}}" + }, + "myTreeCounter": { + "treesPlanted": "Bäume gepflanzt", + "editTarget": "Ziel bearbeiten" + }, + "myContributions": { + "treesPlantedAndAreaRestored": "Bäume gepflanzt & Gebiete wiederhergestellt", + "treeRegistered_one": "{{count, number}} Baum registriert", + "treeRegistered_other": "{{count, number}} Bäume registriert", + "receivedFrom": "Empfangen von {{name}}", + "loadMoreContribution": "Lade weitere Beiträge", + "loadingContribution": "Lade Beiträge....", + "donate": "Spenden", + "donateAgain": "Erneut spenden", + "conservedSmall": "geschützt", + "restoredSmall": "wiederhergestellt", + "areaType": "{{areaConserved}} m² {{type}}", + "areaConserved": "Geschütze Fläche" + } } } diff --git a/public/static/locales/de/redeem.json b/public/static/locales/de/redeem.json index 42e221ba5f..f412b8f5be 100644 --- a/public/static/locales/de/redeem.json +++ b/public/static/locales/de/redeem.json @@ -1,19 +1,21 @@ { - "myPlantedTreesByOrg": "Mein {{formattedNumber}} Baum wird von {{tpoName}} gepflanzt", - "myPlantedTreesByOrg_plural": "Meine {{formattedNumber}} Bäume werden von {{tpoName}} gepflanzt", - "congratulations": "Herzlichen Glückwunsch!", - "addToMyTrees": "Zu meinen Bäumen hinzufügen", - "validateCode": "Code prüfen", - "enterRedeemCode": "Bitte gibt einen Code zum Einlösen ein", - "validating": "Prüfe", - "invalidType": "Ungültiger Typ, bitte überprüfen Sie den Link erneut", - "redeeming": "Einlösen:", - "invalidCode": "Dieser Code ist ungültig.", - "alreadyRedeemed": "Der Code wurde bereits eingelöst", - "redeemCode": "Code einlösen", - "redeemingCode": "Löse Code ein...", - "redeem": "Einlösen", - "redeemDescription": "Löse Baumgutscheine und andere Codes ein.", - "successfullyRedeemed": "Erfolgreich eingelöst", - "redeemAnotherCode": "Einen anderen Code einlösen" -} \ No newline at end of file + "Redeem": { + "myPlantedTreesByOrg": "Mein {{formattedNumber}} Baum wird von {{tpoName}} gepflanzt", + "myPlantedTreesByOrg_plural": "Meine {{formattedNumber}} Bäume werden von {{tpoName}} gepflanzt", + "congratulations": "Herzlichen Glückwunsch!", + "addToMyTrees": "Zu meinen Bäumen hinzufügen", + "validateCode": "Code prüfen", + "enterRedeemCode": "Bitte gibt einen Code zum Einlösen ein", + "validating": "Prüfe", + "invalidType": "Ungültiger Typ, bitte überprüfen Sie den Link erneut", + "redeeming": "Einlösen:", + "invalidCode": "Dieser Code ist ungültig.", + "alreadyRedeemed": "Der Code wurde bereits eingelöst", + "redeemCode": "Code einlösen", + "redeemingCode": "Löse Code ein...", + "redeem": "Einlösen", + "redeemDescription": "Löse Baumgutscheine und andere Codes ein.", + "successfullyRedeemed": "Erfolgreich eingelöst", + "redeemAnotherCode": "Einen anderen Code einlösen" + } +} diff --git a/public/static/locales/de/registerTrees.json b/public/static/locales/de/registerTrees.json index 1bb57fab42..2bd8540148 100644 --- a/public/static/locales/de/registerTrees.json +++ b/public/static/locales/de/registerTrees.json @@ -1,11 +1,13 @@ { - "selectLocationMap": "Standort auf der Karte auswählen", - "requiredNumberOfTrees": "Anzahl der Bäume ist erforderlich", - "numberOfTrees": "Anzahl der Bäume", - "datePlanted": "Pflanzdatum", - "treeSpecies": "Baumarten", - "speciesRequired": "Art ist erforderlich", - "drawPolygonMap": "Zeichne eines Polygons auf der Karte", - "clickMapMark": "Klicke auf die Karte, um einen Ort zu markieren", - "next": "Weiter" -} \ No newline at end of file + "RegisterTrees": { + "selectLocationMap": "Standort auf der Karte auswählen", + "requiredNumberOfTrees": "Anzahl der Bäume ist erforderlich", + "numberOfTrees": "Anzahl der Bäume", + "datePlanted": "Pflanzdatum", + "treeSpecies": "Baumarten", + "speciesRequired": "Art ist erforderlich", + "drawPolygonMap": "Zeichne eines Polygons auf der Karte", + "clickMapMark": "Klicke auf die Karte, um einen Ort zu markieren", + "next": "Weiter" + } +} diff --git a/public/static/locales/de/tenants.json b/public/static/locales/de/tenants.json index 5574c9534e..1f0af5f51c 100644 --- a/public/static/locales/de/tenants.json +++ b/public/static/locales/de/tenants.json @@ -1,51 +1,53 @@ { - "nitrosb": { - "title": "Bäume pflanzen mit Nitro Snowboards", - "description": "Nitro Snowboards hat sich zum Ziel gesetzt, die Erhaltung, Wiederherstellung und das Wachstum eines Waldes zu unterstützen und dafür zu mobilisieren." - }, - "energizer": { - "title": "Energizer ❤️ Bäume", - "description": "`Das Richtige tun` ist für uns der zentrale Leitgedanke, an dem wir unser Handeln ausrichten. Seit der ersten quecksilberfreien Batterie im Jahre 1989 gelingt es uns, unsere Batterien immer weiter zu verbessern, langlebiger und damit umweltfreundlicher zu machen. Unsere Partnerschaft mit Plant-for-the-Planet steht genau in dieser Tradition, die Umwelt zu schonen und für mehr Nachhaltigkeit einzustehen. Gemeinsam pflanzen wir Bäume und veranstalten Bildungsprogramme für Kinder und Jugendliche, um ein Bewusstsein für globale Gerechtigkeit und die Klimakrise zu schaffen. Einbinden wollen wir dabei auch unsere Konsumenten und den Handel, denn nur gemeinsam kann diese zentrale Herausforderung unserer Zeit gelöst werden. Bist du dabei?" - }, - "senatDerWirtschaft": { - "title": "Senat der Wirtschaft", - "description": "Die Klimakrise ist eine der größten gesellschaftlichen Herausforderungen und es muss sich etwas ändern. Der Senat der Wirtschaft ist eine Wertegemeinschaft. Wir stehen für eine motivierende und verbindende Vision, verknüpft mit praktischer Umsetzung. Deshalb pflanzen immer mehr unserer Mitglieder Wälder, zusammen mit ihren Mitarbeitern, Geschäftspartnern und Kunden. Jeder gepflanzte Baum bindet CO2 und schenkt uns Menschen wertvolle Zeit. Diese Zeit werden wir nutzen, um unsere CO2-Emissionen massiv zu reduzieren. Versprochen!" - }, - "pampers": { - "title": "Pampers ❤️ Wald", - "descriptionTitle": "Bäume pflanzen für eine nachhaltigere Zukunft", - "description": "Gemeinsam mit euch wollen wir dabei helfen, unseren Kleinsten eine bessere Zukunft zu ermöglichen. Deshalb arbeiten wir mit der Kinder- und Jugendorganisation Plant-for-the-Planet an einem tollen Projekt: dem Pampers Wald. Pro verkaufter Packung Pampers Windeln spenden wir 0,01 EUR/CHF und insgesamt bis zu 100.000 EUR an Plant-for-the-Planet. Unser Ziel: 60.000 Bäume für eine nachhaltige Wiederaufforstung zu pflanzen. Auf der Karte seht ihr, wo das Projekt realisiert wird. Jetzt anschauen und mithelfen." - }, - "interactClub": { - "title": "Interact Club Wald", - "description": "Bäume pflanzen ist ein generationsverbindendes, friedensstiftendes Projekt, das uns Menschen und besonders jungen Menschen Hoffnung gibt und auch Mut. Mut brauchen wir, um gemeinsam in dieser Klimakrise Lösungen anzupacken. Unser Ziel ist es als Kinder, Jugendliche und junge Erwachsene die Welt zu mobilisieren 1.000 Milliarden Bäume zu pflanzen damit diese Bäume uns wertvolle Zeit, etwa 15 Jahre, schenken können, die wir unbedingt nutzen sollten, um unsere CO2-Emissionen zu reduzieren. Wiederaufforstung, global skaliert, kann so zum größten Konjunkturprogramm besonders für Länder des Globalen Südens werden. Die Flächen, auf denen wir die 1.000 Milliarden zusätzlichen Bäume pflanzen können, liegen zur Hälfte in Afrika, der Rest in Lateinamerika und Südostasien, und damit in Ländern, die von der Klimakrise am stärksten betroffen sind. Diese Bäume schaffen Arbeitsplätze, sind gut für die Artenvielfalt und binden das Treibhausgas CO2. Das neue Schwerpunktthema der Rotarischen Familie lautet: Umwelt. Wir fangen jetzt an unseren Beitrag zu leisten. Pflanzen Sie gemeinsam mit uns Bäume." - }, - "culchacandela": { - "title": "Culcha Candela X Plant-for-the-Planet", - "description": "

Wir pflanzen Bäume für ein besseres Weltklima, um uns so wichtige Zeit im Wettlauf gegen die Klimakrise zu verschaffen. Pflanz' hier mit!
...und beim Hören des neuen \"Hamma (INVCTS &Dorfkind J-P Remix)\" auf sämtlichen Musik Streaming-Plattformen.
Wir spenden die kompletten Streaming Einnahmen des Songs an Plant-for-the-Planet! Powered by music-for-nature!

" - }, - "lacoqueta": { - "title": "Bäume pflanzen mit La Coqueta", - "description": "Zu sehen, wie ihre eigenen Kinder aufwachsen und sich zunehmend für die Klimakrise interessieren, hat Celia dazu inspiriert, ihre Marke als Plattform für positiven Wandel zu nutzen. Nachdem sie erfahren hatte, dass Bäume das wirtschaftlichste und effektivste Mittel sind, um CO2 zu binden und so mehr Zeit zu gewinnen, um die Treibhausgasemissionen auf Null zu reduzieren und die Klimakrise zu entschärfen, entschied sie sich, diese spannende Reise mit Plant-for-the-Planet anzutreten. Auch Sie können Teil dieser Reise werden und einige Bäume spenden - in Granada, der Heimatstadt von Celia, oder in anderen Gebieten auf der ganzen Welt." - }, - "xiting": { - "title": "Bäume pflanzen - Für eine grüne Zukunft", - "description": "Wir als Xiting möchten mit dieser Plattform unseren Partnern, Kunden und Unterstützern die Möglichkeit geben, schnell und einfach Bäume zu pflanzen und sich so unserem Engagement im Klimaschutz anzuschließen. Wir sind davon überzeugt, dass Klimaschutz nur Sinn macht, wenn er von einer breiten Öffentlichkeit getragen wird und wir gemeinsam an einer nachhaltigen und grünen Zukunft arbeiten. Bäume sind dafür die idealen und natürlichsten Mittel, CO2 aus der Luft filtern. Pflanzen Sie jetzt mit! Seit 2019 verfolgt Xiting erfolgreich das Ziel, als Unternehmen zu 100% CO2-neutral zu agieren. Einen Einblick in unser Engagement sowie bestehende Klima-Partnerschaften finden Sie hier." - }, - "ulmpflanzt": { - "title": "Ulm pflanzt Bäume", - "description": "124.781 Bäume - für jede/n Ulmer Bürger/in einen. Das ist das Ziel von \"Ulm pflanzt Bäume\" - der Klima-Initiative von Plant-for-the-Planet, dem unw (Ulmer Initiativkreis nachhaltige Wirtschaftsentwicklung e. V.), den Ulmer Unternehmen pervormance international, Trivis und der Volksbank Ulm sowie der Stadt Ulm und der lokalen agenda ulm 21. Pflanzen auch Sie mit und helfen Sie, das größte Aufforstungsprojekt der Menschheitsgeschichte zu realisieren. Für Sie - und für uns alle!" - }, - "sitex": { - "title": "Sitex ❤️ Wald", - "description": "Die Klimarettung ist eine globale Aufgabe und lässt sich nur bewältigen, wenn wir alle zusammen vorgehen. Wir möchten unseren Kindern und Enkelkindern einen intakten Planeten hinterlassen. Darum unterstützen wir Plant-for-the-Planet und die Methode des Bäume-Pflanzens, um möglichst viel CO² aus der Atmosphäre zu binden. Unser Beitrag in der Sitex-Gruppe: Wir pflanzen mindestens 500.000 Bäume bis 2027." - }, - "3pleset": { - "title": "Alife & Kickin ❤️ Bäume", - "description": "

#WEAREALIFE Schreibfehler? Nö, Absicht!
Ganz nach dem Motto CHOOSE LIFE seid ihr jetzt dran.
Denn ab sofort könnt ihr mit Alife & Kickin und der Organisation Plant-for-the-Planet Bäume pflanzen und Leben schenken. Erschafft mit uns den Alife & Kickin Wald. Wie?
Pro Onlinebestellung pflanzen wir in den nächsten 2 Monaten einen Baum mit Plant-for-the-Planet. Unser Ziel: 50.000 Bäume für eine nachhaltige Wiederaufforstung. Wo?
Auf der Karte seht ihr, wo unser Alife & Kickin Wald realisiert wird. Jetzt anschauen, mithelfen und noch mehr Leben schenken. CHOOSE LIFE.
ONE ORDER ONE TREE
#WEAREALIFE

" - }, - "weareams": { - "title": "Alexander Mann Solutions ❤️ Trees", - "description": "Ab 2021 schließt sich AMS der TrillionTreeCampaign an und gemeinsam mit Plant-for-the-Planet geben wir der Natur etwas zurück. Wir werden die Möglichkeiten nutzen, die sich uns bieten, um Nachhaltigkeit in unserer Lieferkette und durch unsere Beziehungen zu Kunden und Geschäftspartnern zu fördern. Schließen Sie sich uns an und #StopTalkingStartPlanting!" + "Tenants": { + "nitrosb": { + "title": "Bäume pflanzen mit Nitro Snowboards", + "description": "Nitro Snowboards hat sich zum Ziel gesetzt, die Erhaltung, Wiederherstellung und das Wachstum eines Waldes zu unterstützen und dafür zu mobilisieren." + }, + "energizer": { + "title": "Energizer ❤️ Bäume", + "description": "`Das Richtige tun` ist für uns der zentrale Leitgedanke, an dem wir unser Handeln ausrichten. Seit der ersten quecksilberfreien Batterie im Jahre 1989 gelingt es uns, unsere Batterien immer weiter zu verbessern, langlebiger und damit umweltfreundlicher zu machen. Unsere Partnerschaft mit Plant-for-the-Planet steht genau in dieser Tradition, die Umwelt zu schonen und für mehr Nachhaltigkeit einzustehen. Gemeinsam pflanzen wir Bäume und veranstalten Bildungsprogramme für Kinder und Jugendliche, um ein Bewusstsein für globale Gerechtigkeit und die Klimakrise zu schaffen. Einbinden wollen wir dabei auch unsere Konsumenten und den Handel, denn nur gemeinsam kann diese zentrale Herausforderung unserer Zeit gelöst werden. Bist du dabei?" + }, + "senatDerWirtschaft": { + "title": "Senat der Wirtschaft", + "description": "Die Klimakrise ist eine der größten gesellschaftlichen Herausforderungen und es muss sich etwas ändern. Der Senat der Wirtschaft ist eine Wertegemeinschaft. Wir stehen für eine motivierende und verbindende Vision, verknüpft mit praktischer Umsetzung. Deshalb pflanzen immer mehr unserer Mitglieder Wälder, zusammen mit ihren Mitarbeitern, Geschäftspartnern und Kunden. Jeder gepflanzte Baum bindet CO2 und schenkt uns Menschen wertvolle Zeit. Diese Zeit werden wir nutzen, um unsere CO2-Emissionen massiv zu reduzieren. Versprochen!" + }, + "pampers": { + "title": "Pampers ❤️ Wald", + "descriptionTitle": "Bäume pflanzen für eine nachhaltigere Zukunft", + "description": "Gemeinsam mit euch wollen wir dabei helfen, unseren Kleinsten eine bessere Zukunft zu ermöglichen. Deshalb arbeiten wir mit der Kinder- und Jugendorganisation Plant-for-the-Planet an einem tollen Projekt: dem Pampers Wald. Pro verkaufter Packung Pampers Windeln spenden wir 0,01 EUR/CHF und insgesamt bis zu 100.000 EUR an Plant-for-the-Planet. Unser Ziel: 60.000 Bäume für eine nachhaltige Wiederaufforstung zu pflanzen. Auf der Karte seht ihr, wo das Projekt realisiert wird. Jetzt anschauen und mithelfen." + }, + "interactClub": { + "title": "Interact Club Wald", + "description": "Bäume pflanzen ist ein generationsverbindendes, friedensstiftendes Projekt, das uns Menschen und besonders jungen Menschen Hoffnung gibt und auch Mut. Mut brauchen wir, um gemeinsam in dieser Klimakrise Lösungen anzupacken. Unser Ziel ist es als Kinder, Jugendliche und junge Erwachsene die Welt zu mobilisieren 1.000 Milliarden Bäume zu pflanzen damit diese Bäume uns wertvolle Zeit, etwa 15 Jahre, schenken können, die wir unbedingt nutzen sollten, um unsere CO2-Emissionen zu reduzieren. Wiederaufforstung, global skaliert, kann so zum größten Konjunkturprogramm besonders für Länder des Globalen Südens werden. Die Flächen, auf denen wir die 1.000 Milliarden zusätzlichen Bäume pflanzen können, liegen zur Hälfte in Afrika, der Rest in Lateinamerika und Südostasien, und damit in Ländern, die von der Klimakrise am stärksten betroffen sind. Diese Bäume schaffen Arbeitsplätze, sind gut für die Artenvielfalt und binden das Treibhausgas CO2. Das neue Schwerpunktthema der Rotarischen Familie lautet: Umwelt. Wir fangen jetzt an unseren Beitrag zu leisten. Pflanzen Sie gemeinsam mit uns Bäume." + }, + "culchacandela": { + "title": "Culcha Candela X Plant-for-the-Planet", + "description": "

Wir pflanzen Bäume für ein besseres Weltklima, um uns so wichtige Zeit im Wettlauf gegen die Klimakrise zu verschaffen. Pflanz' hier mit!
...und beim Hören des neuen \"Hamma (INVCTS &Dorfkind J-P Remix)\" auf sämtlichen Musik Streaming-Plattformen.
Wir spenden die kompletten Streaming Einnahmen des Songs an Plant-for-the-Planet! Powered by music-for-nature!

" + }, + "lacoqueta": { + "title": "Bäume pflanzen mit La Coqueta", + "description": "Zu sehen, wie ihre eigenen Kinder aufwachsen und sich zunehmend für die Klimakrise interessieren, hat Celia dazu inspiriert, ihre Marke als Plattform für positiven Wandel zu nutzen. Nachdem sie erfahren hatte, dass Bäume das wirtschaftlichste und effektivste Mittel sind, um CO2 zu binden und so mehr Zeit zu gewinnen, um die Treibhausgasemissionen auf Null zu reduzieren und die Klimakrise zu entschärfen, entschied sie sich, diese spannende Reise mit Plant-for-the-Planet anzutreten. Auch Sie können Teil dieser Reise werden und einige Bäume spenden - in Granada, der Heimatstadt von Celia, oder in anderen Gebieten auf der ganzen Welt." + }, + "xiting": { + "title": "Bäume pflanzen - Für eine grüne Zukunft", + "description": "Wir als Xiting möchten mit dieser Plattform unseren Partnern, Kunden und Unterstützern die Möglichkeit geben, schnell und einfach Bäume zu pflanzen und sich so unserem Engagement im Klimaschutz anzuschließen. Wir sind davon überzeugt, dass Klimaschutz nur Sinn macht, wenn er von einer breiten Öffentlichkeit getragen wird und wir gemeinsam an einer nachhaltigen und grünen Zukunft arbeiten. Bäume sind dafür die idealen und natürlichsten Mittel, CO2 aus der Luft filtern. Pflanzen Sie jetzt mit! Seit 2019 verfolgt Xiting erfolgreich das Ziel, als Unternehmen zu 100% CO2-neutral zu agieren. Einen Einblick in unser Engagement sowie bestehende Klima-Partnerschaften finden Sie hier." + }, + "ulmpflanzt": { + "title": "Ulm pflanzt Bäume", + "description": "124.781 Bäume - für jede/n Ulmer Bürger/in einen. Das ist das Ziel von \"Ulm pflanzt Bäume\" - der Klima-Initiative von Plant-for-the-Planet, dem unw (Ulmer Initiativkreis nachhaltige Wirtschaftsentwicklung e. V.), den Ulmer Unternehmen pervormance international, Trivis und der Volksbank Ulm sowie der Stadt Ulm und der lokalen agenda ulm 21. Pflanzen auch Sie mit und helfen Sie, das größte Aufforstungsprojekt der Menschheitsgeschichte zu realisieren. Für Sie - und für uns alle!" + }, + "sitex": { + "title": "Sitex ❤️ Wald", + "description": "Die Klimarettung ist eine globale Aufgabe und lässt sich nur bewältigen, wenn wir alle zusammen vorgehen. Wir möchten unseren Kindern und Enkelkindern einen intakten Planeten hinterlassen. Darum unterstützen wir Plant-for-the-Planet und die Methode des Bäume-Pflanzens, um möglichst viel CO² aus der Atmosphäre zu binden. Unser Beitrag in der Sitex-Gruppe: Wir pflanzen mindestens 500.000 Bäume bis 2027." + }, + "3pleset": { + "title": "Alife & Kickin ❤️ Bäume", + "description": "

#WEAREALIFE Schreibfehler? Nö, Absicht!
Ganz nach dem Motto CHOOSE LIFE seid ihr jetzt dran.
Denn ab sofort könnt ihr mit Alife & Kickin und der Organisation Plant-for-the-Planet Bäume pflanzen und Leben schenken. Erschafft mit uns den Alife & Kickin Wald. Wie?
Pro Onlinebestellung pflanzen wir in den nächsten 2 Monaten einen Baum mit Plant-for-the-Planet. Unser Ziel: 50.000 Bäume für eine nachhaltige Wiederaufforstung. Wo?
Auf der Karte seht ihr, wo unser Alife & Kickin Wald realisiert wird. Jetzt anschauen, mithelfen und noch mehr Leben schenken. CHOOSE LIFE.
ONE ORDER ONE TREE
#WEAREALIFE

" + }, + "weareams": { + "title": "Alexander Mann Solutions ❤️ Trees", + "description": "Ab 2021 schließt sich AMS der TrillionTreeCampaign an und gemeinsam mit Plant-for-the-Planet geben wir der Natur etwas zurück. Wir werden die Möglichkeiten nutzen, die sich uns bieten, um Nachhaltigkeit in unserer Lieferkette und durch unsere Beziehungen zu Kunden und Geschäftspartnern zu fördern. Schließen Sie sich uns an und #StopTalkingStartPlanting!" + } } -} \ No newline at end of file +} diff --git a/public/static/locales/de/treemapper.json b/public/static/locales/de/treemapper.json index 9897604f00..e211789330 100644 --- a/public/static/locales/de/treemapper.json +++ b/public/static/locales/de/treemapper.json @@ -1,66 +1,68 @@ { - "trees": "Bäume", - "tree": "Baum", - "on": "auf", - "partial": "Teilweise", - "complete": "Vollständig", - "on-site": "Vor Ort", - "off-site": "Außerhalb der Standorts", - "captureMode": "Erfassungsmodus", - "captureStatus": "Erfassungsstatus", - "coordinates": "Koordinaten", - "guid": "GUID", - "height": "Höhe", - "width": "Breite", - "plantDate": "Pflanzdatum", - "registrationDate": "Registrierungsdatum", - "plantProject": "Pflanzprojekt", - "species": "Art", - "sampleTrees": "Beispielbäume", - "loadMore": "Mehr laden", - "treeMapper": "TreeMapper", - "cm": "cm", - "m": "m", - "plantingLocation": "Standort der Pflanzung", - "reviewAndSubmit": "Überprüfen und Einreichen", - "sampleTree": "Musterbaum #{{number}}", - "import": "Importieren", - "editor": "Editor", - "draw": "Zeichnen", - "addAnotherSpecies": "Andere Arten hinzufügen", - "continue": "Weiter", - "downloadCSVTemplate": "CSV-Vorlage herunterladen", - "treeTag": "Baum-Tag", - "diameter": "Durchmesser", - "latitude": "Breitengrad", - "longitude": "Längengrad", - "addAnotherSampleTree": "Weiteren Musterbaum hinzufügen", - "skip": "Überspringen", - "treeSpecies": "Baumarten", - "plantingDate": "Datum der Pflanzung ", - "summary": "Zusammenfassung", - "reviewSubmitDescription": "Überprüfe die Daten, die du gerade hochgeladen hast, und sende sie an TreeMapper.", - "submittedSuccess": "Erfolgreich abgeschickt", - "submittedSuccessDescription": "Deine Bäume wurden an TreeMapper übermittelt. Du kannst sie an deinen Standorten oder in der TreeMapper App ansehen.", - "myPlantLocations": "Meine Standorte mit Pflanzungen", - "submitted": "Eingereicht", - "projectRequired": "Projekt erforderlich", - "geoJsonError": "Nicht unterstütztes GeoJSON/KML-Format", - "atLeastOneSpeciesRequired": "Mindestens ein Baumtyp ist erforderlich", - "treesRequired": "Baumzahl ist erforderlich", - "count": "Anzahl", - "addSampleTree": "Musterbaum hinzufügen", - "uploadFile": "Datei hochladen", - "fileFormatKML": "Datei (geojson/kml)", - "importData": "Daten importieren", - "importExplanation": "Hier kannst du TreeMapper-Daten importieren, die als \"extern\" markiert werden (nicht \"off-site\", bitte verwende dafür die App). Für Koordinaten von Pflanzungsstandorten akzeptieren wir *.kml oder geojson, für (optionale) Musterbäume *.csv (Vorlage wird in Schritt 2 bereitgestellt).", - "downloadExplanation": "Lade die folgende CSV-Vorlage herunter, um Musterdaten von Bäumen im angegebenen Format zu importieren. Verwende einen einfachen Editor, um die Datei zu bearbeiten. Die zweite und dritte Zeile sind Formatierungsangaben und ein Beispiel und müssen gelöscht werden.", - "importCSV": "Importiere CSV", - "fileFormatCSV": "Datei (csv)", - "aliases": "Aliasnamen", - "aliasesValidation": "Bitte gibt ein Alias ein", - "speciesValidation": "Bitte gib eine Art ein", - "external": "Extern", - "date": "Datum", - "measurements": "Messwerte" -} \ No newline at end of file + "Treemapper": { + "trees": "Bäume", + "tree": "Baum", + "on": "auf", + "partial": "Teilweise", + "complete": "Vollständig", + "on-site": "Vor Ort", + "off-site": "Außerhalb der Standorts", + "captureMode": "Erfassungsmodus", + "captureStatus": "Erfassungsstatus", + "coordinates": "Koordinaten", + "guid": "GUID", + "height": "Höhe", + "width": "Breite", + "plantDate": "Pflanzdatum", + "registrationDate": "Registrierungsdatum", + "plantProject": "Pflanzprojekt", + "species": "Art", + "sampleTrees": "Beispielbäume", + "loadMore": "Mehr laden", + "treeMapper": "TreeMapper", + "cm": "cm", + "m": "m", + "plantingLocation": "Standort der Pflanzung", + "reviewAndSubmit": "Überprüfen und Einreichen", + "sampleTree": "Musterbaum #{{number}}", + "import": "Importieren", + "editor": "Editor", + "draw": "Zeichnen", + "addAnotherSpecies": "Andere Arten hinzufügen", + "continue": "Weiter", + "downloadCSVTemplate": "CSV-Vorlage herunterladen", + "treeTag": "Baum-Tag", + "diameter": "Durchmesser", + "latitude": "Breitengrad", + "longitude": "Längengrad", + "addAnotherSampleTree": "Weiteren Musterbaum hinzufügen", + "skip": "Überspringen", + "treeSpecies": "Baumarten", + "plantingDate": "Datum der Pflanzung ", + "summary": "Zusammenfassung", + "reviewSubmitDescription": "Überprüfe die Daten, die du gerade hochgeladen hast, und sende sie an TreeMapper.", + "submittedSuccess": "Erfolgreich abgeschickt", + "submittedSuccessDescription": "Deine Bäume wurden an TreeMapper übermittelt. Du kannst sie an deinen Standorten oder in der TreeMapper App ansehen.", + "myPlantLocations": "Meine Standorte mit Pflanzungen", + "submitted": "Eingereicht", + "projectRequired": "Projekt erforderlich", + "geoJsonError": "Nicht unterstütztes GeoJSON/KML-Format", + "atLeastOneSpeciesRequired": "Mindestens ein Baumtyp ist erforderlich", + "treesRequired": "Baumzahl ist erforderlich", + "count": "Anzahl", + "addSampleTree": "Musterbaum hinzufügen", + "uploadFile": "Datei hochladen", + "fileFormatKML": "Datei (geojson/kml)", + "importData": "Daten importieren", + "importExplanation": "Hier kannst du TreeMapper-Daten importieren, die als \"extern\" markiert werden (nicht \"off-site\", bitte verwende dafür die App). Für Koordinaten von Pflanzungsstandorten akzeptieren wir *.kml oder geojson, für (optionale) Musterbäume *.csv (Vorlage wird in Schritt 2 bereitgestellt).", + "downloadExplanation": "Lade die folgende CSV-Vorlage herunter, um Musterdaten von Bäumen im angegebenen Format zu importieren. Verwende einen einfachen Editor, um die Datei zu bearbeiten. Die zweite und dritte Zeile sind Formatierungsangaben und ein Beispiel und müssen gelöscht werden.", + "importCSV": "Importiere CSV", + "fileFormatCSV": "Datei (csv)", + "aliases": "Aliasnamen", + "aliasesValidation": "Bitte gibt ein Alias ein", + "speciesValidation": "Bitte gib eine Art ein", + "external": "Extern", + "date": "Datum", + "measurements": "Messwerte" + } +} diff --git a/public/static/locales/de/treemapperAnalytics.json b/public/static/locales/de/treemapperAnalytics.json index ebe2a8a035..79133a5623 100644 --- a/public/static/locales/de/treemapperAnalytics.json +++ b/public/static/locales/de/treemapperAnalytics.json @@ -1,57 +1,59 @@ { - "title": "Daten-Explorer", - "from": "Von", - "to": "Bis", - "clearFilter": "Filter löschen", - "days": "Tage", - "months": "Monate", - "weeks": "Wochen", - "years": "Jahre", - "treesPlanted": "Gepflanzte Bäume", - "speciesPlanted": "Gepflanzte Arten", - "calenderWeek": "KW", - "project": "Projekt", - "export": "Export", - "exportData": "Daten exportieren", - "jan": "Jan", - "feb": "Feb", - "mar": "Mrz", - "apr": "Apr", - "may": "Mai", - "jun": "Jun", - "jul": "Jul", - "aug": "Aug", - "sep": "Sep", - "oct": "Okt", - "nov": "Nov", - "dec": "Dez", - "exportColumnHeaders": { - "hid": "Menschlich lesbare ID für Pflanzort", - "plantDate": "Pflanzdatum", - "species": "Name der gepflanzten Art", - "geometry": "GeoJson Koordinate des Polygons", - "type": "Typ Pflanzort (einzel, multi)", - "treesPlanted": "Gesamtzahl Bäume Pflanzort", - "metadata": "Pflanzort Metadaten", - "plantProjectId": "ID des Projekts zu dem der Pflanzort gehört", - "sampleTreeCount": "Zahl der Beispielbäume am Pflanzort", - "captureStatus": "Capture Status des Pflanzorts", - "created": "Zeitpunkt der Erstellung" - }, - "readme": "READ ME", - "interventionData": "Interventionsdaten", - "monitoringPlotsData": "Monitoring Plot Daten", - "dataIntervals": "Datenintervalle", - "errors": { - "emptyExportData": "Für das angegebene Intervall sind keine Daten verfügbar. Versuchen Sie es mit einem anderen Zeitbereich oder prüfen Sie, ob die Daten für diesen Zeitraum aufgezeichnet wurden." - }, - "timeFrame": "Zeitrahmen", - "scientificName": "Wissenschaftlicher Name", - "type": "Typ", - "interventions": "Interventionen", - "monitoringPlots": "Monitoring Plots (Demnächst)", - "trillion": "Bill.", - "billion": "Mrd.", - "million": "Mill.", - "thousand": "Tsd." -} \ No newline at end of file + "TreemapperAnalytics": { + "title": "Daten-Explorer", + "from": "Von", + "to": "Bis", + "clearFilter": "Filter löschen", + "days": "Tage", + "months": "Monate", + "weeks": "Wochen", + "years": "Jahre", + "treesPlanted": "Gepflanzte Bäume", + "speciesPlanted": "Gepflanzte Arten", + "calenderWeek": "KW", + "project": "Projekt", + "export": "Export", + "exportData": "Daten exportieren", + "jan": "Jan", + "feb": "Feb", + "mar": "Mrz", + "apr": "Apr", + "may": "Mai", + "jun": "Jun", + "jul": "Jul", + "aug": "Aug", + "sep": "Sep", + "oct": "Okt", + "nov": "Nov", + "dec": "Dez", + "exportColumnHeaders": { + "hid": "Menschlich lesbare ID für Pflanzort", + "plantDate": "Pflanzdatum", + "species": "Name der gepflanzten Art", + "geometry": "GeoJson Koordinate des Polygons", + "type": "Typ Pflanzort (einzel, multi)", + "treesPlanted": "Gesamtzahl Bäume Pflanzort", + "metadata": "Pflanzort Metadaten", + "plantProjectId": "ID des Projekts zu dem der Pflanzort gehört", + "sampleTreeCount": "Zahl der Beispielbäume am Pflanzort", + "captureStatus": "Capture Status des Pflanzorts", + "created": "Zeitpunkt der Erstellung" + }, + "readme": "READ ME", + "interventionData": "Interventionsdaten", + "monitoringPlotsData": "Monitoring Plot Daten", + "dataIntervals": "Datenintervalle", + "errors": { + "emptyExportData": "Für das angegebene Intervall sind keine Daten verfügbar. Versuchen Sie es mit einem anderen Zeitbereich oder prüfen Sie, ob die Daten für diesen Zeitraum aufgezeichnet wurden." + }, + "timeFrame": "Zeitrahmen", + "scientificName": "Wissenschaftlicher Name", + "type": "Typ", + "interventions": "Interventionen", + "monitoringPlots": "Monitoring Plots (Demnächst)", + "trillion": "Bill.", + "billion": "Mrd.", + "million": "Mill.", + "thousand": "Tsd." + } +} diff --git a/public/static/locales/en/bulkCodes.json b/public/static/locales/en/bulkCodes.json index 3c05187b43..0b385e0ffb 100644 --- a/public/static/locales/en/bulkCodes.json +++ b/public/static/locales/en/bulkCodes.json @@ -1,106 +1,116 @@ { - "bulkCodesTitle": "Issue Tree Certificates & Codes", - "partnerSignupInfo": "Use of this feature by Companies is subject to partnership with Plant-for-the-Planet. Please contact <2>partner@plant-for-the-planet.org for details.", - "bulkCodesDescription1": "Using PlanetCash you can generate thousands of codes in a single operation. Generating tree certificates will increase your tree count.", - "bulkCodesDescription2": "You can use this feature to create codes for custom certificates, gift cards, donations on behalf of users and redeemable codes that you can associate with your products.", - "tabCreationMethod": "Creation Method", - "tabSelectProject": "Select Project", - "tabIssueCodes": "Issue Codes", - "issueCodes": "Issue Codes", - "issuingCodes": "Issuing Codes...", - "importMethodText": { - "title": "Create Custom Tree Certificates", - "subtitle": "Use this method (for a maximum of 1000 recipients in one transaction) if one of the following criteria match your use case:", - "details": ["I want to provide the Recipient's name or Email for each code.", "I want Plant-for-the-Planet to automatically email the recipients once it has been generated (optional).", "I want to issue codes for different tree counts."] - }, - "genericMethodText": { - "title": "Create Generic Codes", - "subtitle": "Use this method if the following criteria matches your use case:", - "details": ["All codes will have the same value.", "I want to generate a number of code for arbitrary recipients.", "Names and Emails cannot be associated with the code."] - }, - "projectName": "Project Name", - "costPerUnit": "Cost per Unit", - "labelComment": "Comment [Private]", - "unitOfMeasurement": "Unit of Measurement", - "units": { - "ha": "ha", - "tree": "tree", - "m2": "m²" - }, - "unitsPerCode": "Units per Code*", - "totalNumberOfCodes": "Total Number of Codes*", - "occasion": "Occasion", - "total": "Total", - "chargeConsentText": "By clicking Issue Codes, you agree that above amount will be charged to your account.", - "invalidEmailWarningText": "Please make sure that that Recipient Email is a valid email. Using dummy or invalid emails will lead to account suspension in accordance with Platform terms and conditions.", - "projectRequired": "No project is selected.", - "unitsPerCodeRequired": "Each code should contain at least 1 unit.", - "codeQuantityRequired": "You need to create at least 1 code.", - "unitsPerCodeInvalidRange": "One code can contain a maximum of 1000 units.", - "codeQuantityInvalidRange": "A maximum of 5000 codes can be created.", - "featureAvailability": "This feature is available only for partner projects.", - "planetCashDisabled": "PlanetCash is not activated. Please activate PlanetCash to use this feature.", - "insufficientPCashBalance": "Insufficient balance.", - "addBalanceGeneric": "Please Click here to add funds.", - "instructionsUploadCSV": { - "empty": "Drag and drop / click to select a .xslx / .csv file for upload.", - "error": "Please check for issues and drag .xslx / .csv file here to upload.", - "processing": "Please wait while we analyze your file...", - "success": "Continue or drag .xlsx or .csv file here to replace current file." - }, - "statusUploadCSV": { - "error": "Error", - "success": "File analysis complete" - }, - "errorUploadCSV": { - "fileInvalidType": "Only .csv and .xslx files are permitted.", - "tooManyFiles": "Please upload only a single file.", - "fileTooSmall": "The uploaded file seems to be empty.", - "fileTooLarge": "The uploaded file must be 5MB or less.", - "missingColumns": "The uploaded file does not contain the following columns: ", - "noRecipientData": "No recipient data found.", - "tooManyRecipients": "A maximum of 1000 recipients can be processed in one transaction.", - "unitsNotProvided": "Units are missing/invalid for some recipients.", - "notifyNotPossible": "Email and name are missing for some recipients that are to be notified.", - "instructionRowError": "An error occurred on the 1st row. Please check if you have deleted the instructions, or if there is additional data.", - "invalidEmails": "recipient_email contains dummy/invalid emails on the following rows: {{rowList}}. Please remove invalid emails or add valid emails.", - "generalError": "Something went wrong. Please try after a while." - }, - "errorAddRecipient": { - "unitsNotProvided": "Mandatory", - "requiredForNotifications": "Required (to email recipients)", - "emailInvalid": "Invalid email" - }, - "successUploadCSV": { - "ignoredColumns": "Extra columns were ignored" - }, - "importInstructions": "Please refer to the <2>documentation here, download <5>Excel template here, and <8>CSV template here.", - "tableHeaders": { - "recipient_name": "Recipient Name", - "recipient_email": "Recipient Email", - "recipient_notify": "Send Email?", - "units": "Units", - "recipient_message": "Message" - }, - "tableHeaderHelpText": { - "recipient_name": "Optional. Name of the recipient, shown on the certificate and if opted in, in the mail sent to the recipient. Required if you want to send emails.", - "recipient_email": "Optional. Required to send certificate to the recipient by email.", - "recipient_notify": "Optional. Select Yes if you want Plant-for-the-Planet to inform the recipient via email automatically.", - "units": "Mandatory. Number of trees that are given to the recipient, e.g., 5 for 5 trees", - "recipient_message": "Optional. Message to the recipient that is included in the email if notify is yes. A default message will be sent if not provided." - }, - "donationSuccess": "Your donation was successful. Redirecting you to view donation details shortly...", - "donationError": { - "planet_cash_insufficient_credit": "Available credit = {{availableBalance}}. Please load balance in your PlanetCash account to make this donation.", - "default": "Something went wrong. Please try after a while.", - "planet_cash_payment_failure": "The transaction failed. {{reason}}", - "planet_cash_invalid_project": "You cannot make a donation to the selected project." - }, - "titleAddRecipientButton": "Add recipient to table", - "notifyRecipientOptions": { - "yes": "Yes", - "no": "No" - }, - "fileUploadWarning": "This will remove your existing recipient data, do you want to continue?", - "unsavedDataWarning": "Some recipient data is unsaved. Do you wish to proceed? Unsaved data will be lost" -} \ No newline at end of file + "BulkCodes": { + "bulkCodesTitle": "Issue Tree Certificates & Codes", + "partnerSignupInfo": "Use of this feature by Companies is subject to partnership with Plant-for-the-Planet. Please contact <2>partner@plant-for-the-planet.org for details.", + "bulkCodesDescription1": "Using PlanetCash you can generate thousands of codes in a single operation. Generating tree certificates will increase your tree count.", + "bulkCodesDescription2": "You can use this feature to create codes for custom certificates, gift cards, donations on behalf of users and redeemable codes that you can associate with your products.", + "tabCreationMethod": "Creation Method", + "tabSelectProject": "Select Project", + "tabIssueCodes": "Issue Codes", + "issueCodes": "Issue Codes", + "issuingCodes": "Issuing Codes...", + "importMethodText": { + "title": "Create Custom Tree Certificates", + "subtitle": "Use this method (for a maximum of 1000 recipients in one transaction) if one of the following criteria match your use case:", + "details": [ + "I want to provide the Recipient's name or Email for each code.", + "I want Plant-for-the-Planet to automatically email the recipients once it has been generated (optional).", + "I want to issue codes for different tree counts." + ] + }, + "genericMethodText": { + "title": "Create Generic Codes", + "subtitle": "Use this method if the following criteria matches your use case:", + "details": [ + "All codes will have the same value.", + "I want to generate a number of code for arbitrary recipients.", + "Names and Emails cannot be associated with the code." + ] + }, + "projectName": "Project Name", + "costPerUnit": "Cost per Unit", + "labelComment": "Comment [Private]", + "unitOfMeasurement": "Unit of Measurement", + "units": { + "ha": "ha", + "tree": "tree", + "m2": "m²" + }, + "unitsPerCode": "Units per Code*", + "totalNumberOfCodes": "Total Number of Codes*", + "occasion": "Occasion", + "total": "Total", + "chargeConsentText": "By clicking Issue Codes, you agree that above amount will be charged to your account.", + "invalidEmailWarningText": "Please make sure that that Recipient Email is a valid email. Using dummy or invalid emails will lead to account suspension in accordance with Platform terms and conditions.", + "projectRequired": "No project is selected.", + "unitsPerCodeRequired": "Each code should contain at least 1 unit.", + "codeQuantityRequired": "You need to create at least 1 code.", + "unitsPerCodeInvalidRange": "One code can contain a maximum of 1000 units.", + "codeQuantityInvalidRange": "A maximum of 5000 codes can be created.", + "featureAvailability": "This feature is available only for partner projects.", + "planetCashDisabled": "PlanetCash is not activated. Please activate PlanetCash to use this feature.", + "insufficientPCashBalance": "Insufficient balance.", + "addBalanceGeneric": "Please Click here to add funds.", + "instructionsUploadCSV": { + "empty": "Drag and drop / click to select a .xslx / .csv file for upload.", + "error": "Please check for issues and drag .xslx / .csv file here to upload.", + "processing": "Please wait while we analyze your file...", + "success": "Continue or drag .xlsx or .csv file here to replace current file." + }, + "statusUploadCSV": { + "error": "Error", + "success": "File analysis complete" + }, + "errorUploadCSV": { + "fileInvalidType": "Only .csv and .xslx files are permitted.", + "tooManyFiles": "Please upload only a single file.", + "fileTooSmall": "The uploaded file seems to be empty.", + "fileTooLarge": "The uploaded file must be 5MB or less.", + "missingColumns": "The uploaded file does not contain the following columns: ", + "noRecipientData": "No recipient data found.", + "tooManyRecipients": "A maximum of 1000 recipients can be processed in one transaction.", + "unitsNotProvided": "Units are missing/invalid for some recipients.", + "notifyNotPossible": "Email and name are missing for some recipients that are to be notified.", + "instructionRowError": "An error occurred on the 1st row. Please check if you have deleted the instructions, or if there is additional data.", + "invalidEmails": "recipient_email contains dummy/invalid emails on the following rows: {{rowList}}. Please remove invalid emails or add valid emails.", + "generalError": "Something went wrong. Please try after a while." + }, + "errorAddRecipient": { + "unitsNotProvided": "Mandatory", + "requiredForNotifications": "Required (to email recipients)", + "emailInvalid": "Invalid email" + }, + "successUploadCSV": { + "ignoredColumns": "Extra columns were ignored" + }, + "importInstructions": "Please refer to the <2>documentation here, download <5>Excel template here, and <8>CSV template here.", + "tableHeaders": { + "recipient_name": "Recipient Name", + "recipient_email": "Recipient Email", + "recipient_notify": "Send Email?", + "units": "Units", + "recipient_message": "Message" + }, + "tableHeaderHelpText": { + "recipient_name": "Optional. Name of the recipient, shown on the certificate and if opted in, in the mail sent to the recipient. Required if you want to send emails.", + "recipient_email": "Optional. Required to send certificate to the recipient by email.", + "recipient_notify": "Optional. Select Yes if you want Plant-for-the-Planet to inform the recipient via email automatically.", + "units": "Mandatory. Number of trees that are given to the recipient, e.g., 5 for 5 trees", + "recipient_message": "Optional. Message to the recipient that is included in the email if notify is yes. A default message will be sent if not provided." + }, + "donationSuccess": "Your donation was successful. Redirecting you to view donation details shortly...", + "donationError": { + "planet_cash_insufficient_credit": "Available credit = {{availableBalance}}. Please load balance in your PlanetCash account to make this donation.", + "default": "Something went wrong. Please try after a while.", + "planet_cash_payment_failure": "The transaction failed. {{reason}}", + "planet_cash_invalid_project": "You cannot make a donation to the selected project." + }, + "titleAddRecipientButton": "Add recipient to table", + "notifyRecipientOptions": { + "yes": "Yes", + "no": "No" + }, + "fileUploadWarning": "This will remove your existing recipient data, do you want to continue?", + "unsavedDataWarning": "Some recipient data is unsaved. Do you wish to proceed? Unsaved data will be lost" + } +} diff --git a/public/static/locales/en/donationLink.json b/public/static/locales/en/donationLink.json index c8d5706a6a..b4ab718b41 100644 --- a/public/static/locales/en/donationLink.json +++ b/public/static/locales/en/donationLink.json @@ -1,23 +1,25 @@ { - "donationLinkTitle": "Create Your Donation Link", - "donationLinkDescription": "Build the Donation Link to work according to your needs, to give your donors a smooth experience. Use Preview to see how the final result will work.", - "qrCodeDiscription": "Instead of the link, you can also provide the QR-Code to reach your intended project.", - "labelCountry": "Country", - "labelLanguages": "Language", - "countryLanguageTitle": "Set the Country and Language", - "projectTitle": "Set your Project", - "treeCounterTitle": "Support my TreeCounter", - "testingTitle": "Testing Mode", - "urlTitle": "Your Donation Link URL", - "qrCodeTitle": "Your Donation Link QR-Code", - "languages": "Languages", - "preview": "Preview", - "copy": "Copy", - "treeCounterSubtitle": "Tree donations via this link support my profile directly", - "testingModeSubtitle1": "To test, use the link that is now displayed. This is for testing only, for the correct link to share you need to turn off the Testing Mode.", - "testingModeSubtitle2": "You can test donation flow using cards at", - "linkAndQRCodeUpdatedMessage": "Link and QR-Code have been updated", - "treeCounterPrivateAccountSubtitle": "To support your profile, you must set it to public within the account settings.", - "automaticSelection": "Automatic Selection", - "qrCodeFileName": "Donation-link-QR-Code" -} \ No newline at end of file + "DonationLink": { + "donationLinkTitle": "Create Your Donation Link", + "donationLinkDescription": "Build the Donation Link to work according to your needs, to give your donors a smooth experience. Use Preview to see how the final result will work.", + "qrCodeDiscription": "Instead of the link, you can also provide the QR-Code to reach your intended project.", + "labelCountry": "Country", + "labelLanguages": "Language", + "countryLanguageTitle": "Set the Country and Language", + "projectTitle": "Set your Project", + "treeCounterTitle": "Support my TreeCounter", + "testingTitle": "Testing Mode", + "urlTitle": "Your Donation Link URL", + "qrCodeTitle": "Your Donation Link QR-Code", + "languages": "Languages", + "preview": "Preview", + "copy": "Copy", + "treeCounterSubtitle": "Tree donations via this link support my profile directly", + "testingModeSubtitle1": "To test, use the link that is now displayed. This is for testing only, for the correct link to share you need to turn off the Testing Mode.", + "testingModeSubtitle2": "You can test donation flow using cards at", + "linkAndQRCodeUpdatedMessage": "Link and QR-Code have been updated", + "treeCounterPrivateAccountSubtitle": "To support your profile, you must set it to public within the account settings.", + "automaticSelection": "Automatic Selection", + "qrCodeFileName": "Donation-link-QR-Code" + } +} diff --git a/public/static/locales/en/editProfile.json b/public/static/locales/en/editProfile.json index 6470bfa930..800cd77d0c 100644 --- a/public/static/locales/en/editProfile.json +++ b/public/static/locales/en/editProfile.json @@ -1,60 +1,62 @@ { - "loginTitle": "{{log}} - Login", - "signUpText": "Complete Signup", - "profileTypes": "{{item.title}}", - "createAccount": "Create Account", - "individual": "Person", - "tpo": "Restoration Organization", - "education": "School", - "organization": "Company", - "profileCreated": "Profile Successfully created!", - "profileCreationFailed": "Error in creating profile. Please try again.", - "profileCreationError": "Error in creating profile.", - "edit": "Edit Profile", - "privateAccountTxt": "Your profile is hidden and only your first name appears in the leaderboard", - "save": "Save", - "profilePicUpdated": "Profile picture is being updated...", - "profileSaved": "Saved successfully!", - "profileSaveFailed": "Error in updating profile.", - "changeAccountToPublic": "Switch to a Public Account", - "publicAccount": "Public Account", - "accountPrivacyChangeText": "In order to create a profile widget you need to have a public account. By clicking continue you change your privacy settings to public.", - "continue": "Continue", - "cancel": "Cancel", - "termAndCondition": "I agree to the <0>Terms and Conditions of the Plant-for-the-Planet platform.", - "termAndConditionError": "Please Accept the Terms and Conditions", - "fieldLabels": { - "profileType": "I am a", - "firstName": "First Name", - "lastName": "Last Name", - "name": "Name of {{type}}", - "email": "Email", - "address": "Address", - "city": "City", - "zipCode": "Postal/Zip Code", - "country": "Country", - "bio": "Profile Description", - "website": "Website", - "privateAccount": "Private Account", - "subscribe": "Subscribe to news via email" - }, - "validationErrors": { - "maxChars": "Should be {{max}} characters or less", - "firstNameRequired": "First Name field is required", - "firstNameInvalid": "First name is invalid. It cannot start with a special character, and only these special characters are allowed: space ' . -", - "lastNameRequired": "Last Name field is required", - "lastNameInvalid": "Last name is invalid. It cannot start with a special character, and only these special characters are allowed: space ' -", - "emailRequired": "Email is required", - "nameRequired": "Please enter a name", - "nameInvalid": "Name is invalid. Only these special characters are allowed: space . , ' & ( ) ! -", - "addressRequired": "Address is required", - "addressInvalid": "Address is invalid. Only these special characters are allowed: space . , # - /", - "cityRequired": "City is required", - "cityInvalid": "City is invalid. Only letters and these special characters are allowed: space . , ( ) -", - "zipCodeRequired": "Zip Code is required", - "zipCodeInvalid": "Zip Code is invalid", - "websiteInvalid": "Please enter valid Website URL", - "countryRequired": "Country is required", - "companyRequired": "Company Name is required" + "EditProfile": { + "loginTitle": "{{log}} - Login", + "signUpText": "Complete Signup", + "profileTypes": "{{item.title}}", + "createAccount": "Create Account", + "individual": "Person", + "tpo": "Restoration Organization", + "education": "School", + "organization": "Company", + "profileCreated": "Profile Successfully created!", + "profileCreationFailed": "Error in creating profile. Please try again.", + "profileCreationError": "Error in creating profile.", + "edit": "Edit Profile", + "privateAccountTxt": "Your profile is hidden and only your first name appears in the leaderboard", + "save": "Save", + "profilePicUpdated": "Profile picture is being updated...", + "profileSaved": "Saved successfully!", + "profileSaveFailed": "Error in updating profile.", + "changeAccountToPublic": "Switch to a Public Account", + "publicAccount": "Public Account", + "accountPrivacyChangeText": "In order to create a profile widget you need to have a public account. By clicking continue you change your privacy settings to public.", + "continue": "Continue", + "cancel": "Cancel", + "termAndCondition": "I agree to the <0>Terms and Conditions of the Plant-for-the-Planet platform.", + "termAndConditionError": "Please Accept the Terms and Conditions", + "fieldLabels": { + "profileType": "I am a", + "firstName": "First Name", + "lastName": "Last Name", + "name": "Name of {{type}}", + "email": "Email", + "address": "Address", + "city": "City", + "zipCode": "Postal/Zip Code", + "country": "Country", + "bio": "Profile Description", + "website": "Website", + "privateAccount": "Private Account", + "subscribe": "Subscribe to news via email" + }, + "validationErrors": { + "maxChars": "Should be {{max}} characters or less", + "firstNameRequired": "First Name field is required", + "firstNameInvalid": "First name is invalid. It cannot start with a special character, and only these special characters are allowed: space ' . -", + "lastNameRequired": "Last Name field is required", + "lastNameInvalid": "Last name is invalid. It cannot start with a special character, and only these special characters are allowed: space ' -", + "emailRequired": "Email is required", + "nameRequired": "Please enter a name", + "nameInvalid": "Name is invalid. Only these special characters are allowed: space . , ' & ( ) ! -", + "addressRequired": "Address is required", + "addressInvalid": "Address is invalid. Only these special characters are allowed: space . , # - /", + "cityRequired": "City is required", + "cityInvalid": "City is invalid. Only letters and these special characters are allowed: space . , ( ) -", + "zipCodeRequired": "Zip Code is required", + "zipCodeInvalid": "Zip Code is invalid", + "websiteInvalid": "Please enter valid Website URL", + "countryRequired": "Country is required", + "companyRequired": "Company Name is required" + } } } diff --git a/public/static/locales/en/giftfunds.json b/public/static/locales/en/giftfunds.json index 88a1b8cfcd..bc43d72f1b 100644 --- a/public/static/locales/en/giftfunds.json +++ b/public/static/locales/en/giftfunds.json @@ -1,7 +1,9 @@ { - "title": "GiftFund", - "description1": "If you see this page, then you have balance in your GiftFund for your active PlanetCash account left. Check the information below.", - "description2": "In case of questions, please contact your Key Account Manager.", - "project": "Project", - "units": "Available Units" -} \ No newline at end of file + "Giftfunds": { + "title": "GiftFund", + "description1": "If you see this page, then you have balance in your GiftFund for your active PlanetCash account left. Check the information below.", + "description2": "In case of questions, please contact your Key Account Manager.", + "project": "Project", + "units": "Available Units" + } +} diff --git a/public/static/locales/en/leaderboard.json b/public/static/locales/en/leaderboard.json index 9d68c953a8..19afb4f149 100644 --- a/public/static/locales/en/leaderboard.json +++ b/public/static/locales/en/leaderboard.json @@ -1,7 +1,9 @@ { - "forestFrontrunners": "Forest Frontrunners", - "mostRecent": "Most Recent", - "mostTrees": "Most Trees", - "videoTitle": "And finally, this", - "searchUser": "Search User" -} \ No newline at end of file + "Leaderboard": { + "forestFrontrunners": "Forest Frontrunners", + "mostRecent": "Most Recent", + "mostTrees": "Most Trees", + "videoTitle": "And finally, this", + "searchUser": "Search User" + } +} diff --git a/public/static/locales/en/managePayouts.json b/public/static/locales/en/managePayouts.json index 27a33f3af1..c7ce5730a3 100644 --- a/public/static/locales/en/managePayouts.json +++ b/public/static/locales/en/managePayouts.json @@ -1,74 +1,76 @@ { - "title": "Manage Payouts", - "description": "Keep your payout information updated (e.g. schedule, bank details) to facilitate smooth payouts", - "tabPayoutSchedule": "Payout Schedule", - "tabAddBankDetails": "Add Bank Details", - "tabOverview": "Overview", - "payoutInformation1": "Payouts are processed automatically every year, or when an organization collects 30,000 EUR or its equivalent in other currency.", - "payoutInformation2": "Payouts are issued by Plant-for-the-Planet Foundation and its sister organizations eg: Plant-for-the-Planet US, Plant-for-the-Planet Switzerland etc.", - "payoutInformation3": "You can adjust the payout schedule and receive frequent payouts as long as you meet the 1,500 EUR minimum amount criteria.", - "supportInformation": "If you have an exceptional case, please contact<1><2>support@plant-for-the-planet.org.", - "scheduleFrequencies": { - "monthly": "Monthly", - "quarterly": "Quarterly", - "semiannually": "Semi-Annual", - "annually": "Annual", - "manual": "Manual" - }, - "defaultCurrency": "Default", - "labels": { - "currency": "Currency", - "scheduleFrequency": "Payment Frequency", - "payoutMinAmount": "Minimum Payout Amount", - "bankName": "Bank Name", - "bankAddress": "Bank Address", - "bankCountry": "Bank Country", - "holderName": "Name of Account Holder", - "holderAddress": "Address of Account Holder", - "remarks": "Additional Details", - "accountNumber": "IBAN / Account Number", - "routingNumber": "ABA / Routing Number (US Only)", - "bic": "BIC / SWIFT", - "branchCode": "Branch Code" - }, - "errors": { - "scheduleFrequencyRequired": "Payment frequency is required", - "payoutMinAmountRequired": "Minimum payout amount is required", - "payoutMinAmountTooLow": "Minimum payout amount should be at least {{currency}} {{minAmount}}", - "bankNameRequired": "Bank name is required.", - "bankAddressRequired": "Bank address is required.", - "holderNameRequired": "Holder name is required.", - "holderAddressRequired": "Holder address is required.", - "accountNumberRequired": "Account number is required.", - "bicRequired": "BIC / SWIFT code is required.", - "noAccountFound": "No account was retrieved" - }, - "placeholders": { - "payoutMinAmount": "Should be at least {{currency}} {{minAmount}}", - "bankName": "e.g. Century Bank LLC", - "bankAddress": "e.g. 1 West St, Hamington Way, MA, 10311, USA", - "holderName": "e.g. John Doe", - "holderAddress": "e.g. 21 Penn Avenue, MA 10317 USA", - "remarks": "e.g. Please include ref acct=1237 on the transfer." - }, - "helperText": { - "currency": "Select “Default” if this is your standard bank account, if you need to provide special details for a currency please select it here and provide the details. We will also use the standard minimum amounts for a payout.", - "remarks": "Provide additional details, for example Intermediary Bank Details, PCs (Purpose Codes) or other References here." - }, - "saveButton": "Save", - "accountError": { - "min_amount_range": "The minimum payout amount must be at least {{currency}} {{min}}.", - "min_amount_forbidden": "You may not specify a payout minimum amount for the default account.", - "account_duplicate": "There is already a {{currency}} account.", - "default": "Something went wrong while creating an account. Please try after a while." - }, - "accountCreationSuccess": "Your account details were successfully saved.", - "accountUpdationSuccess": "Your account details were successfully updated.", - "scheduleSaveSuccess": "Your payout schedule was successfully saved.", - "editAccountButton": "Edit Account", - "accountTitleText": "Transfer for {{currency}}", - "addBankDetailsButton": "Add Bank Details", - "noBankAccountText": "You haven't added any bank details yet.", - "editBankAccountTitle": "Edit Account", - "minPayoutText": "Min. Payout: {{amount}}" -} \ No newline at end of file + "ManagePayouts": { + "title": "Manage Payouts", + "description": "Keep your payout information updated (e.g. schedule, bank details) to facilitate smooth payouts", + "tabPayoutSchedule": "Payout Schedule", + "tabAddBankDetails": "Add Bank Details", + "tabOverview": "Overview", + "payoutInformation1": "Payouts are processed automatically every year, or when an organization collects 30,000 EUR or its equivalent in other currency.", + "payoutInformation2": "Payouts are issued by Plant-for-the-Planet Foundation and its sister organizations eg: Plant-for-the-Planet US, Plant-for-the-Planet Switzerland etc.", + "payoutInformation3": "You can adjust the payout schedule and receive frequent payouts as long as you meet the 1,500 EUR minimum amount criteria.", + "supportInformation": "If you have an exceptional case, please contact<1><2>support@plant-for-the-planet.org.", + "scheduleFrequencies": { + "monthly": "Monthly", + "quarterly": "Quarterly", + "semiannually": "Semi-Annual", + "annually": "Annual", + "manual": "Manual" + }, + "defaultCurrency": "Default", + "labels": { + "currency": "Currency", + "scheduleFrequency": "Payment Frequency", + "payoutMinAmount": "Minimum Payout Amount", + "bankName": "Bank Name", + "bankAddress": "Bank Address", + "bankCountry": "Bank Country", + "holderName": "Name of Account Holder", + "holderAddress": "Address of Account Holder", + "remarks": "Additional Details", + "accountNumber": "IBAN / Account Number", + "routingNumber": "ABA / Routing Number (US Only)", + "bic": "BIC / SWIFT", + "branchCode": "Branch Code" + }, + "errors": { + "scheduleFrequencyRequired": "Payment frequency is required", + "payoutMinAmountRequired": "Minimum payout amount is required", + "payoutMinAmountTooLow": "Minimum payout amount should be at least {{currency}} {{minAmount}}", + "bankNameRequired": "Bank name is required.", + "bankAddressRequired": "Bank address is required.", + "holderNameRequired": "Holder name is required.", + "holderAddressRequired": "Holder address is required.", + "accountNumberRequired": "Account number is required.", + "bicRequired": "BIC / SWIFT code is required.", + "noAccountFound": "No account was retrieved" + }, + "placeholders": { + "payoutMinAmount": "Should be at least {{currency}} {{minAmount}}", + "bankName": "e.g. Century Bank LLC", + "bankAddress": "e.g. 1 West St, Hamington Way, MA, 10311, USA", + "holderName": "e.g. John Doe", + "holderAddress": "e.g. 21 Penn Avenue, MA 10317 USA", + "remarks": "e.g. Please include ref acct=1237 on the transfer." + }, + "helperText": { + "currency": "Select “Default” if this is your standard bank account, if you need to provide special details for a currency please select it here and provide the details. We will also use the standard minimum amounts for a payout.", + "remarks": "Provide additional details, for example Intermediary Bank Details, PCs (Purpose Codes) or other References here." + }, + "saveButton": "Save", + "accountError": { + "min_amount_range": "The minimum payout amount must be at least {{currency}} {{min}}.", + "min_amount_forbidden": "You may not specify a payout minimum amount for the default account.", + "account_duplicate": "There is already a {{currency}} account.", + "default": "Something went wrong while creating an account. Please try after a while." + }, + "accountCreationSuccess": "Your account details were successfully saved.", + "accountUpdationSuccess": "Your account details were successfully updated.", + "scheduleSaveSuccess": "Your payout schedule was successfully saved.", + "editAccountButton": "Edit Account", + "accountTitleText": "Transfer for {{currency}}", + "addBankDetailsButton": "Add Bank Details", + "noBankAccountText": "You haven't added any bank details yet.", + "editBankAccountTitle": "Edit Account", + "minPayoutText": "Min. Payout: {{amount}}" + } +} diff --git a/public/static/locales/en/me.json b/public/static/locales/en/me.json index 408b3fa189..5b24c25578 100644 --- a/public/static/locales/en/me.json +++ b/public/static/locales/en/me.json @@ -1,277 +1,279 @@ { - "managePayouts": { - "menuText": "Manage Payouts", - "titleOverview": "Manage Payouts - Overview", - "titleAddBankDetails": "Manage Payouts - Add Bank Details", - "titlePayoutSchedule": "Manage Payouts - Schedule Payouts", - "titleEditBankDetails": "Manage Payouts - Edit Bank Details" - }, - "donationLinkTitle": "Build Donation Link", - "planetcash": { - "menuText": "PlanetCash", - "submenuText": "My PlanetCash", - "titleAccount": "PlanetCash - Accounts", - "titleTransactions": "PlanetCash - Transactions", - "titleCreateAccount": "PlanetCash - Create Account" - }, - "treesPlanted": "Trees Planted", - "treesPlanted_plural": "Trees Planted", - "bulkCodesTitleStep3": "Generate Tree Certificates & Codes - Issue Codes", - "bulkCodesTitleStep2": "Generate Tree Certificates & Codes - Select Project", - "bulkCodesTitle": "Generate Tree Certificates & Codes - Select Method", - "bulkCodes": "Certificates & Codes", - "target": "Target", - "editTarget": "Edit Target", - "share": "Share", - "registerTrees": "Register Trees", - "registeredTree": "Registered Tree", - "linkedIn": "LinkedIn", - "registerTreesDescription": "Register trees that you have planted yourself, e.g. in your garden.", - "myForest": "My Forest", - "giftToGiftee": "Gift to {{gifteeName}}", - "settingManageProject": "Manage Projects", - "deleteAccount": "Delete Account", - "userTree": "Register Trees", - "accountHistory": "Account History", - "logout": "Logout", - "close": "Close", - "addTarget": "Add Target", - "noOfTrees": "How many trees?", - "datePlanted": "Date Planted", - "speciesIsRequired": "Species is required", - "treeSpecies": "Tree Species", - "drawPolygon": "Please draw the area where you planted the trees. Click on the first location again when you are done.", - "selectLocation": "Select tree planting location on the map", - "registerButton": "Register", - "startDrawing": "Start Drawing", - "save": "Save", - "treesRequired": "Number of trees is required", - "wentWrong": "Something went wrong. Please contact support@plant-for-the-planet.org", - "locationMissing": "Select location on map", - "uploadPhotos": "Upload Photos", - "dragHere": "or drag here", - "contribNotFound": "Contribution Not Found", - "errorOccured": "Error Occured", - "contribSuccess": "Successfully added {{treeCount}} {{treeSpecies}} 🌳 from {{plantDate}}", - "moreThanOne": "minimum 1 tree required", - "registered": "Registered", - "receivedTrees": "Received Trees", - "redeemedTrees": "Redeemed Trees", - "myAccount": "My Account", - "all": "All", - "noRecords": "No Records", - "filters": "Filters", - "registeredTrees": "Registered Trees", - "embedWidget": "Create Widget", - "donationLink": "Create Donation Link", - "gift": "Gift", - "donation": "Donation", - "tree-donation": "Tree Donation", - "tree-gift": "Tree Gift", - "tree-cash": "TreeCash", - "planet-cash": "PlanetCash", - "trees": "Trees", - "amount": "Amount", - "created": "Date Created", - "paymentMethod": "Payment Method", - "frequency": "Frequency", - "monthly": "Monthly", - "yearly": "Yearly", - "totalDonated": "Total Donated", - "firstDonation": "First Donation Date", - "donorNameRequired": "Donor Name Required", - "donationAmountRequired": "Donation Amount Required", - "frequencyRequired": "Frequency Required", - "project": "Project Name", - "planetCashPayment": "PlanetCash Payment", - "method": "Payment Method", - "unitCost": "Cost Per {{unitType}}", - "treeCount": "Tree Count", - "lastUpdate": "Last Updated", - "donorCertificate": "Donor Certificate", - "editDonation": "Edit Donation", - "pauseDonation": "Pause Donation", - "cancelDonation": "Cancel Donation", - "reactivateDonation": "Reactivate Donation", - "resumeDonation": "Resume Donation", - "donationName": "Donation Name", - "donationAmount": "Donation Amount", - "makeChanges": "Make Changes", - "cancel": "Cancel", - "yes": "Yes", - "no": "No", - "editDonationConfirmation": "Edit Donation", - "editDonationDescription": "You can edit the following options:", - "pauseDonationConfirmation": "Pause Donation", - "pauseDonationDescription": "You can start it again after pausing by restarting.", - "pauseUntilResume": "Pause until I resume", - "pausedUntilResumed": "Paused until resumed", - "pausedUntil": "Paused until", - "pauseUntilDate": "Pause until selected Date", - "reactivateDonationConfirmation": "Reactivate Donation", - "reactivateDonationDescription": "Your donation will be reactivated and will be built on date {{currentPeriodEnds}}", - "cancelDonationConfirmation": "Cancel Donation", - "cancelDonationDescription": "Once donation is cancelled, it can not be restarted.", - "cancelDonationPaypalDescription": "This donation will be cancelled immediately, it can not be restarted.", - "cancelledOn": "Cancelled on", - "willBeCancelledOn": "Will be cancelled on", - "nextOn": "Next on", - "download": "Download", - "donations": "Donations", - "in-progress": "In Progress", - "donation-in-progress": "In Progress", - "donation-tree-cash": "TreeCash", - "donation-success": "Successful", - "cancelled": "Cancelled", - "card": "Card", - "sepa": "SEPA", - "success": "Successful", - "paid": "Successful", - "initiated": "Initiated", - "failed": "Failed", - "pending": "Pending", - "refunded": "Refunded", - "referred": "Referred", - "in-dispute": "In Dispute", - "dispute-lost": "Dispute Lost", - "nameForest": "{{name}}'s Forest", - "taxReceipt": "Tax Receipt", - "history": "History", - "recurrency": "Recurring Donations", - "new": "New", - "beta": "Beta", - "date": "Date", - "treemapper": "TreeMapper", - "register-trees": "Register Trees", - "manage-projects": "Manage Projects", - "app-payouts": "App Payouts", - "app-payout-open": "Open Payouts", - "app-payout-pending": "Pending Payouts", - "app-payout-assigned": "Assigned Payouts", - "app-payout-complete": "Completed Payouts", - "app-payout": "App Payout", - "reference": "Reference", - "fee": "Fee", - "net": "NET", - "status": "Status", - "paymentDate": "Payment Date", - "bankName": "Bank Name", - "accountHolder": "Account Holder", - "aba": "ABA", - "bic": "BIC", - "iban": "IBAN", - "swift": "SWIFT", - "isDefault": "Default Account", - "bankAccountCreated": "Bank Account Created", - "bankAccountUpdated": "Bank Account Updated", - "donation-all": "Donations", - "donation-canceled": "Cancelled", - "payout-all": "Payouts", - "payout-action-required": "Action Required", - "payout-pending": "Pending", - "payout-completed": "Completed", - "donorName": "Donor Name", - "paidAmount": "Paid Amount", - "projectGuid": "Project GUID", - "totalAmount": "Total Amount", - "disputeFee": "Dispute Fee", - "planetFee": "Planet Fee", - "transactionFee": "Transaction Fee", - "transferFee": "Transfer Fee", - "giftComment": "Comment (Private)", - "giftOccasion": "Occasion", - "open": "Open", - "downloads": "Downloads", - "account": "Account", - "loadMore": "Load More", - "setTarget": "Set Target", - "targetSave": "Save", - "targetErrorMessage": "Number must be greater than zero", - "taxDeductibleReceipt": "Tax Deductible Receipt", - "giftCertificate": "Gift Certificate", - "downloadCodes": "Download Codes", - "downloadCodesGeneralError": "Download failed. Please try after some time.", - "downloadCodesNetworkError": "Unable to fetch codes. Please check your network.", - "paypal-paypal": "Paypal", - "stripe-": "Stripe", - "unknown-method": "Unknown", - "stripe-sofort": "Sofort (Stripe)", - "tree-cash-tree-cash": "TreeCash", - "planet-cash-planet-cash": "PlanetCash", - "stripe-card": "Credit/Debit Card", - "stripe-giropay": "GiroPay (Stripe)", - "action-required": "Action Required", - "completed": "Completed", - "donationsSubTitle": "Manage all your donations and payments from one place.", - "recurrencySubTitle": "Manage all your Recurrency Donations from one place.", - "payments": "Payments", - "stripe-sepa_debit": "SEPA (Stripe)", - "sepa_debit": "SEPA (Stripe)", - "offline": "Offline", - "offline-offline": "Offline", - "profile": "Profile", - "projects": "Projects", - "settings": "Settings", - "editProfile": "Edit Profile", - "deleteProfile": "Delete Profile", - "widgets": "Widgets", - "pauseNote": "Note: You can select a date that is beyond the current period end.", - "cancelImmediately": "Cancel immediately", - "cancelOnSelectedDate": "Select Date of cancellation", - "conservation-donation": "Conservation Donation", - "funds-donation": "Donation", - "bouquet-donation": "Bouquet Donation", - "transferDetails": "Transfer Details", - "beneficiary": "Beneficiary", - "donationNote": { - "offline-offline": "Bank transfers usually take 1–5 business days to reach us. As soon as your transfer arrives we will send you a confirmation email with your receipts (and your certificate).", - "stripe-sepa_debit": "SEPA payments take 2-14 business days (usually 3-5 days). As soon as your transfer arrives we will send you a confirmation email with your receipts (and your certificate).", - "stripe-sofort": "SOFORT payments take 2-14 business days (usually 2-3 days). As soon as your transfer arrives we will send you a confirmation email with your receipts (and your certificate).", - "in-dispute": "Your transfer was disputed. Usually $7 - $15.00 dispute fee is charged by Payment Providers. Please Contact support@plant-for-the-planet.org for details." - }, - "active": "active", - "canceled": "cancelled", - "incomplete": "pending", - "incomplete_expired": "cancelled", - "past_due": "past due", - "unpaid": "unpaid", - "trialing": "active", - "paused": "paused", - "plantLocations": "Plant Locations", - "mySpecies": "My Species", - "import": "Import", - "pausingDonation": "Pausing donation", - "cancellingDonation": "Cancelling donation", - "reactivatingDonation": "Reactivating donation", - "editingDonation": "Editing donation", - "noteToWait": "Note: It will take 5-10 minutes to update the Recurring Donation", - "apiKey": "API Key", - "apiKeyMessage1": "API Key is like a digital password that allows you to act as your profile in any application. It also allows applications to donate on your behalf, use PlanetCash and view transactions.", - "apiKeyMessage2": "Once you generate an API Key, we will require a two factor authentication for your login. This you’ll be able to setup next time you log in.", - "apiKeyMessage3": "Regenerating an API Key will invalidate your existing API Key immediately.", - "regenerateKey": "Regenerate Key", - "giftFund": "GiftFund", - "dataExplorer": "Data Explorer", - "switchUser": "Impersonate User", - "switchUserMessage": "Enter the email of the user you want to switch to in the field below.", - "profileEmail": "Profile Email", - "supportPin": "Support Pin", - "alphaNumeric": "Enter 4 digit alpha numeric code", - "switch": "Impersonate", - "targetUser": "You are currently impersonating {{impersonatedEmail}}", - "exitImpersonation": "Exit impersonation", - "enterTheEmail": "Enter the email of the target user", - "enterSupportPin": "Enter the support pin of the target user", - "invalidEmail": "Please enter a valid email Id", - "wrongEntered": "Email id or Support pin is incorrect !!", - "donatedTrees": "Donated Trees", - "resetPin": "Reset Pin", - "donate": "Donate", - "donated": "Donated", - "conserved": "Conserved", - "restored": "Restored", - "membershipCtaButtonText": "JOIN NOW", - "membershipCtaCopy": "Support us <2>BY BECOMING A MEMBER", - "shareUrl": "Share URL", - "treesOfTrees": "{{count1}} of {{count2}}" + "Me": { + "managePayouts": { + "menuText": "Manage Payouts", + "titleOverview": "Manage Payouts - Overview", + "titleAddBankDetails": "Manage Payouts - Add Bank Details", + "titlePayoutSchedule": "Manage Payouts - Schedule Payouts", + "titleEditBankDetails": "Manage Payouts - Edit Bank Details" + }, + "donationLinkTitle": "Build Donation Link", + "planetcash": { + "menuText": "PlanetCash", + "submenuText": "My PlanetCash", + "titleAccount": "PlanetCash - Accounts", + "titleTransactions": "PlanetCash - Transactions", + "titleCreateAccount": "PlanetCash - Create Account" + }, + "treesPlanted": "Trees Planted", + "treesPlanted_plural": "Trees Planted", + "bulkCodesTitleStep3": "Generate Tree Certificates & Codes - Issue Codes", + "bulkCodesTitleStep2": "Generate Tree Certificates & Codes - Select Project", + "bulkCodesTitle": "Generate Tree Certificates & Codes - Select Method", + "bulkCodes": "Certificates & Codes", + "target": "Target", + "editTarget": "Edit Target", + "share": "Share", + "registerTrees": "Register Trees", + "registeredTree": "Registered Tree", + "linkedIn": "LinkedIn", + "registerTreesDescription": "Register trees that you have planted yourself, e.g. in your garden.", + "myForest": "My Forest", + "giftToGiftee": "Gift to {{gifteeName}}", + "settingManageProject": "Manage Projects", + "deleteAccount": "Delete Account", + "userTree": "Register Trees", + "accountHistory": "Account History", + "logout": "Logout", + "close": "Close", + "addTarget": "Add Target", + "noOfTrees": "How many trees?", + "datePlanted": "Date Planted", + "speciesIsRequired": "Species is required", + "treeSpecies": "Tree Species", + "drawPolygon": "Please draw the area where you planted the trees. Click on the first location again when you are done.", + "selectLocation": "Select tree planting location on the map", + "registerButton": "Register", + "startDrawing": "Start Drawing", + "save": "Save", + "treesRequired": "Number of trees is required", + "wentWrong": "Something went wrong. Please contact support@plant-for-the-planet.org", + "locationMissing": "Select location on map", + "uploadPhotos": "Upload Photos", + "dragHere": "or drag here", + "contribNotFound": "Contribution Not Found", + "errorOccured": "Error Occured", + "contribSuccess": "Successfully added {{treeCount}} {{treeSpecies}} 🌳 from {{plantDate}}", + "moreThanOne": "minimum 1 tree required", + "registered": "Registered", + "receivedTrees": "Received Trees", + "redeemedTrees": "Redeemed Trees", + "myAccount": "My Account", + "all": "All", + "noRecords": "No Records", + "filters": "Filters", + "registeredTrees": "Registered Trees", + "embedWidget": "Create Widget", + "donationLink": "Create Donation Link", + "gift": "Gift", + "donation": "Donation", + "tree-donation": "Tree Donation", + "tree-gift": "Tree Gift", + "tree-cash": "TreeCash", + "planet-cash": "PlanetCash", + "trees": "Trees", + "amount": "Amount", + "created": "Date Created", + "paymentMethod": "Payment Method", + "frequency": "Frequency", + "monthly": "Monthly", + "yearly": "Yearly", + "totalDonated": "Total Donated", + "firstDonation": "First Donation Date", + "donorNameRequired": "Donor Name Required", + "donationAmountRequired": "Donation Amount Required", + "frequencyRequired": "Frequency Required", + "project": "Project Name", + "planetCashPayment": "PlanetCash Payment", + "method": "Payment Method", + "unitCost": "Cost Per {{unitType}}", + "treeCount": "Tree Count", + "lastUpdate": "Last Updated", + "donorCertificate": "Donor Certificate", + "editDonation": "Edit Donation", + "pauseDonation": "Pause Donation", + "cancelDonation": "Cancel Donation", + "reactivateDonation": "Reactivate Donation", + "resumeDonation": "Resume Donation", + "donationName": "Donation Name", + "donationAmount": "Donation Amount", + "makeChanges": "Make Changes", + "cancel": "Cancel", + "yes": "Yes", + "no": "No", + "editDonationConfirmation": "Edit Donation", + "editDonationDescription": "You can edit the following options:", + "pauseDonationConfirmation": "Pause Donation", + "pauseDonationDescription": "You can start it again after pausing by restarting.", + "pauseUntilResume": "Pause until I resume", + "pausedUntilResumed": "Paused until resumed", + "pausedUntil": "Paused until", + "pauseUntilDate": "Pause until selected Date", + "reactivateDonationConfirmation": "Reactivate Donation", + "reactivateDonationDescription": "Your donation will be reactivated and will be built on date {{currentPeriodEnds}}", + "cancelDonationConfirmation": "Cancel Donation", + "cancelDonationDescription": "Once donation is cancelled, it can not be restarted.", + "cancelDonationPaypalDescription": "This donation will be cancelled immediately, it can not be restarted.", + "cancelledOn": "Cancelled on", + "willBeCancelledOn": "Will be cancelled on", + "nextOn": "Next on", + "download": "Download", + "donations": "Donations", + "in-progress": "In Progress", + "donation-in-progress": "In Progress", + "donation-tree-cash": "TreeCash", + "donation-success": "Successful", + "cancelled": "Cancelled", + "card": "Card", + "sepa": "SEPA", + "success": "Successful", + "paid": "Successful", + "initiated": "Initiated", + "failed": "Failed", + "pending": "Pending", + "refunded": "Refunded", + "referred": "Referred", + "in-dispute": "In Dispute", + "dispute-lost": "Dispute Lost", + "nameForest": "{{name}}'s Forest", + "taxReceipt": "Tax Receipt", + "history": "History", + "recurrency": "Recurring Donations", + "new": "New", + "beta": "Beta", + "date": "Date", + "treemapper": "TreeMapper", + "register-trees": "Register Trees", + "manage-projects": "Manage Projects", + "app-payouts": "App Payouts", + "app-payout-open": "Open Payouts", + "app-payout-pending": "Pending Payouts", + "app-payout-assigned": "Assigned Payouts", + "app-payout-complete": "Completed Payouts", + "app-payout": "App Payout", + "reference": "Reference", + "fee": "Fee", + "net": "NET", + "status": "Status", + "paymentDate": "Payment Date", + "bankName": "Bank Name", + "accountHolder": "Account Holder", + "aba": "ABA", + "bic": "BIC", + "iban": "IBAN", + "swift": "SWIFT", + "isDefault": "Default Account", + "bankAccountCreated": "Bank Account Created", + "bankAccountUpdated": "Bank Account Updated", + "donation-all": "Donations", + "donation-canceled": "Cancelled", + "payout-all": "Payouts", + "payout-action-required": "Action Required", + "payout-pending": "Pending", + "payout-completed": "Completed", + "donorName": "Donor Name", + "paidAmount": "Paid Amount", + "projectGuid": "Project GUID", + "totalAmount": "Total Amount", + "disputeFee": "Dispute Fee", + "planetFee": "Planet Fee", + "transactionFee": "Transaction Fee", + "transferFee": "Transfer Fee", + "giftComment": "Comment (Private)", + "giftOccasion": "Occasion", + "open": "Open", + "downloads": "Downloads", + "account": "Account", + "loadMore": "Load More", + "setTarget": "Set Target", + "targetSave": "Save", + "targetErrorMessage": "Number must be greater than zero", + "taxDeductibleReceipt": "Tax Deductible Receipt", + "giftCertificate": "Gift Certificate", + "downloadCodes": "Download Codes", + "downloadCodesGeneralError": "Download failed. Please try after some time.", + "downloadCodesNetworkError": "Unable to fetch codes. Please check your network.", + "paypal-paypal": "Paypal", + "stripe-": "Stripe", + "unknown-method": "Unknown", + "stripe-sofort": "Sofort (Stripe)", + "tree-cash-tree-cash": "TreeCash", + "planet-cash-planet-cash": "PlanetCash", + "stripe-card": "Credit/Debit Card", + "stripe-giropay": "GiroPay (Stripe)", + "action-required": "Action Required", + "completed": "Completed", + "donationsSubTitle": "Manage all your donations and payments from one place.", + "recurrencySubTitle": "Manage all your Recurrency Donations from one place.", + "payments": "Payments", + "stripe-sepa_debit": "SEPA (Stripe)", + "sepa_debit": "SEPA (Stripe)", + "offline": "Offline", + "offline-offline": "Offline", + "profile": "Profile", + "projects": "Projects", + "settings": "Settings", + "editProfile": "Edit Profile", + "deleteProfile": "Delete Profile", + "widgets": "Widgets", + "pauseNote": "Note: You can select a date that is beyond the current period end.", + "cancelImmediately": "Cancel immediately", + "cancelOnSelectedDate": "Select Date of cancellation", + "conservation-donation": "Conservation Donation", + "funds-donation": "Donation", + "bouquet-donation": "Bouquet Donation", + "transferDetails": "Transfer Details", + "beneficiary": "Beneficiary", + "donationNote": { + "offline-offline": "Bank transfers usually take 1–5 business days to reach us. As soon as your transfer arrives we will send you a confirmation email with your receipts (and your certificate).", + "stripe-sepa_debit": "SEPA payments take 2-14 business days (usually 3-5 days). As soon as your transfer arrives we will send you a confirmation email with your receipts (and your certificate).", + "stripe-sofort": "SOFORT payments take 2-14 business days (usually 2-3 days). As soon as your transfer arrives we will send you a confirmation email with your receipts (and your certificate).", + "in-dispute": "Your transfer was disputed. Usually $7 - $15.00 dispute fee is charged by Payment Providers. Please Contact support@plant-for-the-planet.org for details." + }, + "active": "active", + "canceled": "cancelled", + "incomplete": "pending", + "incomplete_expired": "cancelled", + "past_due": "past due", + "unpaid": "unpaid", + "trialing": "active", + "paused": "paused", + "plantLocations": "Plant Locations", + "mySpecies": "My Species", + "import": "Import", + "pausingDonation": "Pausing donation", + "cancellingDonation": "Cancelling donation", + "reactivatingDonation": "Reactivating donation", + "editingDonation": "Editing donation", + "noteToWait": "Note: It will take 5-10 minutes to update the Recurring Donation", + "apiKey": "API Key", + "apiKeyMessage1": "API Key is like a digital password that allows you to act as your profile in any application. It also allows applications to donate on your behalf, use PlanetCash and view transactions.", + "apiKeyMessage2": "Once you generate an API Key, we will require a two factor authentication for your login. This you’ll be able to setup next time you log in.", + "apiKeyMessage3": "Regenerating an API Key will invalidate your existing API Key immediately.", + "regenerateKey": "Regenerate Key", + "giftFund": "GiftFund", + "dataExplorer": "Data Explorer", + "switchUser": "Impersonate User", + "switchUserMessage": "Enter the email of the user you want to switch to in the field below.", + "profileEmail": "Profile Email", + "supportPin": "Support Pin", + "alphaNumeric": "Enter 4 digit alpha numeric code", + "switch": "Impersonate", + "targetUser": "You are currently impersonating {{impersonatedEmail}}", + "exitImpersonation": "Exit impersonation", + "enterTheEmail": "Enter the email of the target user", + "enterSupportPin": "Enter the support pin of the target user", + "invalidEmail": "Please enter a valid email Id", + "wrongEntered": "Email id or Support pin is incorrect !!", + "donatedTrees": "Donated Trees", + "resetPin": "Reset Pin", + "donate": "Donate", + "donated": "Donated", + "conserved": "Conserved", + "restored": "Restored", + "membershipCtaButtonText": "JOIN NOW", + "membershipCtaCopy": "Support us <2>BY BECOMING A MEMBER", + "shareUrl": "Share URL", + "treesOfTrees": "{{count1}} of {{count2}}" + } } diff --git a/public/static/locales/en/planet.json b/public/static/locales/en/planet.json index 8187e8ac81..f020f11c68 100644 --- a/public/static/locales/en/planet.json +++ b/public/static/locales/en/planet.json @@ -1,14 +1,16 @@ { - "treesDonated": "Trees donated since launch of the platform (2019)", - "plantedByTPO": "Planted by the {{projects}}+ participating projects", - "plantedGlobally": "Trees reported to us since 2006", - "forestLoss": "Net tree loss per year", - "estimateOf": "Estimate of annual tree loss by", - "globallySince": "Number of trees self-reported to the Billion Tree Campaign (later Trillion Tree Campaign) since its founding by the UNEP in 2006", - "restoreTrees": "How do we restore a trillion trees?", - "watchVideo": "Watch Video", - "selectProjects": "How we select projects", - "learnMore": "Read More", - "treesDonatedDescription": "All tree donations processed by Plant-for-the-Planet since 2019. Includes trees donated directly through our apps as well as large private and corporate donations. These donations did not all go to projects run directly by Plant-for-the-Planet, but all participating restoration organisations. Some donated trees may not yet be planted.", - "treesPlantedDescription": "All trees donated through Plant-for-the-Planet and other trees reported as planted by participating restoration organisations." -} \ No newline at end of file + "Planet": { + "treesDonated": "Trees donated since launch of the platform (2019)", + "plantedByTPO": "Planted by the {{projects}}+ participating projects", + "plantedGlobally": "Trees reported to us since 2006", + "forestLoss": "Net tree loss per year", + "estimateOf": "Estimate of annual tree loss by", + "globallySince": "Number of trees self-reported to the Billion Tree Campaign (later Trillion Tree Campaign) since its founding by the UNEP in 2006", + "restoreTrees": "How do we restore a trillion trees?", + "watchVideo": "Watch Video", + "selectProjects": "How we select projects", + "learnMore": "Read More", + "treesDonatedDescription": "All tree donations processed by Plant-for-the-Planet since 2019. Includes trees donated directly through our apps as well as large private and corporate donations. These donations did not all go to projects run directly by Plant-for-the-Planet, but all participating restoration organisations. Some donated trees may not yet be planted.", + "treesPlantedDescription": "All trees donated through Plant-for-the-Planet and other trees reported as planted by participating restoration organisations." + } +} diff --git a/public/static/locales/en/planetcash.json b/public/static/locales/en/planetcash.json index 6f28c2e511..2d1cea3836 100644 --- a/public/static/locales/en/planetcash.json +++ b/public/static/locales/en/planetcash.json @@ -1,32 +1,34 @@ { - "title": "PlanetCash", - "partnerSignupInfo": "Use of this feature by Companies is subject to partnership with Plant-for-the-Planet. Please contact <2>partner@plant-for-the-planet.org for details.", - "description": "PlanetCash is a developer friendly tool that extends the Plant-for-the-Planet Platform with APIs and built in tools. PlanetCash balance is a contribution to Plant-for-the-Planet that can be dedicated by the donor to different projects on the platform.", - "termsText": "View Terms & Conditions.", - "learnMoreText": "Learn more about PlanetCash.", - "tabAccounts": "Accounts", - "tabCreateAccount": "Create Account", - "tabTransactions": "Transactions", - "accountTitleText": "{{currency}} PlanetCash Account ({{country}})", - "createAccountTitleText": "Signup for PlanetCash", - "addBalanceButton": "Add Balance", - "labelAccountHolder": "Account Holder", - "labelBalance": "Balance", - "labelCreditLimit": "Limit", - "deactivateAccountButton": "Deactivate", - "activateAccountButton": "Activate", - "accountInactiveHelpText": "This account is inactive and cannot be used to make contributions. To activate this account, please contact support@plant-for-the-planet.org.", - "noAccountsText": "You don't seem to have created a PlanetCash account yet.", - "createPlanetCashButton": "Create Planet Cash Account", - "accountQuotaReachedText": "You cannot create more accounts as you have exhausted your account quota.", - "accountCreationSuccess": "Your PlanetCash account was successfully created", - "labelCountry": "Country", - "planetCashTerms1": "By clicking \"Create PlanetCash Account\", I agree to the Terms and Conditions of Plant-for-the-Planet and PlanetCash.", - "planetCashTerms2": "I understand that PlanetCash donations are non-refundable, and unallocated payments will be auto allocated to projects on the Platform after six months of a Payment.", - "planetCashTerms3": "Donations to PlanetCash Account for personal reasons are generally tax-deductible in the country selected at this step. Commercial use of PlanetCash may not be eligible for tax-deductions. If you have questions please contact support@plant-for-the-planet.org or contact your Tax Advisor.", - "accountError": { - "active_account_exists": "An active account already exists. Deactivate that account before activating another account.", - "duplicate_account": "You have already created an account for {{country}}", - "default": "Something went wrong while creating an account. Please try after a while." + "PlanetCash": { + "title": "PlanetCash", + "partnerSignupInfo": "Use of this feature by Companies is subject to partnership with Plant-for-the-Planet. Please contact <2>partner@plant-for-the-planet.org for details.", + "description": "PlanetCash is a developer friendly tool that extends the Plant-for-the-Planet Platform with APIs and built in tools. PlanetCash balance is a contribution to Plant-for-the-Planet that can be dedicated by the donor to different projects on the platform.", + "termsText": "View Terms & Conditions.", + "learnMoreText": "Learn more about PlanetCash.", + "tabAccounts": "Accounts", + "tabCreateAccount": "Create Account", + "tabTransactions": "Transactions", + "accountTitleText": "{{currency}} PlanetCash Account ({{country}})", + "createAccountTitleText": "Signup for PlanetCash", + "addBalanceButton": "Add Balance", + "labelAccountHolder": "Account Holder", + "labelBalance": "Balance", + "labelCreditLimit": "Limit", + "deactivateAccountButton": "Deactivate", + "activateAccountButton": "Activate", + "accountInactiveHelpText": "This account is inactive and cannot be used to make contributions. To activate this account, please contact support@plant-for-the-planet.org.", + "noAccountsText": "You don't seem to have created a PlanetCash account yet.", + "createPlanetCashButton": "Create Planet Cash Account", + "accountQuotaReachedText": "You cannot create more accounts as you have exhausted your account quota.", + "accountCreationSuccess": "Your PlanetCash account was successfully created", + "labelCountry": "Country", + "planetCashTerms1": "By clicking \"Create PlanetCash Account\", I agree to the Terms and Conditions of Plant-for-the-Planet and PlanetCash.", + "planetCashTerms2": "I understand that PlanetCash donations are non-refundable, and unallocated payments will be auto allocated to projects on the Platform after six months of a Payment.", + "planetCashTerms3": "Donations to PlanetCash Account for personal reasons are generally tax-deductible in the country selected at this step. Commercial use of PlanetCash may not be eligible for tax-deductions. If you have questions please contact support@plant-for-the-planet.org or contact your Tax Advisor.", + "accountError": { + "active_account_exists": "An active account already exists. Deactivate that account before activating another account.", + "duplicate_account": "You have already created an account for {{country}}", + "default": "Something went wrong while creating an account. Please try after a while." + } } -} \ No newline at end of file +} diff --git a/public/static/locales/en/profile.json b/public/static/locales/en/profile.json index ce3176337c..d198db6a35 100644 --- a/public/static/locales/en/profile.json +++ b/public/static/locales/en/profile.json @@ -1,51 +1,53 @@ { - "myProfile": { - "memberSince": "Member since {{date}}", - "userDescription": "{{bio}}" - }, - "feature": { - "redeem": "Redeem", - "registerTree": "Register Tree", - "share": "Share" - }, - "myPublicProfile": { - "support": "Support", - "link": "Link" - }, - "myForestMap": { - "plantedTree_one": "{{count, number}} Tree", - "plantedTree_other": "{{count, number}} Trees", - "treesPlanted": "Trees Planted", - "restored": "Restored", - "registered": "Registered", - "conservation": "Conservation", - "projects": "projects", - "countries": "Countries", - "donations": "Donations", - "area": "{{areaConserved}} m²", - "zoomIn": "zoom in for more details", - "totalDonation_one": "{{count, number}} donation ", - "totalDonation_other": "{{count, number}} donations ", - "totalProject_one": "to {{count, number}} project", - "totalProject_other": "to {{count, number}} projects", - "tpoName": "By {{tpo}}" - }, - "myTreeCounter": { - "treesPlanted": "Trees Planted", - "editTarget": "Edit Target" - }, - "myContributions": { - "treesPlantedAndAreaRestored": "Trees Planted & Areas Restored", - "treeRegistered_one": "{{count, number}} Tree Registered", - "treeRegistered_other": "{{count, number}} Trees Registered", - "receivedFrom": "Received from {{name}}", - "loadMoreContribution": "Load More Contribution", - "loadingContribution": "Loading Contribution....", - "donate": "Donate", - "donateAgain": "Donate Again", - "conservedSmall": "conserved", - "restoredSmall": "restored", - "areaType": "{{areaConserved}} m² {{type}}", - "areaConserved": "Areas Conserved" + "Profile": { + "myProfile": { + "memberSince": "Member since {{date}}", + "userDescription": "{{bio}}" + }, + "feature": { + "redeem": "Redeem", + "registerTree": "Register Tree", + "share": "Share" + }, + "myPublicProfile": { + "support": "Support", + "link": "Link" + }, + "myForestMap": { + "plantedTree_one": "{{count, number}} Tree", + "plantedTree_other": "{{count, number}} Trees", + "treesPlanted": "Trees Planted", + "restored": "Restored", + "registered": "Registered", + "conservation": "Conservation", + "projects": "projects", + "countries": "Countries", + "donations": "Donations", + "area": "{{areaConserved}} m²", + "zoomIn": "zoom in for more details", + "totalDonation_one": "{{count, number}} donation ", + "totalDonation_other": "{{count, number}} donations ", + "totalProject_one": "to {{count, number}} project", + "totalProject_other": "to {{count, number}} projects", + "tpoName": "By {{tpo}}" + }, + "myTreeCounter": { + "treesPlanted": "Trees Planted", + "editTarget": "Edit Target" + }, + "myContributions": { + "treesPlantedAndAreaRestored": "Trees Planted & Areas Restored", + "treeRegistered_one": "{{count, number}} Tree Registered", + "treeRegistered_other": "{{count, number}} Trees Registered", + "receivedFrom": "Received from {{name}}", + "loadMoreContribution": "Load More Contribution", + "loadingContribution": "Loading Contribution....", + "donate": "Donate", + "donateAgain": "Donate Again", + "conservedSmall": "conserved", + "restoredSmall": "restored", + "areaType": "{{areaConserved}} m² {{type}}", + "areaConserved": "Areas Conserved" + } } } diff --git a/public/static/locales/en/redeem.json b/public/static/locales/en/redeem.json index e5e2f196a1..324ac2f55b 100644 --- a/public/static/locales/en/redeem.json +++ b/public/static/locales/en/redeem.json @@ -1,19 +1,21 @@ { - "myPlantedTreesByOrg": "My {{formattedNumber}} tree will be planted by {{tpoName}}", - "myPlantedTreesByOrg_plural": "My {{formattedNumber}} trees will be planted by {{tpoName}}", - "congratulations": "Congratulations!", - "addToMyTrees": "Add to my trees", - "validateCode": "Validate Code", - "enterRedeemCode": "Please enter a code to redeem", - "validating": "Validating", - "invalidType": "Invalid type, please check the link again", - "redeeming": "Redeeming:", - "invalidCode": "This code is invalid.", - "alreadyRedeemed": "The code has already been redeemed", - "redeemCode": "Redeem Code", - "redeemingCode": "Redeeming Code...", - "redeem": "Redeem", - "redeemDescription": "Redeem your tree voucher and other codes.", - "successfullyRedeemed": "Successfully Redeemed", - "redeemAnotherCode": "Redeem Another Code" -} \ No newline at end of file + "Redeem": { + "myPlantedTreesByOrg": "My {{formattedNumber}} tree will be planted by {{tpoName}}", + "myPlantedTreesByOrg_plural": "My {{formattedNumber}} trees will be planted by {{tpoName}}", + "congratulations": "Congratulations!", + "addToMyTrees": "Add to my trees", + "validateCode": "Validate Code", + "enterRedeemCode": "Please enter a code to redeem", + "validating": "Validating", + "invalidType": "Invalid type, please check the link again", + "redeeming": "Redeeming:", + "invalidCode": "This code is invalid.", + "alreadyRedeemed": "The code has already been redeemed", + "redeemCode": "Redeem Code", + "redeemingCode": "Redeeming Code...", + "redeem": "Redeem", + "redeemDescription": "Redeem your tree voucher and other codes.", + "successfullyRedeemed": "Successfully Redeemed", + "redeemAnotherCode": "Redeem Another Code" + } +} diff --git a/public/static/locales/en/registerTrees.json b/public/static/locales/en/registerTrees.json index d9a1a75e2d..c2de4da62a 100644 --- a/public/static/locales/en/registerTrees.json +++ b/public/static/locales/en/registerTrees.json @@ -1,11 +1,13 @@ { - "selectLocationMap": "Select location on map", - "requiredNumberOfTrees": "Number of Trees is required", - "numberOfTrees": "Number of Trees", - "datePlanted": "Date Planted", - "treeSpecies": "Tree Species", - "speciesRequired": "Species is required", - "drawPolygonMap": "Draw a polygon on the map", - "clickMapMark": "Click on the map to mark a location", - "next": "Next" -} \ No newline at end of file + "RedeemTrees": { + "selectLocationMap": "Select location on map", + "requiredNumberOfTrees": "Number of Trees is required", + "numberOfTrees": "Number of Trees", + "datePlanted": "Date Planted", + "treeSpecies": "Tree Species", + "speciesRequired": "Species is required", + "drawPolygonMap": "Draw a polygon on the map", + "clickMapMark": "Click on the map to mark a location", + "next": "Next" + } +} diff --git a/public/static/locales/en/tenants.json b/public/static/locales/en/tenants.json index 94b1e9a5b0..a117cf5d58 100644 --- a/public/static/locales/en/tenants.json +++ b/public/static/locales/en/tenants.json @@ -1,51 +1,53 @@ { - "nitrosb": { - "title": "Plant Trees with Nitro Snowboards", - "description": "Nitro Snowboards set a goal to support and mobilize the conservation, restoration, and growth of a forest." - }, - "energizer": { - "title": "Energizer ❤️ Baeume", - "description": "`Das Richtige tun` ist für uns der zentrale Leitgedanke, an dem wir unser Handeln ausrichten. Seit der ersten quecksilberfreien Batterie im Jahre 1989 gelingt es uns, unsere Batterien immer weiter zu verbessern, langlebiger und damit umweltfreundlicher zu machen. Unsere Partnerschaft mit Plant-for-the-Planet steht genau in dieser Tradition, die Umwelt zu schonen und für mehr Nachhaltigkeit einzustehen. Gemeinsam pflanzen wir Bäume und veranstalten Bildungsprogramme für Kinder und Jugendliche, um ein Bewusstsein für globale Gerechtigkeit und die Klimakrise zu schaffen. Einbinden wollen wir dabei auch unsere Konsumenten und den Handel, denn nur gemeinsam kann diese zentrale Herausforderung unserer Zeit gelöst werden. Bist du dabei?" - }, - "senatDerWirtschaft": { - "title": "Senat Der Wirtschaft", - "description": "Die Klimakrise ist eine der größten gesellschaftlichen Herausforderungen und es muss sich etwas ändern. Der Senat der Wirtschaft ist eine Wertegemeinschaft. Wir stehen für eine motivierende und verbindende Vision, verknüpft mit praktischer Umsetzung. Deshalb pflanzen immer mehr unserer Mitglieder Wälder, zusammen mit ihren Mitarbeiter, Geschäftspartnern und Kunden. Jeder gepflanzte Baum bindet CO2 und schenkt uns Menschen wertvolle Zeit. Diese Zeit werden wir nutzen, um unsere CO2-Emissionen massiv zu reduzieren. Versprochen!" - }, - "pampers": { - "title": "Pampers ❤️ Wald", - "descriptionTitle": "Bäume pflanzen für eine nachhaltigere Zukunft", - "description": "Gemeinsam mit euch wollen wir dabei helfen, unseren Kleinsten eine bessere Zukunft zu ermöglichen. Deshalb arbeiten wir mit der Kinder- und Jugendorganisation Plant-for-the-Planet an einem tollen Projekt: dem Pampers Wald. Pro verkaufter Packung Pampers Windeln spenden wir 0,01 EUR/CHF und insgesamt bis zu 100.000 EUR an Plant-for-the-Planet. Unser Ziel: 60.000 Bäume für eine nachhaltige Wiederaufforstung zu pflanzen. Auf der Karte seht ihr, wo das Projekt realisiert wird. Jetzt anschauen und mithelfen." - }, - "interactClub": { - "title": "Interact Club Wald", - "description": "Bäume pflanzen ist ein Generationenverbindendes, friedensstiftendes Projekt das uns Menschen und besonders jungen Menschen hoffnung gibt und auch Mut. Mut brauchen wir, um gemeinsam in dieser Klimakrise Lösungen beherzt anzupacken. Unser Ziel ist es als Kinder, Jugendliche und junge Erwachsene die Welt zu mobilisieren 1.000 Milliarden Bäume zu pflanzen damit diese Bäume uns wertvolle Zeit, etwa 15 Jahre, schenken können, die wir unbedingt nutzen sollten, um unsere CO2-Emissionen zu reduzieren. Wiederaufforstung, global skaliert, kann so zum größten Konjunkturprogramm besonders für Länder des Globalen Südens werden. Die Flächen, auf denen wir die 1.000 Milliarden zusätzlichen Bäume pflanzen können, liegen zur Hälfte in Afrika, der Rest in Lateinamerika und Südostasien, und damit in Ländern, die von der Klimakrise am stärksten betroffen sind. Diese Bäume schaffen Arbeitsplätze, sind gut für die Artenvielfalt und binden das Treibhausgas CO2. Die neue Area of Focus der Rotarischen Familie lautet: Umwelt. Wir fangen jetzt an unseren Beitrag zu leisten. Pflanz gemeinsam mit uns Bäume." - }, - "culchacandela": { - "title": "Culcha Candela X Plant-for-the-Planet", - "description": "

Wir pflanzen Bäume für ein besseres Weltklima, um uns so wichtige Zeit im Wettlauf gegen die Klimakrise zu verschaffen. Pflanz’ hier mit! 
…und beim Hören des neuen „Hamma (INVCTS &Dorfkind J-P Remix)” auf sämtlichen Musik Streaming-Plattformen.
Wir spenden die kompletten Streaming Einnahmen des Songs an Plant-for-the-Planet! Powered by music-for-nature!

" - }, - "lacoqueta": { - "title": "Plant Trees with La Coqueta", - "description": "Seeing her own children grow up and become increasingly interested in the climate crisis has inspired Celia to use her brand as a platform for positive change. After learning that trees are the most economical and effective means of binding CO2, allowing more time to reduce greenhouse gas emissions to zero and mitigate the climate crisis, they decided to embark on this exciting journey with Plant-for-the-Planet. You can also become part of that journey and donate some trees – in Granada, the hometown of Celia, or other areas around the world." - }, - "xiting": { - "title": "Planting trees – For a green future", - "description": "With this platform, we at Xiting would like to give our partners, customers, and supporters the opportunity to plant trees quickly and easily and thus join our commitment to climate protection. We are convinced that climate protection only makes sense if it is supported by a broad public and we work together towards a sustainable and green future. Trees are the ideal and most natural means for this, filtering CO2 from the air. Plant with us now! Since 2019, Xiting has successfully pursued the goal of operating as a 100% CO2-neutral company. You can find an insight into our commitment as well as existing climate partnerships here." - }, - "ulmpflanzt": { - "title": "Ulm pflanzt Bäume", - "description": "124.781 Bäume – für jede/n Ulmer Bürger/in einen. Das ist das Ziel von „Ulm pflanzt Bäume“ – der Klima-Initiative von Plant-for-the-Planet , dem unw (Ulmer Initiativkreis nachhaltige Wirtschaftsentwicklung e. V.), den Ulmer Unternehmen pervormance international, Trivis und der Volksbank Ulm sowie der Stadt Ulm und der lokalen agenda ulm 21. Pflanzen auch Sie mit und helfen Sie, das größte Aufforstungsprojekt der Menschheitsgeschichte zu realisieren. Für Sie – und für uns alle!" - }, - "sitex": { - "title": "Sitex ❤️ Wald", - "description": "Die Klimarettung ist eine globale Aufgabe und lässt sich nur bewältigen, wenn wir alle zusammen vorgehen. Wir möchten unseren Kindern und Enkelkindern einen intakten Planeten hinterlassen. Darum unterstützen wir Plant-for-the-Planet und die Methode des Bäume-Pflanzens, um möglichst viel CO² aus der Atmosphäre zu binden. Unser Beitrag in der Sitex-Gruppe: Wir pflanzen mindestens 500.000 Bäume bis 2027." - }, - "3pleset": { - "title": "Alife & Kickin ❤️ Bäume", - "description": "

#WEAREALIFE Schreibfehler? Nö, Absicht!
Ganz nach dem Motto CHOOSE LIFE seid ihr jetzt dran.
Denn ab sofort könnt ihr mit Alife & Kickin und der Organisation Plant-for-the-Planet Bäume pflanzen und Leben schenken. Erschafft mit uns den Alife & Kickin Wald. Wie?
Pro Onlinebestellung pflanzen wir in den nächsten 2 Monaten einen Baum mit Plant-for-the-Planet. Unser Ziel: 50.000 Bäume für eine nachhaltige Wiederaufforstung. Wo?
Auf der Karte seht ihr, wo unser Alife & Kickin Wald realisiert wird. Jetzt anschauen, mithelfen und noch mehr Leben schenken. CHOOSE LIFE.
ONE ORDER ONE TREE.
#WEAREALIFE

" - }, - "weareams": { - "title": "AMS ❤️ Trees", - "description": "From 2021 on AMS joins the TrillionTreeCampaign and together with Plant-for-the-Planet we start giving back to nature. We will use the opportunities we get to promote sustainability in our supply chain and through our relationships with clients and business partners. Join us and #StopTalkingStartPlanting!" + "Tenants": { + "nitrosb": { + "title": "Plant Trees with Nitro Snowboards", + "description": "Nitro Snowboards set a goal to support and mobilize the conservation, restoration, and growth of a forest." + }, + "energizer": { + "title": "Energizer ❤️ Baeume", + "description": "`Das Richtige tun` ist für uns der zentrale Leitgedanke, an dem wir unser Handeln ausrichten. Seit der ersten quecksilberfreien Batterie im Jahre 1989 gelingt es uns, unsere Batterien immer weiter zu verbessern, langlebiger und damit umweltfreundlicher zu machen. Unsere Partnerschaft mit Plant-for-the-Planet steht genau in dieser Tradition, die Umwelt zu schonen und für mehr Nachhaltigkeit einzustehen. Gemeinsam pflanzen wir Bäume und veranstalten Bildungsprogramme für Kinder und Jugendliche, um ein Bewusstsein für globale Gerechtigkeit und die Klimakrise zu schaffen. Einbinden wollen wir dabei auch unsere Konsumenten und den Handel, denn nur gemeinsam kann diese zentrale Herausforderung unserer Zeit gelöst werden. Bist du dabei?" + }, + "senatDerWirtschaft": { + "title": "Senat Der Wirtschaft", + "description": "Die Klimakrise ist eine der größten gesellschaftlichen Herausforderungen und es muss sich etwas ändern. Der Senat der Wirtschaft ist eine Wertegemeinschaft. Wir stehen für eine motivierende und verbindende Vision, verknüpft mit praktischer Umsetzung. Deshalb pflanzen immer mehr unserer Mitglieder Wälder, zusammen mit ihren Mitarbeiter, Geschäftspartnern und Kunden. Jeder gepflanzte Baum bindet CO2 und schenkt uns Menschen wertvolle Zeit. Diese Zeit werden wir nutzen, um unsere CO2-Emissionen massiv zu reduzieren. Versprochen!" + }, + "pampers": { + "title": "Pampers ❤️ Wald", + "descriptionTitle": "Bäume pflanzen für eine nachhaltigere Zukunft", + "description": "Gemeinsam mit euch wollen wir dabei helfen, unseren Kleinsten eine bessere Zukunft zu ermöglichen. Deshalb arbeiten wir mit der Kinder- und Jugendorganisation Plant-for-the-Planet an einem tollen Projekt: dem Pampers Wald. Pro verkaufter Packung Pampers Windeln spenden wir 0,01 EUR/CHF und insgesamt bis zu 100.000 EUR an Plant-for-the-Planet. Unser Ziel: 60.000 Bäume für eine nachhaltige Wiederaufforstung zu pflanzen. Auf der Karte seht ihr, wo das Projekt realisiert wird. Jetzt anschauen und mithelfen." + }, + "interactClub": { + "title": "Interact Club Wald", + "description": "Bäume pflanzen ist ein Generationenverbindendes, friedensstiftendes Projekt das uns Menschen und besonders jungen Menschen hoffnung gibt und auch Mut. Mut brauchen wir, um gemeinsam in dieser Klimakrise Lösungen beherzt anzupacken. Unser Ziel ist es als Kinder, Jugendliche und junge Erwachsene die Welt zu mobilisieren 1.000 Milliarden Bäume zu pflanzen damit diese Bäume uns wertvolle Zeit, etwa 15 Jahre, schenken können, die wir unbedingt nutzen sollten, um unsere CO2-Emissionen zu reduzieren. Wiederaufforstung, global skaliert, kann so zum größten Konjunkturprogramm besonders für Länder des Globalen Südens werden. Die Flächen, auf denen wir die 1.000 Milliarden zusätzlichen Bäume pflanzen können, liegen zur Hälfte in Afrika, der Rest in Lateinamerika und Südostasien, und damit in Ländern, die von der Klimakrise am stärksten betroffen sind. Diese Bäume schaffen Arbeitsplätze, sind gut für die Artenvielfalt und binden das Treibhausgas CO2. Die neue Area of Focus der Rotarischen Familie lautet: Umwelt. Wir fangen jetzt an unseren Beitrag zu leisten. Pflanz gemeinsam mit uns Bäume." + }, + "culchacandela": { + "title": "Culcha Candela X Plant-for-the-Planet", + "description": "

Wir pflanzen Bäume für ein besseres Weltklima, um uns so wichtige Zeit im Wettlauf gegen die Klimakrise zu verschaffen. Pflanz’ hier mit! 
…und beim Hören des neuen „Hamma (INVCTS &Dorfkind J-P Remix)” auf sämtlichen Musik Streaming-Plattformen.
Wir spenden die kompletten Streaming Einnahmen des Songs an Plant-for-the-Planet! Powered by music-for-nature!

" + }, + "lacoqueta": { + "title": "Plant Trees with La Coqueta", + "description": "Seeing her own children grow up and become increasingly interested in the climate crisis has inspired Celia to use her brand as a platform for positive change. After learning that trees are the most economical and effective means of binding CO2, allowing more time to reduce greenhouse gas emissions to zero and mitigate the climate crisis, they decided to embark on this exciting journey with Plant-for-the-Planet. You can also become part of that journey and donate some trees – in Granada, the hometown of Celia, or other areas around the world." + }, + "xiting": { + "title": "Planting trees – For a green future", + "description": "With this platform, we at Xiting would like to give our partners, customers, and supporters the opportunity to plant trees quickly and easily and thus join our commitment to climate protection. We are convinced that climate protection only makes sense if it is supported by a broad public and we work together towards a sustainable and green future. Trees are the ideal and most natural means for this, filtering CO2 from the air. Plant with us now! Since 2019, Xiting has successfully pursued the goal of operating as a 100% CO2-neutral company. You can find an insight into our commitment as well as existing climate partnerships here." + }, + "ulmpflanzt": { + "title": "Ulm pflanzt Bäume", + "description": "124.781 Bäume – für jede/n Ulmer Bürger/in einen. Das ist das Ziel von „Ulm pflanzt Bäume“ – der Klima-Initiative von Plant-for-the-Planet , dem unw (Ulmer Initiativkreis nachhaltige Wirtschaftsentwicklung e. V.), den Ulmer Unternehmen pervormance international, Trivis und der Volksbank Ulm sowie der Stadt Ulm und der lokalen agenda ulm 21. Pflanzen auch Sie mit und helfen Sie, das größte Aufforstungsprojekt der Menschheitsgeschichte zu realisieren. Für Sie – und für uns alle!" + }, + "sitex": { + "title": "Sitex ❤️ Wald", + "description": "Die Klimarettung ist eine globale Aufgabe und lässt sich nur bewältigen, wenn wir alle zusammen vorgehen. Wir möchten unseren Kindern und Enkelkindern einen intakten Planeten hinterlassen. Darum unterstützen wir Plant-for-the-Planet und die Methode des Bäume-Pflanzens, um möglichst viel CO² aus der Atmosphäre zu binden. Unser Beitrag in der Sitex-Gruppe: Wir pflanzen mindestens 500.000 Bäume bis 2027." + }, + "3pleset": { + "title": "Alife & Kickin ❤️ Bäume", + "description": "

#WEAREALIFE Schreibfehler? Nö, Absicht!
Ganz nach dem Motto CHOOSE LIFE seid ihr jetzt dran.
Denn ab sofort könnt ihr mit Alife & Kickin und der Organisation Plant-for-the-Planet Bäume pflanzen und Leben schenken. Erschafft mit uns den Alife & Kickin Wald. Wie?
Pro Onlinebestellung pflanzen wir in den nächsten 2 Monaten einen Baum mit Plant-for-the-Planet. Unser Ziel: 50.000 Bäume für eine nachhaltige Wiederaufforstung. Wo?
Auf der Karte seht ihr, wo unser Alife & Kickin Wald realisiert wird. Jetzt anschauen, mithelfen und noch mehr Leben schenken. CHOOSE LIFE.
ONE ORDER ONE TREE.
#WEAREALIFE

" + }, + "weareams": { + "title": "AMS ❤️ Trees", + "description": "From 2021 on AMS joins the TrillionTreeCampaign and together with Plant-for-the-Planet we start giving back to nature. We will use the opportunities we get to promote sustainability in our supply chain and through our relationships with clients and business partners. Join us and #StopTalkingStartPlanting!" + } } -} \ No newline at end of file +} diff --git a/public/static/locales/en/treemapper.json b/public/static/locales/en/treemapper.json index 081965fac8..2bb6d6239a 100644 --- a/public/static/locales/en/treemapper.json +++ b/public/static/locales/en/treemapper.json @@ -1,67 +1,69 @@ { - "trees": "Trees", - "tree": "Tree", - "on": "on", - "partial": "Partial", - "complete": "Complete", - "on-site": "On Site", - "off-site": "Off Site", - "captureMode": "Capture Mode", - "captureStatus": "Capture Status", - "coordinates": "Coordinates", - "guid": "GUID", - "height": "Height", - "width": "Width", - "plantDate": "Plant Date", - "registrationDate": "Registration Date", - "plantProject": "Plant Project", - "species": "Species", - "sampleTrees": "Sample Trees", - "loadMore": "Load More", - "treeMapper": "TreeMapper", - "cm": "cm", - "m": "m", - "plantingLocation": "Planting Location", - "reviewAndSubmit": "Review and Submit", - "sampleTree": "Sample Tree #{{number}}", - "import": "Import", - "editor": "Editor", - "draw": "Draw", - "addAnotherSpecies": "Add Another Species", - "continue": "Continue", - "downloadCSVTemplate": "Download CSV Template", - "treeTag": "Tree Tag", - "diameter": "Diameter", - "latitude": "Latitude", - "longitude": "Longitude", - "addAnotherSampleTree": "Add Another Sample Tree", - "skip": "Skip", - "treeSpecies": "Tree Species", - "plantingDate": "Planting Date", - "summary": "Summary", - "reviewSubmitDescription": "Review the data you just uploaded and submit it to TreeMapper.", - "submittedSuccess": "Submitted Successfully", - "submittedSuccessDescription": "Your trees have been submitted to TreeMapper. You can view them in your plant locations or in the TreeMapper app.", - "myPlantLocations": "My Plant Locations", - "submitted": "Submitted", - "projectRequired": "Project Required", - "geoJsonError": "Unsupported GeoJSON/KML format", - "atLeastOneSpeciesRequired": "At least one species is required", - "treesRequired": "Tree Count Required", - "count": "Count", - "addSampleTree": "Add Sample Tree", - "uploadFile": "Upload File", - "fileFormatKML": "File (geojson/kml)", - "importData": "Import Data", - "importExplanation": "Here you can import TreeMapper data, that will be marked as \"external\" (not \"off-site\", please use the app for that). For coordinates of planting sites we accept *.kml or geojson, for (optional) sample trees *.csv (template is provided in step 2).", - "downloadExplanation": "Download the following CSV template to import sample tree data in the designated format. Use a simple editor to edit the file. The second and third line are formatting details and an example and must be deleted.", - "importCSV": "Import CSV", - "fileFormatCSV": "File (csv)", - "aliases": "Aliases", - "aliasesValidation": "Please enter aliases", - "speciesValidation": "Please enter a species", - "external": "External", - "date": "Date", - "measurements": "Measurements", - "ignoredColumnsWarning": "The extra columns have been ignored" -} \ No newline at end of file + "Treemapper": { + "trees": "Trees", + "tree": "Tree", + "on": "on", + "partial": "Partial", + "complete": "Complete", + "on-site": "On Site", + "off-site": "Off Site", + "captureMode": "Capture Mode", + "captureStatus": "Capture Status", + "coordinates": "Coordinates", + "guid": "GUID", + "height": "Height", + "width": "Width", + "plantDate": "Plant Date", + "registrationDate": "Registration Date", + "plantProject": "Plant Project", + "species": "Species", + "sampleTrees": "Sample Trees", + "loadMore": "Load More", + "treeMapper": "TreeMapper", + "cm": "cm", + "m": "m", + "plantingLocation": "Planting Location", + "reviewAndSubmit": "Review and Submit", + "sampleTree": "Sample Tree #{{number}}", + "import": "Import", + "editor": "Editor", + "draw": "Draw", + "addAnotherSpecies": "Add Another Species", + "continue": "Continue", + "downloadCSVTemplate": "Download CSV Template", + "treeTag": "Tree Tag", + "diameter": "Diameter", + "latitude": "Latitude", + "longitude": "Longitude", + "addAnotherSampleTree": "Add Another Sample Tree", + "skip": "Skip", + "treeSpecies": "Tree Species", + "plantingDate": "Planting Date", + "summary": "Summary", + "reviewSubmitDescription": "Review the data you just uploaded and submit it to TreeMapper.", + "submittedSuccess": "Submitted Successfully", + "submittedSuccessDescription": "Your trees have been submitted to TreeMapper. You can view them in your plant locations or in the TreeMapper app.", + "myPlantLocations": "My Plant Locations", + "submitted": "Submitted", + "projectRequired": "Project Required", + "geoJsonError": "Unsupported GeoJSON/KML format", + "atLeastOneSpeciesRequired": "At least one species is required", + "treesRequired": "Tree Count Required", + "count": "Count", + "addSampleTree": "Add Sample Tree", + "uploadFile": "Upload File", + "fileFormatKML": "File (geojson/kml)", + "importData": "Import Data", + "importExplanation": "Here you can import TreeMapper data, that will be marked as \"external\" (not \"off-site\", please use the app for that). For coordinates of planting sites we accept *.kml or geojson, for (optional) sample trees *.csv (template is provided in step 2).", + "downloadExplanation": "Download the following CSV template to import sample tree data in the designated format. Use a simple editor to edit the file. The second and third line are formatting details and an example and must be deleted.", + "importCSV": "Import CSV", + "fileFormatCSV": "File (csv)", + "aliases": "Aliases", + "aliasesValidation": "Please enter aliases", + "speciesValidation": "Please enter a species", + "external": "External", + "date": "Date", + "measurements": "Measurements", + "ignoredColumnsWarning": "The extra columns have been ignored" + } +} diff --git a/public/static/locales/en/treemapperAnalytics.json b/public/static/locales/en/treemapperAnalytics.json index 48814dbb9f..afcd2cf194 100644 --- a/public/static/locales/en/treemapperAnalytics.json +++ b/public/static/locales/en/treemapperAnalytics.json @@ -1,60 +1,62 @@ { - "title": "Data Explorer", - "from": "From", - "to": "To", - "clearFilter": "Clear Filter", - "days": "Days", - "months": "Months", - "weeks": "Weeks", - "years": "Years", - "treesPlanted": "Trees Planted", - "speciesPlanted": "Species Planted", - "calenderWeek": "CW", - "project": "Project", - "export": "Export", - "exportData": "Export Data", - "jan": "Jan", - "feb": "Feb", - "mar": "Mar", - "apr": "Apr", - "may": "May", - "jun": "Jun", - "jul": "Jul", - "aug": "Aug", - "sep": "Sep", - "oct": "Oct", - "nov": "Nov", - "dec": "Dec", - "exportColumnHeaders": { - "hid": "Human Readable ID for a plant location", - "plantDate": "Planted Date", - "species": "Name of the species planted", - "treeCount": "", - "geometry": "GeoJson Co-ordinate of the polygon", - "type": "Type of plant location (single, multi)", - "treesAllocated": "", - "treesPlanted": "Total trees in a plant location", - "metadata": "Plant Location Metadata", - "description": "", - "plantProjectId": "Backend ID of the project that the plant location is a part of", - "sampleTreeCount": "Count of sample trees present on the plant location", - "captureStatus": "Capture Status of the plant location.", - "created": "Creation Timestamp" - }, - "readme": "READ ME", - "interventionData": "Intervention Data", - "monitoringPlotsData": "Monitoring Plots Data", - "dataIntervals": "Data Intervals", - "errors": { - "emptyExportData": "Data not available for the specified interval. Please try a different time range or check if the data for that period has been recorded." - }, - "timeFrame": "Time Frame", - "scientificName": "Scientific name", - "type": "Type", - "interventions": "Interventions", - "monitoringPlots": "Monitoring Plots (Coming Soon...)", - "trillion": "t", - "billion": "b", - "million": "m", - "thousand": "k" -} \ No newline at end of file + "TreemapperAnalytics": { + "title": "Data Explorer", + "from": "From", + "to": "To", + "clearFilter": "Clear Filter", + "days": "Days", + "months": "Months", + "weeks": "Weeks", + "years": "Years", + "treesPlanted": "Trees Planted", + "speciesPlanted": "Species Planted", + "calenderWeek": "CW", + "project": "Project", + "export": "Export", + "exportData": "Export Data", + "jan": "Jan", + "feb": "Feb", + "mar": "Mar", + "apr": "Apr", + "may": "May", + "jun": "Jun", + "jul": "Jul", + "aug": "Aug", + "sep": "Sep", + "oct": "Oct", + "nov": "Nov", + "dec": "Dec", + "exportColumnHeaders": { + "hid": "Human Readable ID for a plant location", + "plantDate": "Planted Date", + "species": "Name of the species planted", + "treeCount": "", + "geometry": "GeoJson Co-ordinate of the polygon", + "type": "Type of plant location (single, multi)", + "treesAllocated": "", + "treesPlanted": "Total trees in a plant location", + "metadata": "Plant Location Metadata", + "description": "", + "plantProjectId": "Backend ID of the project that the plant location is a part of", + "sampleTreeCount": "Count of sample trees present on the plant location", + "captureStatus": "Capture Status of the plant location.", + "created": "Creation Timestamp" + }, + "readme": "READ ME", + "interventionData": "Intervention Data", + "monitoringPlotsData": "Monitoring Plots Data", + "dataIntervals": "Data Intervals", + "errors": { + "emptyExportData": "Data not available for the specified interval. Please try a different time range or check if the data for that period has been recorded." + }, + "timeFrame": "Time Frame", + "scientificName": "Scientific name", + "type": "Type", + "interventions": "Interventions", + "monitoringPlots": "Monitoring Plots (Coming Soon...)", + "trillion": "t", + "billion": "b", + "million": "m", + "thousand": "k" + } +} From 4e79720b03bee7e5f05803083ea790f1e615cce3 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 21 Feb 2024 17:23:39 +0530 Subject: [PATCH 11/70] feat: adapts interpolation text format in translation files for next-intl --- public/static/locales/de/bulkCodes.json | 6 ++--- public/static/locales/de/common.json | 10 +++---- public/static/locales/de/donate.json | 28 ++++++++++---------- public/static/locales/de/editProfile.json | 8 +++--- public/static/locales/de/managePayouts.json | 12 ++++----- public/static/locales/de/manageProjects.json | 2 +- public/static/locales/de/maps.json | 2 +- public/static/locales/de/me.json | 14 +++++----- public/static/locales/de/planet.json | 2 +- public/static/locales/de/planetcash.json | 4 +-- public/static/locales/de/profile.json | 28 ++++++++++---------- public/static/locales/de/redeem.json | 4 +-- public/static/locales/de/treemapper.json | 2 +- public/static/locales/en/bulkCodes.json | 6 ++--- public/static/locales/en/common.json | 10 +++---- public/static/locales/en/donate.json | 28 ++++++++++---------- public/static/locales/en/editProfile.json | 8 +++--- public/static/locales/en/managePayouts.json | 12 ++++----- public/static/locales/en/manageProjects.json | 2 +- public/static/locales/en/maps.json | 2 +- public/static/locales/en/me.json | 14 +++++----- public/static/locales/en/planet.json | 2 +- public/static/locales/en/planetcash.json | 4 +-- public/static/locales/en/profile.json | 28 ++++++++++---------- public/static/locales/en/redeem.json | 4 +-- public/static/locales/en/treemapper.json | 2 +- 26 files changed, 122 insertions(+), 122 deletions(-) diff --git a/public/static/locales/de/bulkCodes.json b/public/static/locales/de/bulkCodes.json index 1c3f0bbb19..fc87935076 100644 --- a/public/static/locales/de/bulkCodes.json +++ b/public/static/locales/de/bulkCodes.json @@ -72,7 +72,7 @@ "unitsNotProvided": "Einheiten fehlen oder sind ungültig bei einigen Empfängern.", "notifyNotPossible": "E-Mail und Name fehlen bei einigen Empfängern, die benachrichtigt werden sollen.", "instructionRowError": "In der 1. Zeile ist ein Fehler aufgetreten. Bitte prüfe, ob du die Anweisungen gelöscht hast oder ob zusätzliche Daten vorhanden sind.", - "invalidEmails": "recipient_email enthält falsche/ungültige E-Mails in den folgenden Zeilen: {{rowList}}. Bitte entferne ungültige Emails oder füge gültige Emails hinzu.", + "invalidEmails": "recipient_email enthält falsche/ungültige E-Mails in den folgenden Zeilen: {rowList}. Bitte entferne ungültige Emails oder füge gültige Emails hinzu.", "generalError": "Es ist ein Fehler aufgetreten. Bitte versuche es nach einer Weile erneut." }, "errorAddRecipient": { @@ -100,9 +100,9 @@ }, "donationSuccess": "Deine Spende war erfolgreich. Du wirst in Kürze zur Anzeige der Spendendetails weitergeleitet...", "donationError": { - "planet_cash_insufficient_credit": "Verfügbares Guthaben = {{availableBalance}}. Bitte lade Guthaben auf dein PlanetCash-Konto auf, um diese Spende zu tätigen.", + "planet_cash_insufficient_credit": "Verfügbares Guthaben = {availableBalance}. Bitte lade Guthaben auf dein PlanetCash-Konto auf, um diese Spende zu tätigen.", "default": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es nach einer Weile erneut.", - "planet_cash_payment_failure": "Die Transaktion ist fehlgeschlagen. {{reason}}", + "planet_cash_payment_failure": "Die Transaktion ist fehlgeschlagen. {reason}", "planet_cash_invalid_project": "Du kannst für das ausgewählte Projekt nicht spenden." }, "titleAddRecipientButton": "Empfänger zur Tabelle hinzufügen", diff --git a/public/static/locales/de/common.json b/public/static/locales/de/common.json index a30130c8f4..0402837108 100644 --- a/public/static/locales/de/common.json +++ b/public/static/locales/de/common.json @@ -1,11 +1,11 @@ { "Common": { - "tree": "{count, plural, =0 {Bäume} =1 {Baum} other {Bäume}}", + "tree": "{count, plural, =0 {Bäume} =1 {Baum} other {Bäume}", "tree_one": "Baum", "tree_other": "Bäume", "m2": "m²", "by": "Von {tpoName}", - "to_project_by_tpo": "An {{projectName}} von {{tpoName}}", + "to_project_by_tpo": "An {projectName} von {tpoName}", "for": "für", "trees": "Bäume", "planted": "gepflanzt", @@ -69,10 +69,10 @@ "aboutUs": "Über uns", "alternativelyEditProfile": "Alternativ kannst du dein Profil als privat markieren, indem du Profil bearbeiten aufrufst.", "deleteAccountConsent": "Indem ich auf \"Löschen\" klicke, fordere ich Plant-for-the-Planet auf, alle mit meinem Plant-for-the-Planet-Konto verbundenen Daten zu löschen. Die Spendendaten können bis zu acht Jahre aufbewahrt werden. Bäume, die ich registriert habe, werden nicht entfernt, werden aber anonymisiert und können nicht erneut beansprucht werden.", - "deleteIrreversible": "Ich verstehe, dass die Kontolöschung von {{email}} irreversibel ist.", + "deleteIrreversible": "Ich verstehe, dass die Kontolöschung von {email} irreversibel ist.", "goBack": "Zurückgehen", - "deleteAccountMessage": "Um mit dem Löschen fortzufahren, gib bitte `{{delete}}` ein", - "deleteAccountLabel": "Tippe: {{delete}}", + "deleteAccountMessage": "Um mit dem Löschen fortzufahren, gib bitte `{delete}` ein", + "deleteAccountLabel": "Tippe: {delete}", "edit": "Bearbeiten", "howDoesThisWork": "Wie funktioniert das?", "copiedToClipboard": "In die Zwischenablage kopiert!", diff --git a/public/static/locales/de/donate.json b/public/static/locales/de/donate.json index 1241a3b688..23dc9dc851 100644 --- a/public/static/locales/de/donate.json +++ b/public/static/locales/de/donate.json @@ -1,11 +1,11 @@ { "Donate": { - "fortreeCountTrees": "für {{treeCount}} Baum", - "fortreeCountTrees_plural": "für {{treeCount}} Bäume", - "yourTreesPlantedByOnLocation": "Dein {{treeCount}} Baum wird von {{projectName}} in {{location}} gepflanzt.", - "yourTreesPlantedByOnLocation_plural": "Deine {{treeCount}} Bäume werden von {{projectName}} in {{location}} gepflanzt.", - "myTreesPlantedByOnLocation": "Mein {{treeCount}} Baum wird in {{location}} gepflanzt.", - "myTreesPlantedByOnLocation_plural": "Meine {{treeCount}} Bäume werden in {{location}} gepflanzt.", + "fortreeCountTrees": "für {treeCount} Baum", + "fortreeCountTrees_plural": "für {treeCount} Bäume", + "yourTreesPlantedByOnLocation": "Dein {treeCount} Baum wird von {projectName} in {location} gepflanzt.", + "yourTreesPlantedByOnLocation_plural": "Deine {treeCount} Bäume werden von {projectName} in {location} gepflanzt.", + "myTreesPlantedByOnLocation": "Mein {treeCount} Baum wird in {location} gepflanzt.", + "myTreesPlantedByOnLocation_plural": "Meine {treeCount} Bäume werden in {location} gepflanzt.", "projects": "Projekte", "topProjects": "Top Projekte", "allCountProjects": "Alle {projectCount} Projekte", @@ -19,7 +19,7 @@ "taxDeductionNotYetAvailable": "Keine Spendenbescheinigung möglich für", "taxDeductionNotAvailableForProject": "Spendenbescheinigung für dieses Projekt ist noch nicht möglich", "youWillReceiveTaxDeduction": "Du erhältst eine Spendenbescheinigung für ", - "toProjectByOrganization": "An {{projectName}} von {{organizationName}}", + "toProjectByOrganization": "An {projectName} von {organizationName}", "firstName": "Vorname", "lastName": "Nachname", "email": "E-Mail", @@ -55,11 +55,11 @@ "selectCurrency": "Dein Land auswählen", "treeDonationWithPFP": "Baumspende mit Plant-for-the-Planet", "unavailable": "nicht verfügbar", - "donationSuccessfulWith": "Deine {{totalAmount}} {{currency}} Spende wurde erfolgreich mit {{paymentTypeUsed}} bezahlt.", - "donationSuccessful": "Deine {{totalAmount}} {{currency}} Spende war erfolgreich.", - "giftSentMessage": "Wir haben eine E-Mail zum Geschenk an {{recipientName}} geschickt.", + "donationSuccessfulWith": "Deine {totalAmount} {currency} Spende wurde erfolgreich mit {paymentTypeUsed} bezahlt.", + "donationSuccessful": "Deine {totalAmount} {currency} Spende war erfolgreich.", + "giftSentMessage": "Wir haben eine E-Mail zum Geschenk an {recipientName} geschickt.", "contributionMessage": "Vielleicht wirst du sie eines Tages besuchen? Bis dahin könntest du deinen Freunden von deinen Bäumen erzählen, falls sie auch ein paar eigene Bäume spenden möchten?", - "plantTreesAtURL": "Pflanze mit! {{url}}", + "plantTreesAtURL": "Pflanze mit! {url}", "copiedToClipboard": "Text in die Zwischenablage kopiert!", "noProjectsFound": "Keine Projekte gefunden", "inTimeOfTaxReturns": "rechtzeitig für deine Steuererklärung.", @@ -67,10 +67,10 @@ "giftToName": "Geschenk an", "thisDonationSupports": "Diese Spende unterstützt", "plantTreesWith": "Bäume pflanzen mit", - "textToShare": "Schließe dich mit {{name}} und Tausenden anderen zusammen, um eine Billion Bäume zu pflanzen, um die Klimakrise zu bewältigen #StopTalkingStartPlanting #TrillionTrees @trilliontrees", + "textToShare": "Schließe dich mit {name} und Tausenden anderen zusammen, um eine Billion Bäume zu pflanzen, um die Klimakrise zu bewältigen #StopTalkingStartPlanting #TrillionTrees @trilliontrees", "thankyouHeaderText": "Wir sind auf dem Weg zu einer \n

Billionen Bäume

", "shareTextTitle": "Stop Talking. Start Plant", - "textToShareLinkedin": "Schließe dich mit {{name}} und Tausenden anderen zusammen, um eine Billion Bäume zu pflanzen, um die Klimakrise zu bewältigen", + "textToShareLinkedin": "Schließe dich mit {name} und Tausenden anderen zusammen, um eine Billion Bäume zu pflanzen, um die Klimakrise zu bewältigen", "textToShareForMe": "Pflanzt mit mir und Tausenden von anderen 1.000 Milliarden Bäume, um die Klimakrise zu bekämpfen", "donationTokenInvalid": "Das bereitgestellte Spenden-Token ist ungültig.", "giftTo": "Geschenk an", @@ -82,7 +82,7 @@ "somethingWentWrong": "Etwas ist schief gelaufen, bitte versuche es bald noch einmal!", "underMaintenance": "Die App wird gerade gewartet, bitte prüfe status.plant-for-the-planet.org für Details", "waitingConfirmation": "Wir warten derzeit auf eine Bestätigung von deiner Bank und werden dir in Kürze eine E-Mail senden. Du kannst diese Seite auch gerne schließen.", - "yourDonationRef": "Deine Spendenreferenznummer lautet {{donationID}}", + "yourDonationRef": "Deine Spendenreferenznummer lautet {donationID}", "payWithGiroPay": "Bezahlen mit GiroPay", "payWithSofort": "Bezahlen mit SOFORT", "donationFailed": "Spende fehlgeschlagen", diff --git a/public/static/locales/de/editProfile.json b/public/static/locales/de/editProfile.json index f3fad99da1..81f9e119ee 100644 --- a/public/static/locales/de/editProfile.json +++ b/public/static/locales/de/editProfile.json @@ -1,8 +1,8 @@ { "EditProfile": { - "loginTitle": "{{log}} - Anmeldung", + "loginTitle": "{log} - Anmeldung", "signUpText": "Registrierung vervollständigen", - "profileTypes": "{{item.title}}", + "profileTypes": "{item.title}", "createAccount": "Konto erstellen", "individual": "Person", "tpo": "Renaturierungsorganisation", @@ -28,7 +28,7 @@ "profileType": "Ich bin ein", "firstName": "Vorname", "lastName": "Nachname", - "name": "Name der {{type}}", + "name": "Name der {type}", "email": "Email", "address": "Adresse", "city": "Stadt", @@ -40,7 +40,7 @@ "subscribe": "Nachrichten per E-Mail abonnieren" }, "validationErrors": { - "maxChars": "Sollte {{max}} oder weniger Buchstaben haben", + "maxChars": "Sollte {max} oder weniger Buchstaben haben", "firstNameRequired": "Vorname ist ein Pflichtfeld", "firstNameInvalid": "Vorname ist ungültig. Er kann nicht mit einem Sonderzeichen beginnen, und nur diese Sonderzeichen sind erlaubt: Leerzeichen ' . -", "lastNameRequired": "Nachname ist ein Pflichtfeld", diff --git a/public/static/locales/de/managePayouts.json b/public/static/locales/de/managePayouts.json index 4cee86ffd2..84d6ade751 100644 --- a/public/static/locales/de/managePayouts.json +++ b/public/static/locales/de/managePayouts.json @@ -35,7 +35,7 @@ "errors": { "scheduleFrequencyRequired": "Zahlungsfrequenz ist erforderlich", "payoutMinAmountRequired": "Mindestauszahlungsbetrag ist erforderlich", - "payoutMinAmountTooLow": "Der Mindestauszahlungsbetrag sollte mindestens {{currency}} {{minAmount}} betragen", + "payoutMinAmountTooLow": "Der Mindestauszahlungsbetrag sollte mindestens {currency} {minAmount} betragen", "bankNameRequired": "Der Name der Bank ist erforderlich.", "bankAddressRequired": "Die Bankadresse ist erforderlich.", "holderNameRequired": "Der Name des Inhabers ist erforderlich.", @@ -45,7 +45,7 @@ "noAccountFound": "Es wurde kein Konto abgefragt" }, "placeholders": { - "payoutMinAmount": "Sollte mindestens {{currency}} {{minAmount}} sein", + "payoutMinAmount": "Sollte mindestens {currency} {minAmount} sein", "bankName": "z.B. Century Bank LLC", "bankAddress": "z. B. 1 West St, Hamington Way, MA, 10311, USA", "holderName": "z.B. John Doe", @@ -58,19 +58,19 @@ }, "saveButton": "Speichern", "accountError": { - "min_amount_range": "Der Mindestauszahlungsbetrag muss mindestens {{currency}} {{min}} betragen.", + "min_amount_range": "Der Mindestauszahlungsbetrag muss mindestens {currency} {min} betragen.", "min_amount_forbidden": "Du kannst für das Standardkonto keinen Mindestbetrag für die Auszahlung festlegen.", - "account_duplicate": "Es gibt bereits ein {{currency}}-Konto.", + "account_duplicate": "Es gibt bereits ein {currency}-Konto.", "default": "Beim Erstellen des Kontos ist ein Fehler aufgetreten. Bitte versuche es nach einer Weile erneut." }, "accountCreationSuccess": "Deine Kontodaten wurden erfolgreich gespeichert.", "accountUpdationSuccess": "Dein Kontodaten wurden erfolgreich aktualisiert.", "scheduleSaveSuccess": "Dein Auszahlungsplan wurde erfolgreich gespeichert.", "editAccountButton": "Konto bearbeiten", - "accountTitleText": "Überweisung in {{currency}}", + "accountTitleText": "Überweisung in {currency}", "addBankDetailsButton": "Bankverbindung hinzufügen", "noBankAccountText": "Du hast noch keine Bankverbindung angegeben.", "editBankAccountTitle": "Konto bearbeiten", - "minPayoutText": "Min. Auszahlung: {{amount}}" + "minPayoutText": "Min. Auszahlung: {amount}" } } diff --git a/public/static/locales/de/manageProjects.json b/public/static/locales/de/manageProjects.json index c315b2e0b1..f6d250f522 100644 --- a/public/static/locales/de/manageProjects.json +++ b/public/static/locales/de/manageProjects.json @@ -192,7 +192,7 @@ "mainChallengeInfo": "Die größte Herausforderung bei diesem Projekt.", "motivationInfo": "Die Motivation für den Schutz dieses speziellen Ökosystems.", "hectar": "hektar", - "validation": "{{fieldName}} ist ungültig", + "validation": "{fieldName} ist ungültig", "date": "Datum", "plantingDensityValidation": "Bitte gibt die Dichte der Pflanzung ein", "maxPlantingDensityValidation": "bitte maximale Bepflanzungsdichte eingeben", diff --git a/public/static/locales/de/maps.json b/public/static/locales/de/maps.json index dc9139980f..14489c5c1b 100644 --- a/public/static/locales/de/maps.json +++ b/public/static/locales/de/maps.json @@ -38,7 +38,7 @@ "plantationDensityFormula": "Pflanzdichte = Anzahl der Bäume / Bepflanzungsfläche", "unknown": "Unbekannt", "showWholeArea": "Gesamten Fläche anzeigen", - "daysAgo": "vor {{days}} Tagen", + "daysAgo": "vor {days} Tagen", "today": "Heute", "yesterday": "Gestern", "clickForDetails": "Klicke für Details", diff --git a/public/static/locales/de/me.json b/public/static/locales/de/me.json index c311ebf3ae..f04a55adc9 100644 --- a/public/static/locales/de/me.json +++ b/public/static/locales/de/me.json @@ -29,7 +29,7 @@ "linkedIn": "LinkedIn", "registerTreesDescription": "Registriere Bäume, die Du z. B. im Garten selbst gepflanzt hast.", "myForest": "Mein Wald", - "giftToGiftee": "Geschenk an {{gifteeName}}", + "giftToGiftee": "Geschenk an {gifteeName}", "settingManageProject": "Projekte verwalten", "deleteAccount": "Konto löschen", "userTree": "Bäume registrieren", @@ -53,7 +53,7 @@ "dragHere": "oder hierher ziehen", "contribNotFound": "Beitrag nicht gefunden", "errorOccured": "Aufgetretener Fehler", - "contribSuccess": "Erfolgreich hinzugefügt {{treeCount}} {{treeSpecies}} 🌳 vom {{plantDate}}", + "contribSuccess": "Erfolgreich hinzugefügt {treeCount} {treeSpecies} 🌳 vom {plantDate}", "moreThanOne": "mindestens 1 Baum erforderlich", "registered": "Registriert", "receivedTrees": "Empfangene Bäume", @@ -86,7 +86,7 @@ "project": "Projektname", "planetCashPayment": "PlanetCash Zahlung", "method": "Zahlungsmethode", - "unitCost": "Kosten pro {{unitType}}", + "unitCost": "Kosten pro {unitType}", "treeCount": "Baumanzahl", "lastUpdate": "Letzte Aktualisierung", "donorCertificate": "Spenderzertifikat", @@ -110,7 +110,7 @@ "pausedUntil": "Pausiert bis", "pauseUntilDate": "Pausieren bis zum gewählten Datum", "reactivateDonationConfirmation": "Spende wieder aktivieren", - "reactivateDonationDescription": "Deine Spende wird wieder aktiviert und zum Datum {{currentPeriodEnds}} weitergeführt.", + "reactivateDonationDescription": "Deine Spende wird wieder aktiviert und zum Datum {currentPeriodEnds} weitergeführt.", "cancelDonationConfirmation": "Spende beenden", "cancelDonationDescription": "Einmal beendet kann die Spende nicht weitergeführt werden.", "cancelDonationPaypalDescription": "Diese Spende wird sofort storniert und kann nicht wieder aufgenommen werden.", @@ -135,7 +135,7 @@ "referred": "Weitergeleitet", "in-dispute": "Strittig", "dispute-lost": "Streitfall verloren", - "nameForest": "Wald von {{name}}", + "nameForest": "Wald von {name}", "taxReceipt": "Spendenbescheinigung", "history": "Historie/Spendenbescheinigung", "recurrency": "Dauerspenden", @@ -259,7 +259,7 @@ "supportPin": "Support-PIN", "alphaNumeric": "Eingabe eines 4-stelligen alphanumerischen Codes", "switch": "Identifizieren als", - "targetUser": "Du identifizierst dich derzeit als {{impersonatedEmail}}", + "targetUser": "Du identifizierst dich derzeit als {impersonatedEmail}", "exitImpersonation": "Fremd-Indentifizierung entfernen", "enterTheEmail": "Gib die E-Mail des Zielbenutzers ein", "enterSupportPin": "Gib den Support-PIN des Zielbenutzers ein", @@ -274,6 +274,6 @@ "membershipCtaButtonText": "Jetzt mitmachen", "membershipCtaCopy": "Unterstütze uns und <2>WERDE MITGLIED", "shareUrl": "Teile URL", - "treesOfTrees": "{{count1}} von {{count2}}" + "treesOfTrees": "{count1} von {count2}" } } diff --git a/public/static/locales/de/planet.json b/public/static/locales/de/planet.json index 746c32524c..e954942e7f 100644 --- a/public/static/locales/de/planet.json +++ b/public/static/locales/de/planet.json @@ -1,7 +1,7 @@ { "Planet": { "treesDonated": "Gespendete Bäume seit dem Start der Plattform (2019)", - "plantedByTPO": "Gepflanzt von den {{projects}}+ teilnehmenden Projekten", + "plantedByTPO": "Gepflanzt von den {projects}+ teilnehmenden Projekten", "plantedGlobally": "An uns gemeldete Bäume seit 2006", "forestLoss": "Netto-Waldverlust pro Jahr", "estimateOf": "Schätzung des jährlichen Baumverlusts nach", diff --git a/public/static/locales/de/planetcash.json b/public/static/locales/de/planetcash.json index 467a6da2fd..0da8338a82 100644 --- a/public/static/locales/de/planetcash.json +++ b/public/static/locales/de/planetcash.json @@ -8,7 +8,7 @@ "tabAccounts": "Konten", "tabCreateAccount": "Konto erstellen", "tabTransactions": "Transaktionen", - "accountTitleText": "{{currency}} PlanetCash Konto ({{country}})", + "accountTitleText": "{currency} PlanetCash Konto ({country})", "createAccountTitleText": "Anmeldung für PlanetCash", "addBalanceButton": "Guthaben hinzufügen", "labelAccountHolder": "Kontoinhaber", @@ -27,7 +27,7 @@ "planetCashTerms3": "Spenden auf das PlanetCash-Konto aus persönlichen Gründen sind in dem Land, das du in diesem Schritt auswählst, in der Regel steuerlich absetzbar. Die kommerzielle Nutzung von PlanetCash ist möglicherweise nicht steuerlich absetzbar. Wenn du Fragen hast, wende dich bitte an support@plant-for-the-planet.org oder an deinen Steuerberater.", "accountError": { "active_account_exists": "Es existiert bereits ein aktives Konto. Deaktiviere dieses Konto, bevor du ein anderes Konto aktivierst.", - "duplicate_account": "Du hast bereits ein Konto für {{country}} erstellt", + "duplicate_account": "Du hast bereits ein Konto für {country} erstellt", "default": "Beim Erstellen des Kontos ist ein Fehler aufgetreten. Bitte versuche es nach einer Weile erneut." } } diff --git a/public/static/locales/de/profile.json b/public/static/locales/de/profile.json index 4c1b915f2f..eef2c755b3 100644 --- a/public/static/locales/de/profile.json +++ b/public/static/locales/de/profile.json @@ -1,8 +1,8 @@ { "Profile": { "myProfile": { - "memberSince": "Mitglied seit {{date}}", - "userDescription": "{{bio}}" + "memberSince": "Mitglied seit {date}", + "userDescription": "{bio}" }, "feature": { "redeem": "Einlösen", @@ -14,8 +14,8 @@ "link": "Link" }, "myForestMap": { - "plantedTree_one": "{{count, number}} Baum", - "plantedTree_other": "{{count, number}} Bäume", + "plantedTree_one": "{count, number} Baum", + "plantedTree_other": "{count, number} Bäume", "treesPlanted": "Gepflanzte Bäume", "restored": "Wiederhergestellt", "registered": "Registriert", @@ -23,13 +23,13 @@ "projects": "Projekte", "countries": "Länder", "donations": "Spenden", - "area": "{{areaConserved}} m²", + "area": "{areaConserved} m²", "zoomIn": "Für weitere Details heranzoomen", - "totalDonation_one": "{{count, number}} Spende ", - "totalDonation_other": "{{count, number}} Spenden ", - "totalProject_one": "für {{count, number}} Projekt", - "totalProject_other": "für {{count, number}} Projekte", - "tpoName": "By {{tpo}}" + "totalDonation_one": "{count, number} Spende ", + "totalDonation_other": "{count, number} Spenden ", + "totalProject_one": "für {count, number} Projekt", + "totalProject_other": "für {count, number} Projekte", + "tpoName": "By {tpo}" }, "myTreeCounter": { "treesPlanted": "Bäume gepflanzt", @@ -37,16 +37,16 @@ }, "myContributions": { "treesPlantedAndAreaRestored": "Bäume gepflanzt & Gebiete wiederhergestellt", - "treeRegistered_one": "{{count, number}} Baum registriert", - "treeRegistered_other": "{{count, number}} Bäume registriert", - "receivedFrom": "Empfangen von {{name}}", + "treeRegistered_one": "{count, number} Baum registriert", + "treeRegistered_other": "{count, number} Bäume registriert", + "receivedFrom": "Empfangen von {name}", "loadMoreContribution": "Lade weitere Beiträge", "loadingContribution": "Lade Beiträge....", "donate": "Spenden", "donateAgain": "Erneut spenden", "conservedSmall": "geschützt", "restoredSmall": "wiederhergestellt", - "areaType": "{{areaConserved}} m² {{type}}", + "areaType": "{areaConserved} m² {type}", "areaConserved": "Geschütze Fläche" } } diff --git a/public/static/locales/de/redeem.json b/public/static/locales/de/redeem.json index f412b8f5be..dd838aa6c7 100644 --- a/public/static/locales/de/redeem.json +++ b/public/static/locales/de/redeem.json @@ -1,7 +1,7 @@ { "Redeem": { - "myPlantedTreesByOrg": "Mein {{formattedNumber}} Baum wird von {{tpoName}} gepflanzt", - "myPlantedTreesByOrg_plural": "Meine {{formattedNumber}} Bäume werden von {{tpoName}} gepflanzt", + "myPlantedTreesByOrg": "Mein {formattedNumber} Baum wird von {tpoName} gepflanzt", + "myPlantedTreesByOrg_plural": "Meine {formattedNumber} Bäume werden von {tpoName} gepflanzt", "congratulations": "Herzlichen Glückwunsch!", "addToMyTrees": "Zu meinen Bäumen hinzufügen", "validateCode": "Code prüfen", diff --git a/public/static/locales/de/treemapper.json b/public/static/locales/de/treemapper.json index e211789330..558513f35a 100644 --- a/public/static/locales/de/treemapper.json +++ b/public/static/locales/de/treemapper.json @@ -24,7 +24,7 @@ "m": "m", "plantingLocation": "Standort der Pflanzung", "reviewAndSubmit": "Überprüfen und Einreichen", - "sampleTree": "Musterbaum #{{number}}", + "sampleTree": "Musterbaum #{number}", "import": "Importieren", "editor": "Editor", "draw": "Zeichnen", diff --git a/public/static/locales/en/bulkCodes.json b/public/static/locales/en/bulkCodes.json index 0b385e0ffb..3a51a85ba8 100644 --- a/public/static/locales/en/bulkCodes.json +++ b/public/static/locales/en/bulkCodes.json @@ -72,7 +72,7 @@ "unitsNotProvided": "Units are missing/invalid for some recipients.", "notifyNotPossible": "Email and name are missing for some recipients that are to be notified.", "instructionRowError": "An error occurred on the 1st row. Please check if you have deleted the instructions, or if there is additional data.", - "invalidEmails": "recipient_email contains dummy/invalid emails on the following rows: {{rowList}}. Please remove invalid emails or add valid emails.", + "invalidEmails": "recipient_email contains dummy/invalid emails on the following rows: {rowList}. Please remove invalid emails or add valid emails.", "generalError": "Something went wrong. Please try after a while." }, "errorAddRecipient": { @@ -100,9 +100,9 @@ }, "donationSuccess": "Your donation was successful. Redirecting you to view donation details shortly...", "donationError": { - "planet_cash_insufficient_credit": "Available credit = {{availableBalance}}. Please load balance in your PlanetCash account to make this donation.", + "planet_cash_insufficient_credit": "Available credit = {availableBalance}. Please load balance in your PlanetCash account to make this donation.", "default": "Something went wrong. Please try after a while.", - "planet_cash_payment_failure": "The transaction failed. {{reason}}", + "planet_cash_payment_failure": "The transaction failed. {reason}", "planet_cash_invalid_project": "You cannot make a donation to the selected project." }, "titleAddRecipientButton": "Add recipient to table", diff --git a/public/static/locales/en/common.json b/public/static/locales/en/common.json index f9ee54d684..27e8b861fb 100644 --- a/public/static/locales/en/common.json +++ b/public/static/locales/en/common.json @@ -1,11 +1,11 @@ { "Common": { - "tree": "{count, plural, =0 {Trees} =1 {Tree} other {Trees}}", + "tree": "{count, plural, =0 {Trees} =1 {Tree} other {Trees}", "tree_one": "Tree", "tree_other": "Trees", "m2": "m²", "by": "By {tpoName}", - "to_project_by_tpo": "To {{projectName}} by {{tpoName}}", + "to_project_by_tpo": "To {projectName} by {tpoName}", "for": "for", "trees": "Trees", "planted": "planted", @@ -69,10 +69,10 @@ "aboutUs": "About Us", "alternativelyEditProfile": "Alternatively you can mark your profile private by visiting Edit Profile.", "deleteAccountConsent": "By clicking \"Delete\", I am requesting Plant-for-the-Planet to delete all data associated with my Plant-for-the-Planet account. Donation data may be kept for up to eight years. Trees I have registered will not be removed, however, will be anonymized and can't be claimed again.", - "deleteIrreversible": "I also understand that account deletion of {{email}} is irreversible.", + "deleteIrreversible": "I also understand that account deletion of {email} is irreversible.", "goBack": "Go Back", - "deleteAccountMessage": "To continue with deletion, please type `{{delete}}`", - "deleteAccountLabel": "Type: {{delete}}", + "deleteAccountMessage": "To continue with deletion, please type `{delete}`", + "deleteAccountLabel": "Type: {delete}", "edit": "Edit", "howDoesThisWork": "How does this work?", "copiedToClipboard": "Copied to clipboard!", diff --git a/public/static/locales/en/donate.json b/public/static/locales/en/donate.json index c102fd28ca..a93b82128a 100644 --- a/public/static/locales/en/donate.json +++ b/public/static/locales/en/donate.json @@ -1,11 +1,11 @@ { "Donate": { - "fortreeCountTrees": "for {{treeCount}} Tree", - "fortreeCountTrees_plural": "for {{treeCount}} Trees", - "yourTreesPlantedByOnLocation": "Your {{treeCount}} tree will be planted by {{projectName}} in {{location}}.", - "yourTreesPlantedByOnLocation_plural": "Your {{treeCount}} trees will be planted by {{projectName}} in {{location}}.", - "myTreesPlantedByOnLocation": "My {{treeCount}} tree is being planted in {{location}}.", - "myTreesPlantedByOnLocation_plural": "My {{treeCount}} trees are being planted in {{location}}.", + "fortreeCountTrees": "for {treeCount} Tree", + "fortreeCountTrees_plural": "for {treeCount} Trees", + "yourTreesPlantedByOnLocation": "Your {treeCount} tree will be planted by {projectName} in {location}.", + "yourTreesPlantedByOnLocation_plural": "Your {treeCount} trees will be planted by {projectName} in {location}.", + "myTreesPlantedByOnLocation": "My {treeCount} tree is being planted in {location}.", + "myTreesPlantedByOnLocation_plural": "My {treeCount} trees are being planted in {location}.", "projects": "Projects", "topProjects": "Top Projects", "allCountProjects": "All {projectCount} Projects", @@ -19,7 +19,7 @@ "taxDeductionNotYetAvailable": "Tax deduction is not yet available for ", "taxDeductionNotAvailableForProject": "Tax deduction is not yet available for this project", "youWillReceiveTaxDeduction": "You will receive a tax deduction receipt for ", - "toProjectByOrganization": "To {{projectName}} by {{organizationName}}", + "toProjectByOrganization": "To {projectName} by {organizationName}", "firstName": "First Name", "lastName": "Last Name", "email": "Email", @@ -55,11 +55,11 @@ "selectCurrency": "Select your Currency", "treeDonationWithPFP": "Tree donation with Plant-for-the-Planet", "unavailable": "unavailable", - "donationSuccessfulWith": "Your {{currency}} {{totalAmount}} donation was successfully paid with {{paymentTypeUsed}}.", - "donationSuccessful": "Your {{currency}} {{totalAmount}} donation was successful.", - "giftSentMessage": "We've sent an email to {{recipientName}} about the gift.", + "donationSuccessfulWith": "Your {currency} {totalAmount} donation was successfully paid with {paymentTypeUsed}.", + "donationSuccessful": "Your {currency} {totalAmount} donation was successful.", + "giftSentMessage": "We've sent an email to {recipientName} about the gift.", "contributionMessage": "Maybe you'll visit them some day? In the mean time, maybe hook up your friends with some trees of their own by telling them about yours?", - "plantTreesAtURL": "Plant trees at {{url}}", + "plantTreesAtURL": "Plant trees at {url}", "copiedToClipboard": "Text Copied to Clipboard!", "noProjectsFound": "No projects found", "inTimeOfTaxReturns": "in time for tax returns.", @@ -67,10 +67,10 @@ "giftToName": "Gift to", "thisDonationSupports": "This donation supports", "plantTreesWith": "Plant trees with", - "textToShare": "Join {{name}} and thousand of others to plant a trillion trees to tackle the climate crisis #StopTalkingStartPlanting #TrillionTrees @trilliontrees", + "textToShare": "Join {name} and thousand of others to plant a trillion trees to tackle the climate crisis #StopTalkingStartPlanting #TrillionTrees @trilliontrees", "thankyouHeaderText": "We're on the road to a \n

Trillion Trees

", "shareTextTitle": "Stop Talking. Start Plant", - "textToShareLinkedin": "Join {{name}} and thousand of others to plant a trillion trees to tackle the climate crisis", + "textToShareLinkedin": "Join {name} and thousand of others to plant a trillion trees to tackle the climate crisis", "textToShareForMe": "Join me and thousand of others to plant a trillion trees to tackle the climate crisis", "donationTokenInvalid": "The provided donation token is invalid.", "giftTo": "Gift to", @@ -82,7 +82,7 @@ "somethingWentWrong": "Something went wrong please try again soon!", "underMaintenance": "App is undergoing maintenance, please check status.plant-for-the-planet.org for details", "waitingConfirmation": "We are currently waiting a confirmation from your bank and will send you an email shortly. Please feel free to close this page.", - "yourDonationRef": "Your donation ref is {{donationID}}", + "yourDonationRef": "Your donation ref is {donationID}", "payWithGiroPay": "Donate with GiroPay", "payWithSofort": "Donate with SOFORT", "donationFailed": "Donation Failed", diff --git a/public/static/locales/en/editProfile.json b/public/static/locales/en/editProfile.json index 800cd77d0c..33a2f93843 100644 --- a/public/static/locales/en/editProfile.json +++ b/public/static/locales/en/editProfile.json @@ -1,8 +1,8 @@ { "EditProfile": { - "loginTitle": "{{log}} - Login", + "loginTitle": "{log} - Login", "signUpText": "Complete Signup", - "profileTypes": "{{item.title}}", + "profileTypes": "{item.title}", "createAccount": "Create Account", "individual": "Person", "tpo": "Restoration Organization", @@ -28,7 +28,7 @@ "profileType": "I am a", "firstName": "First Name", "lastName": "Last Name", - "name": "Name of {{type}}", + "name": "Name of {type}", "email": "Email", "address": "Address", "city": "City", @@ -40,7 +40,7 @@ "subscribe": "Subscribe to news via email" }, "validationErrors": { - "maxChars": "Should be {{max}} characters or less", + "maxChars": "Should be {max} characters or less", "firstNameRequired": "First Name field is required", "firstNameInvalid": "First name is invalid. It cannot start with a special character, and only these special characters are allowed: space ' . -", "lastNameRequired": "Last Name field is required", diff --git a/public/static/locales/en/managePayouts.json b/public/static/locales/en/managePayouts.json index c7ce5730a3..7ebb3980a7 100644 --- a/public/static/locales/en/managePayouts.json +++ b/public/static/locales/en/managePayouts.json @@ -35,7 +35,7 @@ "errors": { "scheduleFrequencyRequired": "Payment frequency is required", "payoutMinAmountRequired": "Minimum payout amount is required", - "payoutMinAmountTooLow": "Minimum payout amount should be at least {{currency}} {{minAmount}}", + "payoutMinAmountTooLow": "Minimum payout amount should be at least {currency} {minAmount}", "bankNameRequired": "Bank name is required.", "bankAddressRequired": "Bank address is required.", "holderNameRequired": "Holder name is required.", @@ -45,7 +45,7 @@ "noAccountFound": "No account was retrieved" }, "placeholders": { - "payoutMinAmount": "Should be at least {{currency}} {{minAmount}}", + "payoutMinAmount": "Should be at least {currency} {minAmount}", "bankName": "e.g. Century Bank LLC", "bankAddress": "e.g. 1 West St, Hamington Way, MA, 10311, USA", "holderName": "e.g. John Doe", @@ -58,19 +58,19 @@ }, "saveButton": "Save", "accountError": { - "min_amount_range": "The minimum payout amount must be at least {{currency}} {{min}}.", + "min_amount_range": "The minimum payout amount must be at least {currency} {min}.", "min_amount_forbidden": "You may not specify a payout minimum amount for the default account.", - "account_duplicate": "There is already a {{currency}} account.", + "account_duplicate": "There is already a {currency} account.", "default": "Something went wrong while creating an account. Please try after a while." }, "accountCreationSuccess": "Your account details were successfully saved.", "accountUpdationSuccess": "Your account details were successfully updated.", "scheduleSaveSuccess": "Your payout schedule was successfully saved.", "editAccountButton": "Edit Account", - "accountTitleText": "Transfer for {{currency}}", + "accountTitleText": "Transfer for {currency}", "addBankDetailsButton": "Add Bank Details", "noBankAccountText": "You haven't added any bank details yet.", "editBankAccountTitle": "Edit Account", - "minPayoutText": "Min. Payout: {{amount}}" + "minPayoutText": "Min. Payout: {amount}" } } diff --git a/public/static/locales/en/manageProjects.json b/public/static/locales/en/manageProjects.json index a28cc21624..6687ca7640 100644 --- a/public/static/locales/en/manageProjects.json +++ b/public/static/locales/en/manageProjects.json @@ -227,7 +227,7 @@ "mainChallengeInfo": "The biggest challenge this project is facing.", "motivationInfo": "The motivation behind protecting this specific ecosystem.", "hectar": "hectar", - "validation": "{{fieldName}} is Invalid", + "validation": "{fieldName} is Invalid", "date": "Date", "plantingDensityValidation": "Please enter Planting Density", "maxPlantingDensityValidation": "please enter Maximum Planting Density", diff --git a/public/static/locales/en/maps.json b/public/static/locales/en/maps.json index 48a044ad9a..e1f6db05e5 100644 --- a/public/static/locales/en/maps.json +++ b/public/static/locales/en/maps.json @@ -38,7 +38,7 @@ "plantationDensityFormula": "Planting Density = No. of Trees / Planting Area", "unknown": "Unknown", "showWholeArea": "Show Whole Area", - "daysAgo": "{{days}} days ago", + "daysAgo": "{days} days ago", "today": "Today", "yesterday": "Yesterday", "clickForDetails": "Click for Details", diff --git a/public/static/locales/en/me.json b/public/static/locales/en/me.json index 5b24c25578..24a6fb3c03 100644 --- a/public/static/locales/en/me.json +++ b/public/static/locales/en/me.json @@ -29,7 +29,7 @@ "linkedIn": "LinkedIn", "registerTreesDescription": "Register trees that you have planted yourself, e.g. in your garden.", "myForest": "My Forest", - "giftToGiftee": "Gift to {{gifteeName}}", + "giftToGiftee": "Gift to {gifteeName}", "settingManageProject": "Manage Projects", "deleteAccount": "Delete Account", "userTree": "Register Trees", @@ -53,7 +53,7 @@ "dragHere": "or drag here", "contribNotFound": "Contribution Not Found", "errorOccured": "Error Occured", - "contribSuccess": "Successfully added {{treeCount}} {{treeSpecies}} 🌳 from {{plantDate}}", + "contribSuccess": "Successfully added {treeCount} {treeSpecies} 🌳 from {plantDate}", "moreThanOne": "minimum 1 tree required", "registered": "Registered", "receivedTrees": "Received Trees", @@ -86,7 +86,7 @@ "project": "Project Name", "planetCashPayment": "PlanetCash Payment", "method": "Payment Method", - "unitCost": "Cost Per {{unitType}}", + "unitCost": "Cost Per {unitType}", "treeCount": "Tree Count", "lastUpdate": "Last Updated", "donorCertificate": "Donor Certificate", @@ -110,7 +110,7 @@ "pausedUntil": "Paused until", "pauseUntilDate": "Pause until selected Date", "reactivateDonationConfirmation": "Reactivate Donation", - "reactivateDonationDescription": "Your donation will be reactivated and will be built on date {{currentPeriodEnds}}", + "reactivateDonationDescription": "Your donation will be reactivated and will be built on date {currentPeriodEnds}", "cancelDonationConfirmation": "Cancel Donation", "cancelDonationDescription": "Once donation is cancelled, it can not be restarted.", "cancelDonationPaypalDescription": "This donation will be cancelled immediately, it can not be restarted.", @@ -135,7 +135,7 @@ "referred": "Referred", "in-dispute": "In Dispute", "dispute-lost": "Dispute Lost", - "nameForest": "{{name}}'s Forest", + "nameForest": "{name}'s Forest", "taxReceipt": "Tax Receipt", "history": "History", "recurrency": "Recurring Donations", @@ -259,7 +259,7 @@ "supportPin": "Support Pin", "alphaNumeric": "Enter 4 digit alpha numeric code", "switch": "Impersonate", - "targetUser": "You are currently impersonating {{impersonatedEmail}}", + "targetUser": "You are currently impersonating {impersonatedEmail}", "exitImpersonation": "Exit impersonation", "enterTheEmail": "Enter the email of the target user", "enterSupportPin": "Enter the support pin of the target user", @@ -274,6 +274,6 @@ "membershipCtaButtonText": "JOIN NOW", "membershipCtaCopy": "Support us <2>BY BECOMING A MEMBER", "shareUrl": "Share URL", - "treesOfTrees": "{{count1}} of {{count2}}" + "treesOfTrees": "{count1} of {count2}" } } diff --git a/public/static/locales/en/planet.json b/public/static/locales/en/planet.json index f020f11c68..c88f414194 100644 --- a/public/static/locales/en/planet.json +++ b/public/static/locales/en/planet.json @@ -1,7 +1,7 @@ { "Planet": { "treesDonated": "Trees donated since launch of the platform (2019)", - "plantedByTPO": "Planted by the {{projects}}+ participating projects", + "plantedByTPO": "Planted by the {projects}+ participating projects", "plantedGlobally": "Trees reported to us since 2006", "forestLoss": "Net tree loss per year", "estimateOf": "Estimate of annual tree loss by", diff --git a/public/static/locales/en/planetcash.json b/public/static/locales/en/planetcash.json index 2d1cea3836..85f73eb4c2 100644 --- a/public/static/locales/en/planetcash.json +++ b/public/static/locales/en/planetcash.json @@ -8,7 +8,7 @@ "tabAccounts": "Accounts", "tabCreateAccount": "Create Account", "tabTransactions": "Transactions", - "accountTitleText": "{{currency}} PlanetCash Account ({{country}})", + "accountTitleText": "{currency} PlanetCash Account ({country})", "createAccountTitleText": "Signup for PlanetCash", "addBalanceButton": "Add Balance", "labelAccountHolder": "Account Holder", @@ -27,7 +27,7 @@ "planetCashTerms3": "Donations to PlanetCash Account for personal reasons are generally tax-deductible in the country selected at this step. Commercial use of PlanetCash may not be eligible for tax-deductions. If you have questions please contact support@plant-for-the-planet.org or contact your Tax Advisor.", "accountError": { "active_account_exists": "An active account already exists. Deactivate that account before activating another account.", - "duplicate_account": "You have already created an account for {{country}}", + "duplicate_account": "You have already created an account for {country}", "default": "Something went wrong while creating an account. Please try after a while." } } diff --git a/public/static/locales/en/profile.json b/public/static/locales/en/profile.json index d198db6a35..949923422f 100644 --- a/public/static/locales/en/profile.json +++ b/public/static/locales/en/profile.json @@ -1,8 +1,8 @@ { "Profile": { "myProfile": { - "memberSince": "Member since {{date}}", - "userDescription": "{{bio}}" + "memberSince": "Member since {date}", + "userDescription": "{bio}" }, "feature": { "redeem": "Redeem", @@ -14,8 +14,8 @@ "link": "Link" }, "myForestMap": { - "plantedTree_one": "{{count, number}} Tree", - "plantedTree_other": "{{count, number}} Trees", + "plantedTree_one": "{count, number} Tree", + "plantedTree_other": "{count, number} Trees", "treesPlanted": "Trees Planted", "restored": "Restored", "registered": "Registered", @@ -23,13 +23,13 @@ "projects": "projects", "countries": "Countries", "donations": "Donations", - "area": "{{areaConserved}} m²", + "area": "{areaConserved} m²", "zoomIn": "zoom in for more details", - "totalDonation_one": "{{count, number}} donation ", - "totalDonation_other": "{{count, number}} donations ", - "totalProject_one": "to {{count, number}} project", - "totalProject_other": "to {{count, number}} projects", - "tpoName": "By {{tpo}}" + "totalDonation_one": "{count, number} donation ", + "totalDonation_other": "{count, number} donations ", + "totalProject_one": "to {count, number} project", + "totalProject_other": "to {count, number} projects", + "tpoName": "By {tpo}" }, "myTreeCounter": { "treesPlanted": "Trees Planted", @@ -37,16 +37,16 @@ }, "myContributions": { "treesPlantedAndAreaRestored": "Trees Planted & Areas Restored", - "treeRegistered_one": "{{count, number}} Tree Registered", - "treeRegistered_other": "{{count, number}} Trees Registered", - "receivedFrom": "Received from {{name}}", + "treeRegistered_one": "{count, number} Tree Registered", + "treeRegistered_other": "{count, number} Trees Registered", + "receivedFrom": "Received from {name}", "loadMoreContribution": "Load More Contribution", "loadingContribution": "Loading Contribution....", "donate": "Donate", "donateAgain": "Donate Again", "conservedSmall": "conserved", "restoredSmall": "restored", - "areaType": "{{areaConserved}} m² {{type}}", + "areaType": "{areaConserved} m² {type}", "areaConserved": "Areas Conserved" } } diff --git a/public/static/locales/en/redeem.json b/public/static/locales/en/redeem.json index 324ac2f55b..b4696989c1 100644 --- a/public/static/locales/en/redeem.json +++ b/public/static/locales/en/redeem.json @@ -1,7 +1,7 @@ { "Redeem": { - "myPlantedTreesByOrg": "My {{formattedNumber}} tree will be planted by {{tpoName}}", - "myPlantedTreesByOrg_plural": "My {{formattedNumber}} trees will be planted by {{tpoName}}", + "myPlantedTreesByOrg": "My {formattedNumber} tree will be planted by {tpoName}", + "myPlantedTreesByOrg_plural": "My {formattedNumber} trees will be planted by {tpoName}", "congratulations": "Congratulations!", "addToMyTrees": "Add to my trees", "validateCode": "Validate Code", diff --git a/public/static/locales/en/treemapper.json b/public/static/locales/en/treemapper.json index 2bb6d6239a..21e51cb8ba 100644 --- a/public/static/locales/en/treemapper.json +++ b/public/static/locales/en/treemapper.json @@ -24,7 +24,7 @@ "m": "m", "plantingLocation": "Planting Location", "reviewAndSubmit": "Review and Submit", - "sampleTree": "Sample Tree #{{number}}", + "sampleTree": "Sample Tree #{number}", "import": "Import", "editor": "Editor", "draw": "Draw", From a9cce0c8f0cf5d2a40b34c308cf400fe855451fb Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Thu, 22 Feb 2024 18:24:43 +0530 Subject: [PATCH 12/70] feat: updates translation code in components - also makes minor corrections to translation files --- public/static/locales/cs/bulkCodes.json | 18 +- public/static/locales/cs/common.json | 3 +- public/static/locales/cs/editProfile.json | 4 +- public/static/locales/cs/managePayouts.json | 4 +- public/static/locales/cs/me.json | 5 +- public/static/locales/cs/planetcash.json | 4 +- public/static/locales/de/bulkCodes.json | 4 +- public/static/locales/de/common.json | 3 +- public/static/locales/de/editProfile.json | 2 +- public/static/locales/de/managePayouts.json | 2 +- public/static/locales/de/me.json | 5 +- public/static/locales/de/planetcash.json | 2 +- public/static/locales/de/profile.json | 4 + public/static/locales/en/bulkCodes.json | 4 +- public/static/locales/en/common.json | 3 +- public/static/locales/en/editProfile.json | 2 +- public/static/locales/en/managePayouts.json | 2 +- public/static/locales/en/me.json | 6 +- public/static/locales/en/planetcash.json | 2 +- public/static/locales/en/profile.json | 4 + public/static/locales/en/treemapper.json | 10 +- public/static/locales/pt-BR/editProfile.json | 4 +- src/features/common/CopyToClipboard/index.tsx | 4 +- .../common/InputTypes/AutoCompleteCountry.tsx | 17 +- .../common/LandingVideo/PlayButton.tsx | 4 +- src/features/common/LandingVideo/index.tsx | 8 +- .../common/Layout/CookiePolicy/index.tsx | 13 +- .../common/Layout/CustomModal/index.tsx | 6 +- .../common/Layout/DashboardView/index.tsx | 2 +- .../common/Layout/ErrorPopup/index.tsx | 7 +- src/features/common/Layout/Footer/index.tsx | 55 ++- .../common/Layout/RedeemPopup/index.tsx | 9 +- .../common/Layout/UnderMaintenance/index.tsx | 4 +- .../common/Layout/UserLayout/UserLayout.tsx | 76 ++-- .../common/RedeemCode/EnterRedeemCode.tsx | 12 +- .../common/RedeemCode/RedeemFailed.tsx | 6 +- .../RedeemCode/SuccessfullyRedeemed.tsx | 14 +- .../common/TreeCounter/TreeCounter.tsx | 19 +- .../TreeCounter/legacy/TreeCounterData.tsx | 12 +- .../common/VerifyEmail/VerifyEmail.tsx | 18 +- src/features/common/types/project.d.ts | 1 - .../PlantLocation/PlantLocationDetails.tsx | 17 +- .../components/maps/PlantLocations.tsx | 7 +- .../projects/components/maps/ProjectTabs.tsx | 14 +- .../projectDetails/ProjectContactDetails.tsx | 37 +- .../components/projectDetails/ProjectInfo.tsx | 116 +++--- .../projects/components/projects/Filters.tsx | 12 +- .../projects/screens/SingleProjectDetails.tsx | 17 +- src/features/user/Account/CancelModal.tsx | 14 +- src/features/user/Account/EditModal.tsx | 19 +- src/features/user/Account/History.tsx | 6 +- src/features/user/Account/PauseModal.tsx | 12 +- src/features/user/Account/ReactivateModal.tsx | 8 +- .../user/Account/RecurrentPayments.tsx | 9 +- .../user/Account/components/AccountRecord.tsx | 101 +++-- .../user/Account/components/Certificates.tsx | 4 +- .../user/Account/components/DownloadCodes.tsx | 4 +- .../user/Account/components/MembershipCta.tsx | 15 +- .../Account/components/RecurrencyRecord.tsx | 22 +- .../Account/components/TransferDetails.tsx | 4 +- .../BulkCodes/components/AddRecipient.tsx | 4 +- .../BulkCodes/components/BulkCodesError.tsx | 4 +- .../BulkCodes/components/BulkGiftTotal.tsx | 59 ++- .../components/GenericCodesPartial.tsx | 4 +- .../components/ProjectSelectAutocomplete.tsx | 50 +-- .../BulkCodes/components/ProjectSelector.tsx | 5 - .../components/RecipientFormFields.tsx | 4 +- .../components/RecipientsUploadForm.tsx | 82 ++-- .../BulkCodes/components/UnitCostDisplay.tsx | 39 +- .../BulkCodes/components/UploadWidget.tsx | 67 ++-- .../BulkCodes/forms/CreationMethodForm.tsx | 133 +++---- .../user/BulkCodes/forms/IssueCodesForm.tsx | 194 +++++---- .../BulkCodes/forms/SelectProjectForm.tsx | 66 ++- src/features/user/BulkCodes/index.tsx | 82 ++-- src/features/user/CompleteSignup/index.tsx | 50 ++- .../user/GiftFunds/GiftFundDetails.tsx | 6 +- src/features/user/GiftFunds/index.tsx | 8 +- .../components/BankAccountDetails.tsx | 48 ++- .../components/BankDetailsForm.tsx | 376 +++++++++--------- .../components/NoBankAccount.tsx | 28 +- src/features/user/ManagePayouts/index.tsx | 13 +- .../ManagePayouts/screens/AddBankAccount.tsx | 4 +- .../ManagePayouts/screens/EditBankAccount.tsx | 6 +- .../screens/PayoutScheduleForm.tsx | 26 +- .../user/ManageProjects/ProjectsContainer.tsx | 100 ++--- .../components/BasicDetails.tsx | 115 +++--- .../components/DetailedAnalysis.tsx | 144 ++++--- .../components/MapComponent.tsx | 10 +- .../components/ProjectCertificates.tsx | 40 +- .../components/ProjectMedia.tsx | 28 +- .../components/ProjectSelection.tsx | 12 +- .../components/ProjectSites.tsx | 84 ++-- .../components/ProjectSpending.tsx | 37 +- .../components/SubmitForReview.tsx | 71 ++-- src/features/user/ManageProjects/index.tsx | 58 +-- .../PlanetCash/components/AccountDetails.tsx | 11 +- .../components/CreateAccountForm.tsx | 94 +++-- .../components/NoPlanetCashAccount.tsx | 24 +- src/features/user/PlanetCash/index.tsx | 38 +- .../user/PlanetCash/screens/CreateAccount.tsx | 8 +- .../user/PlanetCash/screens/Transactions.tsx | 4 +- .../ContributionStats/ConservationButton.tsx | 9 +- .../ContributionStats/DonationInfo.tsx | 10 +- .../ContributionStats/PlantedTreesButton.tsx | 9 +- .../ContributionStats/RestoredButton.tsx | 15 +- .../microComponents/AddTargetModal.tsx | 14 +- .../ConservationContributions.tsx | 10 +- .../ContributedProjectList.tsx | 8 +- .../PlantedTreesContributions.tsx | 8 +- .../ProjectInfoAndContributionDate.tsx | 15 +- .../microComponents/ProjectsContainer.tsx | 17 +- .../TreesOrUnitAreaAndDonateOption.tsx | 22 +- .../microComponents/ClusterMarker.tsx | 20 +- .../MyForestMap/microComponents/PopUp.tsx | 37 +- .../microComponents/SingleMarkerUnits.tsx | 34 +- .../Profile/components/ProfileBox/index.tsx | 10 +- .../microComponents/PublicProfileFeature.tsx | 8 +- .../microComponents/RedeemModal.tsx | 12 +- .../ProfileBox/microComponents/Share.tsx | 6 +- .../microComponents/SharePlatforms.tsx | 15 +- .../microComponents/UserFeatures.tsx | 8 +- .../ProfileBox/microComponents/UserInfo.tsx | 12 +- .../RegisterTrees/RegisterTrees/DrawMap.tsx | 90 ++--- .../RegisterTrees/SingleContribution.tsx | 10 +- .../RegisterTrees/UploadImages.tsx | 12 +- .../RegisterTrees/RegisterTreesWidget.tsx | 30 +- src/features/user/RegisterTrees/index.tsx | 8 +- .../user/Settings/ApiKey/ApiKeyForm.tsx | 6 +- src/features/user/Settings/ApiKey/index.tsx | 12 +- .../DeleteProfile/DeleteProfileForm.tsx | 26 +- .../user/Settings/DeleteProfile/index.tsx | 8 +- .../Settings/EditProfile/EditProfileForm.tsx | 20 +- .../user/Settings/EditProfile/index.tsx | 8 +- .../ImpersonateUser/ImpersonateUserForm.tsx | 24 +- .../ImpersonationActivated.tsx | 8 +- .../Settings/ImpersonateUser/SupportPin.tsx | 8 +- .../user/Settings/ImpersonateUser/index.tsx | 9 +- .../Counter/components/CounterItem/index.tsx | 4 +- .../Analytics/components/Counter/index.tsx | 4 +- .../Analytics/components/Export/index.tsx | 12 +- .../components/ProjectFilter/index.tsx | 12 +- .../components/ProjectSelectAutocomplete.tsx | 54 ++- .../components/ProjectTypeSelector.tsx | 52 ++- .../SpeciesPlanted/Tooltip/index.tsx | 8 +- .../components/SpeciesPlanted/index.tsx | 10 +- .../TreePlanted/TimeFrameSelector.tsx | 56 ++- .../components/TreePlanted/Tooltip/index.tsx | 8 +- .../components/TreePlanted/index.tsx | 10 +- .../user/TreeMapper/Analytics/index.tsx | 10 +- .../Import/components/PlantingLocation.tsx | 48 +-- .../Import/components/ReviewSubmit.tsx | 43 +- .../Import/components/SampleTreeCard.tsx | 4 +- .../Import/components/SampleTrees.tsx | 31 +- src/features/user/TreeMapper/Import/index.tsx | 19 +- .../TreeMapper/MySpecies/MySpeciesForm.tsx | 13 +- .../MySpecies/SpeciesAutoComplete.tsx | 6 +- .../user/TreeMapper/MySpecies/index.tsx | 6 +- .../TreeMapper/components/PlantLocation.tsx | 9 +- .../components/PlantLocationPage.tsx | 61 +-- .../TreeMapper/components/TreeMapperList.tsx | 4 +- src/features/user/TreeMapper/index.tsx | 8 +- .../Widget/DonationLink/DonationLinkForm.tsx | 48 +-- .../user/Widget/DonationLink/index.tsx | 17 +- src/features/user/Widget/EmbedModal.tsx | 14 +- src/tenants/common/Home/index.tsx | 14 +- src/tenants/common/LeaderBoard/index.tsx | 30 +- .../planet/LeaderBoard/components/Score.tsx | 32 +- .../planet/LeaderBoard/components/Stats.tsx | 29 +- .../LeaderBoard/components/StatsInfoModal.tsx | 24 +- .../planet/LeaderBoard/components/Stories.tsx | 83 ++-- .../planet/LeaderBoard/components/Video.tsx | 10 +- .../Home/components/LeaderBoardSection.tsx | 28 +- 172 files changed, 2130 insertions(+), 2327 deletions(-) diff --git a/public/static/locales/cs/bulkCodes.json b/public/static/locales/cs/bulkCodes.json index 862d894f85..a885151e19 100644 --- a/public/static/locales/cs/bulkCodes.json +++ b/public/static/locales/cs/bulkCodes.json @@ -1,6 +1,6 @@ { "bulkCodesTitle": "Vydání hromadných kódů", - "partnerSignupInfo": "Použití této funkce společnostmi podléhá partnerství se společností Plant-for-the-Planet. Kontaktujte prosím <2>partner@plant-for-the-planet.org pro podrobnosti.", + "partnerSignupInfo": "Použití této funkce společnostmi podléhá partnerství se společností Plant-for-the-Planet. Kontaktujte prosím partner@plant-for-the-planet.org pro podrobnosti.", "bulkCodesDescription1": "Pomocí PlanetCash můžete generovat tisíce kódů v jedné operaci.", "bulkCodesDescription2": "Tuto funkci můžete použít k vytvoření kódů pro vlastní certifikáty, dárkové karty, dary jménem uživatelů a uplatnitelné kódy, které můžete přiřadit k vašim produktům.", "tabCreationMethod": "Metoda tvorby", @@ -11,12 +11,20 @@ "importMethodText": { "title": "Importovat soubor", "subtitle": "Tuto metodu použijte, pokud jedno z následujících kritérií odpovídá vašemu případu použití:", - "details": ["Chci uvést jméno příjemce nebo e-mail pro každý kód.", "Chci, aby Plant-for-the-Planet po vygenerování automaticky odeslal příjemcům e-mail (volitelné).", "Chci vydat kódy pro různé počty stromů."] + "details": [ + "Chci uvést jméno příjemce nebo e-mail pro každý kód.", + "Chci, aby Plant-for-the-Planet po vygenerování automaticky odeslal příjemcům e-mail (volitelné).", + "Chci vydat kódy pro různé počty stromů." + ] }, "genericMethodText": { "title": "Vytvoření obecných kódů", "subtitle": "Tuto metodu použijte, pokud následující kritéria odpovídají vašemu případu použití:", - "details": ["Všechny kódy budou mít stejnou hodnotu.", "Chci vygenerovat řadu kódů pro libovolné příjemce.", "Jména a e-maily nelze s kódem asociovat."] + "details": [ + "Všechny kódy budou mít stejnou hodnotu.", + "Chci vygenerovat řadu kódů pro libovolné příjemce.", + "Jména a e-maily nelze s kódem asociovat." + ] }, "projectName": "Název projektu", "costPerUnit": "Cena za jednotku", @@ -69,7 +77,7 @@ "successUploadCSV": { "ignoredColumns": "Další sloupce byly ignorovány" }, - "importInstructions": "Přečtěte si <2>dokumentaci zde, stáhněte si <5>šablonu aplikace Excel zde, a <8>šablonu CSV zde.", + "importInstructions": "Přečtěte si dokumentaci zde, stáhněte si šablonu aplikace Excel zde, a šablonu CSV zde.", "donationSuccess": "Váš dar byl úspěšný. Přesměrování na zobrazení podrobností o darování brzy...", "donationError": { "planet_cash_insufficient_credit": "Dostupný kredit = {{availableBalance}}. Chcete-li provést tento dar, nahrajte zůstatek na svém účtu PlanetCash.", @@ -77,4 +85,4 @@ "planet_cash_payment_failure": "Transakce selhala. {{reason}}", "planet_cash_invalid_project": "Nelze darovat vybranému projektu." } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/common.json b/public/static/locales/cs/common.json index c9b5eb53ae..69534e52d1 100644 --- a/public/static/locales/cs/common.json +++ b/public/static/locales/cs/common.json @@ -75,7 +75,6 @@ "copiedToClipboard": "Zkopírováno do schránky!", "close": "Zavřít", "logout": "Odhlásit se", - "document": "Dokumentace platformy (CZ)", "featured": "Vybrané projekty", "treeMapper": "TreeMapper", "overview": "Přehled", @@ -126,4 +125,4 @@ "reviewInfo": " Projekt byl zkontrolován v rámci vícedenního terénního přezkumu v <2>měsíci a splňuje naše <5>standardy.", "standardsLink": "https://www.plant-for-the-planet.org/standards/", "project": "Projekt" -} \ No newline at end of file +} diff --git a/public/static/locales/cs/editProfile.json b/public/static/locales/cs/editProfile.json index 8493196112..2be378bfc8 100644 --- a/public/static/locales/cs/editProfile.json +++ b/public/static/locales/cs/editProfile.json @@ -21,7 +21,7 @@ "accountPrivacyChangeText": "Abyste mohli vytvořit widget profilu, musíte mít veřejný účet. Kliknutím na tlačítko pokračovat změníte nastavení soukromí na veřejné.", "continue": "Pokračovat", "cancel": "Zrušit", - "termAndCondition": "Souhlasím s <0>podmínkami platformy Plant-for-the-Planet.", + "termAndCondition": "Souhlasím s podmínkami platformy Plant-for-the-Planet.", "termAndConditionError": "Přijměte prosím Smluvní podmínky", "fieldLabels": { "profileType": "Já jsem", @@ -34,4 +34,4 @@ "nameRequired": "Zadejte prosím jméno", "websiteInvalid": "Zadejte prosím platnou adresu URL" } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/managePayouts.json b/public/static/locales/cs/managePayouts.json index aea42b172c..ea77385355 100644 --- a/public/static/locales/cs/managePayouts.json +++ b/public/static/locales/cs/managePayouts.json @@ -7,7 +7,7 @@ "payoutInformation1": "Výplaty jsou zpracovávány automaticky každý rok, nebo když organizace sbírá 30 000 EUR nebo ekvivalent v jiné měně.", "payoutInformation2": "Výplaty vydává Nadace Plant-for-the-Planet Foundation a její sesterské organizace, např.: Plant-for-the-Planet USA, Plant-for-the-Planet Švýcarsko atd.", "payoutInformation3": "Pokud splňujete kritéria minimální částky 1 500 EUR, můžete upravit výplatní plán a přijímat časté výplaty.", - "supportInformation": "Pokud máte výjimečný případ, kontaktujte prosím<1> <2>support@plant-for-the-planet.org.", + "supportInformation": "Pokud máte výjimečný případ, kontaktujte prosím support@plant-for-the-planet.org.", "scheduleFrequencies": { "monthly": "Měsíčně", "quarterly": "Čtvrtletně", @@ -70,4 +70,4 @@ "noBankAccountText": "Zatím jste nepřidali žádné bankovní údaje.", "editBankAccountTitle": "Upravit účet", "minPayoutText": "Min. Výplata: {{amount}}" -} \ No newline at end of file +} diff --git a/public/static/locales/cs/me.json b/public/static/locales/cs/me.json index 4ea725efbb..f773b4852c 100644 --- a/public/static/locales/cs/me.json +++ b/public/static/locales/cs/me.json @@ -260,5 +260,6 @@ "invalidEmail": "Zadejte prosím platné e-mailové ID", "wrongEntered": "Emailové ID nebo PIN podpory je nesprávné !!", "donatedTrees": "Darované stromy", - "resetPin": "Obnovit PIN" -} \ No newline at end of file + "resetPin": "Obnovit PIN", + "document": "Dokumentace platformy (CZ)" +} diff --git a/public/static/locales/cs/planetcash.json b/public/static/locales/cs/planetcash.json index b7472f89d0..663f5eac0a 100644 --- a/public/static/locales/cs/planetcash.json +++ b/public/static/locales/cs/planetcash.json @@ -1,6 +1,6 @@ { "title": "PlanetCash", - "partnerSignupInfo": "Použití této funkce společnostmi podléhá partnerství s Plant-for-the-Planet. Pro podrobnosti kontaktujte prosím <2>partner@plant-for-the-planet.org.", + "partnerSignupInfo": "Použití této funkce společnostmi podléhá partnerství s Plant-for-the-Planet. Pro podrobnosti kontaktujte prosím partner@plant-for-the-planet.org.", "description": "PlanetCash je vývojářský nástroj, který rozšiřuje platformu Plant-for-the-Planet o API a vestavěné nástroje. Zůstatek PlanetCash je příspěvkem do Plant-for-the-Planet, který může dárce věnovat různým projektům na platformě.", "termsText": "Zobrazit smluvní podmínky.", "learnMoreText": "Další informace o PlanetCash.", @@ -29,4 +29,4 @@ "duplicate_account": "Již jste vytvořili účet pro {{country}}", "default": "Při vytváření účtu se něco pokazilo. Zkuste to prosím o chvíli." } -} \ No newline at end of file +} diff --git a/public/static/locales/de/bulkCodes.json b/public/static/locales/de/bulkCodes.json index fc87935076..2775fdb8e2 100644 --- a/public/static/locales/de/bulkCodes.json +++ b/public/static/locales/de/bulkCodes.json @@ -1,7 +1,7 @@ { "BulkCodes": { "bulkCodesTitle": "Baumurkunden & Codes erzeugen", - "partnerSignupInfo": "Unsere Funktion Planet Cash / Bulk-Codes ist eine neue Funktion speziell für Partner von Plant-for-the-Planet. Melden Sie sich gerne bei Interesse bei <2>partner@plant-for-the-planet.org.", + "partnerSignupInfo": "Unsere Funktion Planet Cash / Bulk-Codes ist eine neue Funktion speziell für Partner von Plant-for-the-Planet. Melden Sie sich gerne bei Interesse bei partner@plant-for-the-planet.org.", "bulkCodesDescription1": "Mit PlanetCash kannst du Tausende von Codes auf einmal erzeugen. Das Erzeugen von Urkunden und Codes wird deine Baumzahl steigen lassen.", "bulkCodesDescription2": "Mit dieser Funktion kannst du Codes für benutzerdefinierte Zertifikate, Geschenkkarten, Spenden im Namen von Nutzern und einlösbare Codes erstellen, die du mit deinen Produkten verknüpfen kannst.", "tabCreationMethod": "Herstellungsmethode", @@ -83,7 +83,7 @@ "successUploadCSV": { "ignoredColumns": "Zusätzliche Spalten wurden ignoriert" }, - "importInstructions": "Bitte lesen Sie die <2>Dokumentation hier, lade die <5>Excel-Vorlage hier und die <8>CSV-Vorlage hier herunter.", + "importInstructions": "Bitte lesen Sie die Dokumentation hier, lade die Excel-Vorlage hier und die CSV-Vorlage hier herunter.", "tableHeaders": { "recipient_name": "Empfängername", "recipient_email": "Empfängeremail", diff --git a/public/static/locales/de/common.json b/public/static/locales/de/common.json index 0402837108..189e3030d1 100644 --- a/public/static/locales/de/common.json +++ b/public/static/locales/de/common.json @@ -1,6 +1,6 @@ { "Common": { - "tree": "{count, plural, =0 {Bäume} =1 {Baum} other {Bäume}", + "tree": "{count, plural, =0 {Bäume} =1 {Baum} other {Bäume}}", "tree_one": "Baum", "tree_other": "Bäume", "m2": "m²", @@ -78,7 +78,6 @@ "copiedToClipboard": "In die Zwischenablage kopiert!", "close": "Schließen", "logout": "Abmelden", - "document": "Plattform-Dokumentation (EN)", "featured": "Empfohlen", "treeMapper": "TreeMapper", "overview": "Übersicht", diff --git a/public/static/locales/de/editProfile.json b/public/static/locales/de/editProfile.json index 81f9e119ee..720ca18a2c 100644 --- a/public/static/locales/de/editProfile.json +++ b/public/static/locales/de/editProfile.json @@ -22,7 +22,7 @@ "accountPrivacyChangeText": "Um ein Profil-Widget erstellen zu können, musst Du ein öffentliches Konto haben. Wenn Du auf \"Weiter\" klickst, änderst Du Deine Datenschutzeinstellungen auf \"öffentlich\".", "continue": "Weiter", "cancel": "Abbrechen", - "termAndCondition": "Ich stimme den <0>Nutzungsbedingungen der Plant-for-the-Planet Plattform zu.", + "termAndCondition": "Ich stimme den Nutzungsbedingungen der Plant-for-the-Planet Plattform zu.", "termAndConditionError": "Bitte stimme den Nutzungsbedingungen zu", "fieldLabels": { "profileType": "Ich bin ein", diff --git a/public/static/locales/de/managePayouts.json b/public/static/locales/de/managePayouts.json index 84d6ade751..b5e4b13dfb 100644 --- a/public/static/locales/de/managePayouts.json +++ b/public/static/locales/de/managePayouts.json @@ -8,7 +8,7 @@ "payoutInformation1": "Die Auszahlung erfolgt automatisch jedes Jahr oder wenn eine Organisation 30.000 EUR oder den Gegenwert in einer anderen Währung gesammelt hat.", "payoutInformation2": "Die Auszahlungen werden von der Plant-for-the-Planet Foundation und ihren Schwesterorganisationen vorgenommen, z.B. Plant-for-the-Planet US, Plant-for-the-Planet Switzerland usw.", "payoutInformation3": "Du kannst den Auszahlungszeitplan anpassen und erhältst häufige Auszahlungen, solange du das Kriterium des Mindestbetrags von 1.500 EUR erfüllen.", - "supportInformation": "Wenn du einen Ausnahmefall hast, wenden dich bitte an<1><2>support@plant-for-the-planet.org.", + "supportInformation": "Wenn du einen Ausnahmefall hast, wenden dich bitte an support@plant-for-the-planet.org.", "scheduleFrequencies": { "monthly": "Monatlich", "quarterly": "Vierteljährlich", diff --git a/public/static/locales/de/me.json b/public/static/locales/de/me.json index f04a55adc9..c00638d680 100644 --- a/public/static/locales/de/me.json +++ b/public/static/locales/de/me.json @@ -272,8 +272,9 @@ "conserved": "Erhalten", "restored": "Wiederhergestellt", "membershipCtaButtonText": "Jetzt mitmachen", - "membershipCtaCopy": "Unterstütze uns und <2>WERDE MITGLIED", + "membershipCtaCopy": "Unterstütze uns und WERDE MITGLIED", "shareUrl": "Teile URL", - "treesOfTrees": "{count1} von {count2}" + "treesOfTrees": "{count1} von {count2}", + "document": "Plattform-Dokumentation (EN)" } } diff --git a/public/static/locales/de/planetcash.json b/public/static/locales/de/planetcash.json index 0da8338a82..7031306d63 100644 --- a/public/static/locales/de/planetcash.json +++ b/public/static/locales/de/planetcash.json @@ -1,7 +1,7 @@ { "PlanetCash": { "title": "PlanetCash", - "partnerSignupInfo": "Unsere Funktion Planet Cash / Bulk-Codes ist eine neue Funktion speziell für Partner von Plant-for-the-Planet. Melden Sie sich gerne bei Interesse bei <2>partner@plant-for-the-planet.org.", + "partnerSignupInfo": "Unsere Funktion Planet Cash / Bulk-Codes ist eine neue Funktion speziell für Partner von Plant-for-the-Planet. Melden Sie sich gerne bei Interesse bei partner@plant-for-the-planet.org.", "description": "PlanetCash ist ein entwicklerfreundliches Tool, das die Plant-for-the-Planet Plattform mit APIs und eingebauten Tools erweitert. Das PlanetCash-Guthaben ist ein Beitrag zu Plant-for-the-Planet, der vom Spender für verschiedene Projekte auf der Plattform verwendet werden kann.", "termsText": "Bedingungen & Konditionen anzeigen.", "learnMoreText": "Erfahre mehr über PlanetCash.", diff --git a/public/static/locales/de/profile.json b/public/static/locales/de/profile.json index eef2c755b3..a86c44bf51 100644 --- a/public/static/locales/de/profile.json +++ b/public/static/locales/de/profile.json @@ -14,6 +14,7 @@ "link": "Link" }, "myForestMap": { + "plantedTree": "{count, plural, =0 {Bäume} =1 {Baum} other {Bäume}}", "plantedTree_one": "{count, number} Baum", "plantedTree_other": "{count, number} Bäume", "treesPlanted": "Gepflanzte Bäume", @@ -25,8 +26,10 @@ "donations": "Spenden", "area": "{areaConserved} m²", "zoomIn": "Für weitere Details heranzoomen", + "totalDonation": "{count, plural, =0 {Spenden} =1 {Spende} other {Spenden}} ", "totalDonation_one": "{count, number} Spende ", "totalDonation_other": "{count, number} Spenden ", + "totalProject": "für {count, plural, =0 {Projekte} =1 {Projekt} other {Projekte}}", "totalProject_one": "für {count, number} Projekt", "totalProject_other": "für {count, number} Projekte", "tpoName": "By {tpo}" @@ -37,6 +40,7 @@ }, "myContributions": { "treesPlantedAndAreaRestored": "Bäume gepflanzt & Gebiete wiederhergestellt", + "treeRegistered": "{count, plural, =0 {Bäume registriert} =1 {Baum registriert} other {Bäume registriert}}", "treeRegistered_one": "{count, number} Baum registriert", "treeRegistered_other": "{count, number} Bäume registriert", "receivedFrom": "Empfangen von {name}", diff --git a/public/static/locales/en/bulkCodes.json b/public/static/locales/en/bulkCodes.json index 3a51a85ba8..2cbe3c5150 100644 --- a/public/static/locales/en/bulkCodes.json +++ b/public/static/locales/en/bulkCodes.json @@ -1,7 +1,7 @@ { "BulkCodes": { "bulkCodesTitle": "Issue Tree Certificates & Codes", - "partnerSignupInfo": "Use of this feature by Companies is subject to partnership with Plant-for-the-Planet. Please contact <2>partner@plant-for-the-planet.org for details.", + "partnerSignupInfo": "Use of this feature by Companies is subject to partnership with Plant-for-the-Planet. Please contact partner@plant-for-the-planet.org for details.", "bulkCodesDescription1": "Using PlanetCash you can generate thousands of codes in a single operation. Generating tree certificates will increase your tree count.", "bulkCodesDescription2": "You can use this feature to create codes for custom certificates, gift cards, donations on behalf of users and redeemable codes that you can associate with your products.", "tabCreationMethod": "Creation Method", @@ -83,7 +83,7 @@ "successUploadCSV": { "ignoredColumns": "Extra columns were ignored" }, - "importInstructions": "Please refer to the <2>documentation here, download <5>Excel template here, and <8>CSV template here.", + "importInstructions": "Please refer to the documentation here, download Excel template here, and CSV template here.", "tableHeaders": { "recipient_name": "Recipient Name", "recipient_email": "Recipient Email", diff --git a/public/static/locales/en/common.json b/public/static/locales/en/common.json index 27e8b861fb..8bf0624f20 100644 --- a/public/static/locales/en/common.json +++ b/public/static/locales/en/common.json @@ -1,6 +1,6 @@ { "Common": { - "tree": "{count, plural, =0 {Trees} =1 {Tree} other {Trees}", + "tree": "{count, plural, =0 {Trees} =1 {Tree} other {Trees}}", "tree_one": "Tree", "tree_other": "Trees", "m2": "m²", @@ -78,7 +78,6 @@ "copiedToClipboard": "Copied to clipboard!", "close": "Close", "logout": "Logout", - "document": "Platform Documentation (EN)", "featured": "Featured", "treeMapper": "TreeMapper", "overview": "Overview", diff --git a/public/static/locales/en/editProfile.json b/public/static/locales/en/editProfile.json index 33a2f93843..fd3d988519 100644 --- a/public/static/locales/en/editProfile.json +++ b/public/static/locales/en/editProfile.json @@ -22,7 +22,7 @@ "accountPrivacyChangeText": "In order to create a profile widget you need to have a public account. By clicking continue you change your privacy settings to public.", "continue": "Continue", "cancel": "Cancel", - "termAndCondition": "I agree to the <0>Terms and Conditions of the Plant-for-the-Planet platform.", + "termAndCondition": "I agree to the Terms and Conditions of the Plant-for-the-Planet platform.", "termAndConditionError": "Please Accept the Terms and Conditions", "fieldLabels": { "profileType": "I am a", diff --git a/public/static/locales/en/managePayouts.json b/public/static/locales/en/managePayouts.json index 7ebb3980a7..1e73bac4c8 100644 --- a/public/static/locales/en/managePayouts.json +++ b/public/static/locales/en/managePayouts.json @@ -8,7 +8,7 @@ "payoutInformation1": "Payouts are processed automatically every year, or when an organization collects 30,000 EUR or its equivalent in other currency.", "payoutInformation2": "Payouts are issued by Plant-for-the-Planet Foundation and its sister organizations eg: Plant-for-the-Planet US, Plant-for-the-Planet Switzerland etc.", "payoutInformation3": "You can adjust the payout schedule and receive frequent payouts as long as you meet the 1,500 EUR minimum amount criteria.", - "supportInformation": "If you have an exceptional case, please contact<1><2>support@plant-for-the-planet.org.", + "supportInformation": "If you have an exceptional case, please contact support@plant-for-the-planet.org.", "scheduleFrequencies": { "monthly": "Monthly", "quarterly": "Quarterly", diff --git a/public/static/locales/en/me.json b/public/static/locales/en/me.json index 24a6fb3c03..d0fabb7f7c 100644 --- a/public/static/locales/en/me.json +++ b/public/static/locales/en/me.json @@ -83,6 +83,7 @@ "donorNameRequired": "Donor Name Required", "donationAmountRequired": "Donation Amount Required", "frequencyRequired": "Frequency Required", + "dateRequired": "Date Required", "project": "Project Name", "planetCashPayment": "PlanetCash Payment", "method": "Payment Method", @@ -272,8 +273,9 @@ "conserved": "Conserved", "restored": "Restored", "membershipCtaButtonText": "JOIN NOW", - "membershipCtaCopy": "Support us <2>BY BECOMING A MEMBER", + "membershipCtaCopy": "Support us BY BECOMING A MEMBER", "shareUrl": "Share URL", - "treesOfTrees": "{count1} of {count2}" + "treesOfTrees": "{count1} of {count2}", + "document": "Platform Documentation (EN)" } } diff --git a/public/static/locales/en/planetcash.json b/public/static/locales/en/planetcash.json index 85f73eb4c2..fd386dbd02 100644 --- a/public/static/locales/en/planetcash.json +++ b/public/static/locales/en/planetcash.json @@ -1,7 +1,7 @@ { "PlanetCash": { "title": "PlanetCash", - "partnerSignupInfo": "Use of this feature by Companies is subject to partnership with Plant-for-the-Planet. Please contact <2>partner@plant-for-the-planet.org for details.", + "partnerSignupInfo": "Use of this feature by Companies is subject to partnership with Plant-for-the-Planet. Please contact partner@plant-for-the-planet.org for details.", "description": "PlanetCash is a developer friendly tool that extends the Plant-for-the-Planet Platform with APIs and built in tools. PlanetCash balance is a contribution to Plant-for-the-Planet that can be dedicated by the donor to different projects on the platform.", "termsText": "View Terms & Conditions.", "learnMoreText": "Learn more about PlanetCash.", diff --git a/public/static/locales/en/profile.json b/public/static/locales/en/profile.json index 949923422f..8b7279bfe0 100644 --- a/public/static/locales/en/profile.json +++ b/public/static/locales/en/profile.json @@ -14,6 +14,7 @@ "link": "Link" }, "myForestMap": { + "plantedTree": "{count, plural, =0 {Trees} =1 {Tree} other {Trees}}", "plantedTree_one": "{count, number} Tree", "plantedTree_other": "{count, number} Trees", "treesPlanted": "Trees Planted", @@ -25,8 +26,10 @@ "donations": "Donations", "area": "{areaConserved} m²", "zoomIn": "zoom in for more details", + "totalDonation": "{count, plural, =0 {donations} =1 {donation} other {donations}} ", "totalDonation_one": "{count, number} donation ", "totalDonation_other": "{count, number} donations ", + "totalProject": "to {count, plural, =0 {projects} =1 {project} other {projects}}", "totalProject_one": "to {count, number} project", "totalProject_other": "to {count, number} projects", "tpoName": "By {tpo}" @@ -37,6 +40,7 @@ }, "myContributions": { "treesPlantedAndAreaRestored": "Trees Planted & Areas Restored", + "treeRegistered": "{count, plural, =0 {Trees Registered} =1 {Tree Registered} other {Trees Registered}}", "treeRegistered_one": "{count, number} Tree Registered", "treeRegistered_other": "{count, number} Trees Registered", "receivedFrom": "Received from {name}", diff --git a/public/static/locales/en/treemapper.json b/public/static/locales/en/treemapper.json index 21e51cb8ba..f905d543c7 100644 --- a/public/static/locales/en/treemapper.json +++ b/public/static/locales/en/treemapper.json @@ -12,6 +12,7 @@ "coordinates": "Coordinates", "guid": "GUID", "height": "Height", + "invalidHeight": "Invalid height", "width": "Width", "plantDate": "Plant Date", "registrationDate": "Registration Date", @@ -25,6 +26,7 @@ "plantingLocation": "Planting Location", "reviewAndSubmit": "Review and Submit", "sampleTree": "Sample Tree #{number}", + "tag": "Tag", "import": "Import", "editor": "Editor", "draw": "Draw", @@ -33,8 +35,11 @@ "downloadCSVTemplate": "Download CSV Template", "treeTag": "Tree Tag", "diameter": "Diameter", + "invalidDiameter": "Invalid diameter", "latitude": "Latitude", + "invalidLatitude": "Invalid latitude", "longitude": "Longitude", + "invalidLongitude": "Invalid longitude", "addAnotherSampleTree": "Add Another Sample Tree", "skip": "Skip", "treeSpecies": "Tree Species", @@ -63,7 +68,10 @@ "speciesValidation": "Please enter a species", "external": "External", "date": "Date", + "datePlantedRequired": "Date planted required", "measurements": "Measurements", - "ignoredColumnsWarning": "The extra columns have been ignored" + "ignoredColumnsWarning": "The extra columns have been ignored", + "back": "Back", + "submit": "Submit" } } diff --git a/public/static/locales/pt-BR/editProfile.json b/public/static/locales/pt-BR/editProfile.json index 577a008038..1a48bcf538 100644 --- a/public/static/locales/pt-BR/editProfile.json +++ b/public/static/locales/pt-BR/editProfile.json @@ -21,7 +21,7 @@ "accountPrivacyChangeText": "Para criar um widget de perfil, você precisa ter uma conta pública. Ao clicar em continuar, você muda suas configurações de privacidade para público.", "continue": "Continuar", "cancel": "Cancelar", - "termAndCondition": "Concordo com os <0>Termos e Condições da plataforma Plant-for-the-Planet.", + "termAndCondition": "Concordo com os Termos e Condições da plataforma Plant-for-the-Planet.", "termAndConditionError": "Por favor Aceite os Termos e Condições", "fieldLabels": { "profileType": "Eu sou um(a)", @@ -34,4 +34,4 @@ "nameRequired": "Por favor, adicione um nome", "websiteInvalid": "Por favor, digite o URL válido do site" } -} \ No newline at end of file +} diff --git a/src/features/common/CopyToClipboard/index.tsx b/src/features/common/CopyToClipboard/index.tsx index 298fce2b16..be1b20826b 100644 --- a/src/features/common/CopyToClipboard/index.tsx +++ b/src/features/common/CopyToClipboard/index.tsx @@ -4,7 +4,7 @@ import styles from './styles.module.scss'; import Snackbar from '@mui/material/Snackbar'; import MuiAlert from '@mui/material/Alert'; import { styled } from '@mui/material/styles'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; const Alert = styled(MuiAlert)(({ theme }) => { return { @@ -21,7 +21,7 @@ export default function CopyToClipboard({ text, isButton, }: Props): ReactElement { - const { t } = useTranslation(['common']); + const t = useTranslations('Common'); const [open, setOpen] = useState(false); const handleClick = async () => { diff --git a/src/features/common/InputTypes/AutoCompleteCountry.tsx b/src/features/common/InputTypes/AutoCompleteCountry.tsx index 1ceff4a020..f6a46cfbd7 100644 --- a/src/features/common/InputTypes/AutoCompleteCountry.tsx +++ b/src/features/common/InputTypes/AutoCompleteCountry.tsx @@ -2,7 +2,7 @@ import { useState, ReactElement, useEffect, ReactNode } from 'react'; import { TextField } from '@mui/material'; import React from 'react'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { MuiAutoComplete, StyledAutoCompleteOption } from './MuiAutoComplete'; import { CountryType, ExtendedCountryCode } from '../types/country'; import { allCountries } from '../../../utils/constants/countries'; @@ -35,7 +35,7 @@ export default function CountrySelect({ onChange, countries = allCountries, }: CountrySelectProps): ReactElement | null { - const { t, ready } = useTranslation(['country']); + const t = useTranslations('Country'); // This value is an object with keys - code, label and phone // This has to be passed to the component as default value @@ -66,8 +66,8 @@ export default function CountrySelect({ useEffect(() => { countries.sort((a, b) => { - const nameA = t(`country:${a.code.toLowerCase()}`); - const nameB = t(`country:${b.code.toLowerCase()}`); + const nameA = t(a.code.toLowerCase()); + const nameB = t(b.code.toLowerCase()); //Automatic Selection option is always at first position (if present) if (a.code === 'auto') return -1; @@ -81,9 +81,9 @@ export default function CountrySelect({ } return 0; }); - }, [ready]); + }, []); - return selectedCountry && ready ? ( + return selectedCountry ? ( { const { code: countryCode, currency } = option as CountryType; const label = - (currency ? `(${currency}) ` : '') + - t(`country:${countryCode.toLowerCase()}`); + (currency ? `(${currency}) ` : '') + t(countryCode.toLowerCase()); return label; }} isOptionEqualToValue={(option, value) => @@ -102,7 +101,7 @@ export default function CountrySelect({ const { code: countryCode, currency } = option as CountryType; const displayedOption = (currency ? `(${currency}) ` : '') + - t(`country:${countryCode.toLowerCase()}`) + + t(countryCode.toLowerCase()) + (!(name == 'editProfile' || countryCode === 'auto') ? ` ${countryCode}` : ''); diff --git a/src/features/common/LandingVideo/PlayButton.tsx b/src/features/common/LandingVideo/PlayButton.tsx index e6bfc62773..781931e4a0 100644 --- a/src/features/common/LandingVideo/PlayButton.tsx +++ b/src/features/common/LandingVideo/PlayButton.tsx @@ -2,7 +2,7 @@ import React, { ReactElement, useContext } from 'react'; import { useRouter } from 'next/router'; import PlayIcon from '../../../../public/assets/images/icons/PlayIcon'; import styles from './styles.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { useUserProps } from '../Layout/UserPropsContext'; import { ParamsContext } from '../Layout/QueryParamsContext'; @@ -15,7 +15,7 @@ export default function PlayButton({ }: Props): ReactElement | null { const { isImpersonationModeOn } = useUserProps(); const { embed, enableIntro, isContextLoaded } = useContext(ParamsContext); - const { t } = useTranslation(['common']); + const t = useTranslations('Common'); const { pathname } = useRouter(); const playButtonClasses = `${ diff --git a/src/features/common/LandingVideo/index.tsx b/src/features/common/LandingVideo/index.tsx index a48f6e7846..0af8e3d96d 100644 --- a/src/features/common/LandingVideo/index.tsx +++ b/src/features/common/LandingVideo/index.tsx @@ -6,7 +6,7 @@ import React, { useState, } from 'react'; import styles from './styles.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import ReactPlayer from 'react-player/lazy'; import { useUserAgent } from 'next-useragent'; import { ParamsContext } from '../Layout/QueryParamsContext'; @@ -16,7 +16,7 @@ interface Props { } function VideoContainer({ setshowVideo }: Props): ReactElement { - const { t, ready } = useTranslation(['common']); + const t = useTranslations('Common'); const [videoURL, setvideoURL] = useState(null); const { isContextLoaded, embed, enableIntro } = useContext(ParamsContext); const videoRef = useRef(null); @@ -95,7 +95,7 @@ function VideoContainer({ setshowVideo }: Props): ReactElement { } }, [videoURL]); - return ready && isContextLoaded ? ( + return isContextLoaded ? (
{videoURL && @@ -122,7 +122,7 @@ function VideoContainer({ setshowVideo }: Props): ReactElement { className={styles.landingVideoSkipButton} onClick={() => handleVideoClose()} > - {t('common:skipIntroVideo')} + {t('skipIntroVideo')}
) : ( diff --git a/src/features/common/Layout/CookiePolicy/index.tsx b/src/features/common/Layout/CookiePolicy/index.tsx index 07f07f9ff1..ca058710eb 100644 --- a/src/features/common/Layout/CookiePolicy/index.tsx +++ b/src/features/common/Layout/CookiePolicy/index.tsx @@ -2,11 +2,12 @@ import React, { useEffect, useRef, useState } from 'react'; import CloseIcon from '../../../../../public/assets/images/icons/CloseIcon'; import styles from './CookiePolicy.module.scss'; import { useUserProps } from '../UserPropsContext'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; export default function CookiePolicy() { const [showCookieNotice, setShowCookieNotice] = useState(false); - const { i18n, t, ready } = useTranslation(['leaderboard']); + const t = useTranslations('Common'); + const locale = useLocale(); const { user, contextLoaded } = useUserProps(); useEffect(() => { @@ -40,7 +41,7 @@ export default function CookiePolicy() { isMountedRef.current = true; }, []); - return ready && showCookieNotice ? ( + return showCookieNotice ? ( diff --git a/src/features/common/Layout/CustomModal/index.tsx b/src/features/common/Layout/CustomModal/index.tsx index 0f95194a15..b20b112a31 100644 --- a/src/features/common/Layout/CustomModal/index.tsx +++ b/src/features/common/Layout/CustomModal/index.tsx @@ -1,6 +1,6 @@ import Modal from '@mui/material/Modal'; import React from 'react'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import styles from './CustomModal.module.scss'; interface Props { @@ -20,7 +20,7 @@ export default function CustomModal({ modalTitle, modalSubtitle, }: Props) { - const { t } = useTranslation(['editProfile']); + const t = useTranslations('EditProfile'); return (
@@ -47,7 +47,7 @@ export default function CustomModal({ className={styles.cancelButton} onClick={handleCancel} > - {t('editProfile:cancel')} + {t('cancel')}
diff --git a/src/features/common/Layout/DashboardView/index.tsx b/src/features/common/Layout/DashboardView/index.tsx index a8f48b7d61..311986476f 100644 --- a/src/features/common/Layout/DashboardView/index.tsx +++ b/src/features/common/Layout/DashboardView/index.tsx @@ -4,7 +4,7 @@ import materialTheme from '../../../../theme/themeStyles'; interface DashboardViewProps { title: string; - subtitle: ReactElement | null; + subtitle: string | ReactElement | null; children: ReactNode; variant?: 'full-width' | 'compact'; multiColumn?: boolean; diff --git a/src/features/common/Layout/ErrorPopup/index.tsx b/src/features/common/Layout/ErrorPopup/index.tsx index 599a465e26..dc4f488e40 100644 --- a/src/features/common/Layout/ErrorPopup/index.tsx +++ b/src/features/common/Layout/ErrorPopup/index.tsx @@ -1,11 +1,11 @@ import React, { ReactElement, useContext, useEffect } from 'react'; import CloseIcon from '../../../../../public/assets/images/icons/CloseIcon'; import styles from './ErrorPopup.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { ErrorHandlingContext } from '../ErrorHandlingContext'; export default function ErrorPopup(): ReactElement { - const { t, ready } = useTranslation(['common']); + const t = useTranslations('Common'); const { errors, setErrors } = useContext(ErrorHandlingContext); useEffect(() => { @@ -33,8 +33,7 @@ export default function ErrorPopup(): ReactElement { return ( <> - {ready && - errors && + {errors && errors.length > 0 && errors.map((err, index) => { return ( diff --git a/src/features/common/Layout/Footer/index.tsx b/src/features/common/Layout/Footer/index.tsx index 343a1a7843..cc150b98cd 100644 --- a/src/features/common/Layout/Footer/index.tsx +++ b/src/features/common/Layout/Footer/index.tsx @@ -4,14 +4,15 @@ import World from '../../../../../public/assets/images/footer/World'; import getLanguageName from '../../../../utils/language/getLanguageName'; import styles from './Footer.module.scss'; import SelectLanguageAndCountry from './SelectLanguageAndCountry'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { useTenant } from '../TenantContext'; import UNDecadeLogo from '../../../../../public/assets/images/footer/UNDecadeLogo'; import PlanetCJLogo from '../../../../../public/assets/images/footer/PlanetCJLogo'; // let styles = require('./Footer.module.css'); export default function Footer(): ReactElement | null { - const { t, i18n, ready } = useTranslation(['common']); + const t = useTranslations('Common'); + const locale = useLocale(); const { tenantConfig } = useTenant(); const [openModal, setOpenModal] = useState(false); const [selectedCurrency, setSelectedCurrency] = useState('EUR'); @@ -26,52 +27,52 @@ export default function Footer(): ReactElement | null { const FooterLinks = { shop: { - title: ready ? t('common:shop') : '', + title: t('shop'), link: `https://www.thegoodshop.org/de`, }, privacy: { - title: ready ? t('common:privacy') : '', - link: `https://pp.eco/legal/${i18n.language}/privacy`, + title: t('privacy'), + link: `https://pp.eco/legal/${locale}/privacy`, }, terms: { - title: ready ? t('common:terms') : '', - link: `https://pp.eco/legal/${i18n.language}/terms`, + title: t('terms'), + link: `https://pp.eco/legal/${locale}/terms`, }, imprint: { - title: ready ? t('common:imprint') : '', - link: `https://pp.eco/legal/${i18n.language}/imprint`, + title: t('imprint'), + link: `https://pp.eco/legal/${locale}/imprint`, }, contact: { - title: ready ? t('common:contact') : '', + title: t('contact'), link: 'mailto:support@plant-for-the-planet.org', }, downloads: { - title: ready ? t('common:downloads') : '', - link: `https://a.plant-for-the-planet.org/${i18n.language}/download`, + title: t('downloads'), + link: `https://a.plant-for-the-planet.org/${locale}/download`, }, annualReports: { - title: ready ? t('common:annualReports') : '', + title: t('annualReports'), link: `https://a.plant-for-the-planet.org/annual-reports`, }, team: { - title: ready ? t('common:team') : '', + title: t('team'), link: `https://a.plant-for-the-planet.org/team`, }, jobs: { - title: ready ? t('common:jobs') : '', - link: `https://a.plant-for-the-planet.org/${i18n.language}/careers`, + title: t('jobs'), + link: `https://a.plant-for-the-planet.org/${locale}/careers`, }, supportUs: { - title: ready ? t('common:supportUs') : '', - link: `https://a.plant-for-the-planet.org/${i18n.language}/donation`, + title: t('supportUs'), + link: `https://a.plant-for-the-planet.org/${locale}/donation`, }, blogs: { - title: ready ? t('common:blogs') : '', - link: `https://blog.plant-for-the-planet.org/${i18n.language}`, + title: t('blogs'), + link: `https://blog.plant-for-the-planet.org/${locale}`, }, faqs: { - title: ready ? t('common:faqs') : '', - link: `https://a.plant-for-the-planet.org/${i18n.language}/faq`, + title: t('faqs'), + link: `https://a.plant-for-the-planet.org/${locale}/faq`, }, }; @@ -89,7 +90,7 @@ export default function Footer(): ReactElement | null { } }, []); - return ready ? ( + return (
@@ -104,7 +105,7 @@ export default function Footer(): ReactElement | null { >

- {`${getLanguageName(i18n.language)} · ${selectedCurrency}`} + {`${getLanguageName(locale)} · ${selectedCurrency}`}

@@ -426,9 +427,7 @@ export default function Footer(): ReactElement | null { target="_blank" rel="noopener noreferrer" > -

- {t('common:supportsUNEP')}{' '} -

+

{t('supportsUNEP')}

@@ -458,5 +457,5 @@ export default function Footer(): ReactElement | null { />
- ) : null; + ); } diff --git a/src/features/common/Layout/RedeemPopup/index.tsx b/src/features/common/Layout/RedeemPopup/index.tsx index 78fa1f5954..a21e88d12c 100644 --- a/src/features/common/Layout/RedeemPopup/index.tsx +++ b/src/features/common/Layout/RedeemPopup/index.tsx @@ -2,12 +2,12 @@ import React, { useEffect, useRef, useState } from 'react'; import CloseIcon from '../../../../../public/assets/images/icons/CloseIcon'; import styles from './RedeemPopup.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { useTenant } from '../TenantContext'; import { useUserProps } from '../UserPropsContext'; export default function RedeemPopup() { - const { t, ready } = useTranslation(['leaderboard']); + const t = useTranslations('Common'); const { tenantConfig } = useTenant(); const [showRedeemPopup, setShowRedeemPopup] = useState(false); @@ -55,7 +55,7 @@ export default function RedeemPopup() { isMountedRef.current = true; }, []); - return ready && showRedeemPopup ? ( + return showRedeemPopup ? (
- {t('common:redeemPopup')}{' '} - {t('common:login')} + {t('redeemPopup')} {t('login')}
) : null; diff --git a/src/features/common/Layout/UnderMaintenance/index.tsx b/src/features/common/Layout/UnderMaintenance/index.tsx index 2db02a3686..0485979195 100644 --- a/src/features/common/Layout/UnderMaintenance/index.tsx +++ b/src/features/common/Layout/UnderMaintenance/index.tsx @@ -1,10 +1,10 @@ import React, { ReactElement } from 'react'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import UnderMaintenanceImage from '../../../../../public/assets/images/icons/UnderMaintenance'; import styles from './UnderMaintenance.module.scss'; export default function UnderMaintenance(): ReactElement { - const { t } = useTranslation('common'); + const t = useTranslations('Common'); return (
diff --git a/src/features/common/Layout/UserLayout/UserLayout.tsx b/src/features/common/Layout/UserLayout/UserLayout.tsx index c858ce59bb..62e22a2613 100644 --- a/src/features/common/Layout/UserLayout/UserLayout.tsx +++ b/src/features/common/Layout/UserLayout/UserLayout.tsx @@ -7,7 +7,7 @@ import React, { useEffect, useState, } from 'react'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import MenuIcon from '../../../../../public/assets/images/icons/Sidebar/MenuIcon'; import DownArrow from '../../../../../public/assets/images/icons/DownArrow'; import BackArrow from '../../../../../public/assets/images/icons/headerIcons/BackArrow'; @@ -51,9 +51,9 @@ interface NavLinkType { } function LanguageSwitcher() { - const { i18n, ready } = useTranslation(['common', 'me']); + const locale = useLocale(); - const [language, setLanguage] = useState(i18n.language); + const [language, setLanguage] = useState(locale); const [openModal, setOpenModal] = useState(false); const [selectedCurrency, setSelectedCurrency] = useState('EUR'); const [selectedCountry, setSelectedCountry] = useState('DE'); @@ -83,7 +83,7 @@ function LanguageSwitcher() { } }, []); - return ready ? ( + return ( <>
@@ -93,9 +93,7 @@ function LanguageSwitcher() { setOpenModal(true); // open language and country change modal }} > - {`${ - i18n.language ? i18n.language.toUpperCase() : '' - } • ${selectedCurrency}`} + {`${locale ? locale.toUpperCase() : ''} • ${selectedCurrency}`}
- ) : ( - <> ); } interface NavLinkProps { @@ -221,7 +217,7 @@ function NavLink({ } const UserLayout: FC = ({ children }) => { - const { t } = useTranslation(['common', 'me']); + const t = useTranslations('Me'); // const { asPath } = useRouter(); const router = useRouter(); const { user, logoutUser, contextLoaded, isImpersonationModeOn } = @@ -232,7 +228,7 @@ const UserLayout: FC = ({ children }) => { const navLinks: NavLinkType[] = [ { key: 1, - title: t('me:profile'), + title: t('profile'), path: '/profile', icon: , // Localize with translations if you ever activate this!! @@ -253,30 +249,30 @@ const UserLayout: FC = ({ children }) => { }, { key: 2, - title: t('me:registerTrees'), + title: t('registerTrees'), path: '/profile/register-trees', icon: , }, { key: 3, - title: t('me:payments'), + title: t('payments'), // path: '/profile/history', icon: , - flag: t('me:new'), + flag: t('new'), // hideSubMenu: true, subMenu: [ { - title: t('me:history'), + title: t('history'), path: '/profile/history', // hideItem: true, }, { - title: t('me:recurrency'), + title: t('recurrency'), path: '/profile/recurrency', // hideItem: true, }, { - title: t('me:managePayouts.menuText'), + title: t('managePayouts.menuText'), path: '/profile/payouts', hideItem: !(user?.type === 'tpo'), }, @@ -305,28 +301,28 @@ const UserLayout: FC = ({ children }) => { // }, { key: 4, - title: t('treeMapper'), + title: t('treemapper'), // path: '/profile/treemapper', icon: , - flag: t('me:beta'), + flag: t('beta'), subMenu: [ { - title: t('me:plantLocations'), + title: t('plantLocations'), path: '/profile/treemapper', // hideItem: true, }, { - title: t('me:mySpecies'), + title: t('mySpecies'), path: '/profile/treemapper/my-species', hideItem: !(user?.type === 'tpo'), }, { - title: t('me:import'), + title: t('import'), path: '/profile/treemapper/import', hideItem: !(user?.type === 'tpo'), }, { - title: t('me:dataExplorer'), + title: t('dataExplorer'), path: '/profile/treemapper/data-explorer', hideItem: !(process.env.ENABLE_ANALYTICS && user?.type === 'tpo'), }, @@ -334,28 +330,28 @@ const UserLayout: FC = ({ children }) => { }, { key: 5, - title: t('me:projects'), + title: t('projects'), path: '/profile/projects', icon: , accessLevel: ['tpo'], }, { key: 6, - title: t('me:planetcash.menuText'), + title: t('planetcash.menuText'), icon: , - flag: t('me:new'), + flag: t('new'), subMenu: [ { - title: t('me:planetcash.submenuText'), + title: t('planetcash.submenuText'), path: '/profile/planetcash', }, { - title: t('me:bulkCodes'), + title: t('bulkCodes'), path: '/profile/bulk-codes', - flag: t('me:beta'), + flag: t('beta'), }, { - title: t('me:giftFund'), + title: t('giftFund'), path: '/profile/giftfund', //For an active PlanetCash account with an empty GiftFund array or if openUnits = 0 for all GiftFunds, it should be hidden hideItem: @@ -367,49 +363,49 @@ const UserLayout: FC = ({ children }) => { }, /* { key: 6, - title: t('me:bulkCodes'), + title: t('bulkCodes'), path: '/profile/bulk-codes', icon: , hasRelatedLinks: true, }, */ { key: 7, - title: t('me:widgets'), + title: t('widgets'), icon: , subMenu: [ { - title: t('me:embedWidget'), + title: t('embedWidget'), path: '/profile/widgets', // hideItem: true, }, { - title: t('me:donationLink'), + title: t('donationLink'), path: '/profile/donation-link', - flag: t('me:new'), + flag: t('new'), // hideItem: true, }, ], }, { key: 8, - title: t('me:settings'), + title: t('settings'), icon: , subMenu: [ { - title: t('me:editProfile'), + title: t('editProfile'), path: '/profile/edit', }, { - title: t('me:switchUser'), + title: t('switchUser'), path: '/profile/impersonate-user', hideItem: isImpersonationModeOn || !user?.allowedToSwitch, }, { - title: t('me:apiKey'), + title: t('apiKey'), path: '/profile/api-key', }, { - title: t('me:deleteProfile'), + title: t('deleteProfile'), path: '/profile/delete-account', }, // Localize with translations if you ever activate this!! diff --git a/src/features/common/RedeemCode/EnterRedeemCode.tsx b/src/features/common/RedeemCode/EnterRedeemCode.tsx index 408ca6361f..162375d063 100644 --- a/src/features/common/RedeemCode/EnterRedeemCode.tsx +++ b/src/features/common/RedeemCode/EnterRedeemCode.tsx @@ -1,5 +1,5 @@ import TextField from '@mui/material/TextField'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { Controller, useForm } from 'react-hook-form'; import { ReactElement } from 'react'; import CancelIcon from '../../../../public/assets/images/icons/CancelIcon'; @@ -29,7 +29,7 @@ export const EnterRedeemCode = ({ handleSubmit, formState: { errors }, } = useForm({ mode: 'onBlur' }); - const { t } = useTranslation(['redeem']); + const t = useTranslations('Redeem'); return (
@@ -37,13 +37,13 @@ export const EnterRedeemCode = ({
-
{t('redeem:redeem')}
-
{t('redeem:redeemDescription')}
+
{t('redeem')}
+
{t('redeemDescription')}
( { @@ -68,7 +68,7 @@ export const EnterRedeemCode = ({ disabled={isLoading} onClick={handleSubmit(redeemCode)} > - {isLoading ? t('redeem:redeemingCode') : t('redeem:redeemCode')} + {isLoading ? t('redeemingCode') : t('redeemCode')}
diff --git a/src/features/common/RedeemCode/RedeemFailed.tsx b/src/features/common/RedeemCode/RedeemFailed.tsx index 87f41dfd36..d6813ef093 100644 --- a/src/features/common/RedeemCode/RedeemFailed.tsx +++ b/src/features/common/RedeemCode/RedeemFailed.tsx @@ -1,7 +1,7 @@ import { ReactElement } from 'react'; import CancelIcon from '../../../../public/assets/images/icons/CancelIcon'; import styles from '../../../../src/features/common/RedeemCode/style/RedeemModal.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import Button from '@mui/material/Button'; import { SerializedError } from '@planet-sdk/common'; @@ -18,7 +18,7 @@ export const RedeemFailed = ({ redeemAnotherCode, closeRedeem, }: RedeemFailedProps): ReactElement => { - const { t } = useTranslation(['redeem']); + const t = useTranslations('Redeem'); return (
@@ -34,7 +34,7 @@ export const RedeemFailed = ({
diff --git a/src/features/common/RedeemCode/SuccessfullyRedeemed.tsx b/src/features/common/RedeemCode/SuccessfullyRedeemed.tsx index 7747f86450..b09330c8c6 100644 --- a/src/features/common/RedeemCode/SuccessfullyRedeemed.tsx +++ b/src/features/common/RedeemCode/SuccessfullyRedeemed.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { ReactElement } from 'react'; import { RedeemedCodeData } from '../types/redeem'; import styles from '../../../../src/features/common/RedeemCode/style/RedeemModal.module.scss'; @@ -17,7 +17,9 @@ export const SuccessfullyRedeemed = ({ redeemAnotherCode, closeRedeem, }: SuccessfullyRedeemedProps): ReactElement => { - const { t, i18n } = useTranslation(['common', 'redeem']); + const tCommon = useTranslations('Common'); + const tRedeem = useTranslations('Redeem'); + const locale = useLocale(); return (
@@ -28,21 +30,21 @@ export const SuccessfullyRedeemed = ({
- {getFormattedNumber(i18n.language, Number(redeemedCodeData?.units))} + {getFormattedNumber(locale, Number(redeemedCodeData?.units))} - {t('common:tree', { + {tCommon('tree', { count: Number(redeemedCodeData?.units), })}
- {t('redeem:successfullyRedeemed')} + {tRedeem('successfullyRedeemed')}
diff --git a/src/features/common/TreeCounter/TreeCounter.tsx b/src/features/common/TreeCounter/TreeCounter.tsx index c32cd1c699..1182da7491 100644 --- a/src/features/common/TreeCounter/TreeCounter.tsx +++ b/src/features/common/TreeCounter/TreeCounter.tsx @@ -3,7 +3,7 @@ import MuiCircularProgress, { } from '@mui/material/CircularProgress'; import React, { useEffect, useState } from 'react'; import treeCounterStyles from './TreeCounter.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { localizedAbbreviatedNumber } from '../../../utils/getFormattedNumber'; import { styled } from '@mui/material/styles'; import { PlantedTressBlackSvg } from '../../../../public/assets/images/ProfilePageIcons'; @@ -72,7 +72,8 @@ export default function TpoProfile(props: TpoProfileInterface) { width: window.innerWidth, height: window.innerHeight, }); - const { t, i18n, ready } = useTranslation(['me']); + const t = useTranslations('Me'); + const locale = useLocale(); const { tenantConfig } = useTenant(); const _isTreeTarget = () => { @@ -130,7 +131,7 @@ export default function TpoProfile(props: TpoProfileInterface) { }); if (_tenantHasHomeTreeCounter) setIsHomeTreeCounter(true); }, [isHomeTreeCounter]); - return ready ? ( + return (
{isHomeTreeCounter ? ( @@ -159,14 +160,14 @@ export default function TpoProfile(props: TpoProfileInterface) {
{_isTreeTarget() ? ( - t('me:treesOfTrees', { + t('treesOfTrees', { count1: localizedAbbreviatedNumber( - i18n.language, + locale, Number(props.planted - props.restoredAreaUnit), 2 ), count2: localizedAbbreviatedNumber( - i18n.language, + locale, Number(props.target), 1 ), @@ -174,7 +175,7 @@ export default function TpoProfile(props: TpoProfileInterface) { ) : (
{localizedAbbreviatedNumber( - i18n.language, + locale, Number(props.planted - props.restoredAreaUnit), 2 )} @@ -182,10 +183,10 @@ export default function TpoProfile(props: TpoProfileInterface) { )}
- {t('me:treesPlanted')} + {t('treesPlanted')}
)} - ) : null; + ); } diff --git a/src/features/common/TreeCounter/legacy/TreeCounterData.tsx b/src/features/common/TreeCounter/legacy/TreeCounterData.tsx index 6cfd96d7d1..88fa2b7d85 100644 --- a/src/features/common/TreeCounter/legacy/TreeCounterData.tsx +++ b/src/features/common/TreeCounter/legacy/TreeCounterData.tsx @@ -1,5 +1,5 @@ import { localizedAbbreviatedNumber } from '../../../../utils/getFormattedNumber'; -import { useTranslation } from 'next-i18next'; +import { useLocale } from 'next-intl'; import treeCounterStyles from '../TreeCounter.module.scss'; interface HomeTreeCounterProps { @@ -8,17 +8,13 @@ interface HomeTreeCounterProps { } const HomeTreeCounter = ({ planted, target }: HomeTreeCounterProps) => { - const { i18n } = useTranslation(['me']); + const locale = useLocale(); return ( <>
-
- {localizedAbbreviatedNumber(i18n.language, Number(planted), 1)} -
+
{localizedAbbreviatedNumber(locale, Number(planted), 1)}
Trees Planted
-
- {localizedAbbreviatedNumber(i18n.language, Number(target), 1)} -
+
{localizedAbbreviatedNumber(locale, Number(target), 1)}
Target
diff --git a/src/features/common/VerifyEmail/VerifyEmail.tsx b/src/features/common/VerifyEmail/VerifyEmail.tsx index 7dd93ef891..b5c7df124d 100644 --- a/src/features/common/VerifyEmail/VerifyEmail.tsx +++ b/src/features/common/VerifyEmail/VerifyEmail.tsx @@ -1,17 +1,17 @@ import React, { ReactElement, useContext } from 'react'; import styles from './VerifyEmail.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import VerifyEmailIcon from '../../../../public/assets/images/icons/VerifyEmail'; import { useUserProps } from '../Layout/UserPropsContext'; import themeProperties from '../../../theme/themeProperties'; import { ThemeContext } from '../../../theme/themeContext'; function VerifyEmailComponent(): ReactElement { - const { t, ready } = useTranslation(['common']); + const t = useTranslations('Common'); const { loginWithRedirect } = useUserProps(); const { theme } = useContext(ThemeContext); - return ready ? ( + return (
-

- {t('common:verifyEmailHeader')} -

- {t('common:verifyEmailText')} +

{t('verifyEmailHeader')}

+ {t('verifyEmailText')} - {t('common:verifyEmailInfo')} + {t('verifyEmailInfo')}
- ) : ( - <> ); } diff --git a/src/features/common/types/project.d.ts b/src/features/common/types/project.d.ts index ee4122aa81..d4d918e64c 100644 --- a/src/features/common/types/project.d.ts +++ b/src/features/common/types/project.d.ts @@ -227,7 +227,6 @@ interface EditSiteProps { siteDetails: SiteDetails; status: Option[]; geoJsonProp: GeoJson | null; - ready: boolean; projectGUID: string; setSiteList: SetState; token: string; diff --git a/src/features/projects/components/PlantLocation/PlantLocationDetails.tsx b/src/features/projects/components/PlantLocation/PlantLocationDetails.tsx index 58688a6fa9..5020bc6eb3 100644 --- a/src/features/projects/components/PlantLocation/PlantLocationDetails.tsx +++ b/src/features/projects/components/PlantLocation/PlantLocationDetails.tsx @@ -1,5 +1,5 @@ import React, { ReactElement } from 'react'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import styles from '../../styles/PlantLocation.module.scss'; import { localizedAbbreviatedNumber } from '../../../../utils/getFormattedNumber'; import * as turf from '@turf/turf'; @@ -42,7 +42,8 @@ export default function PlantLocationDetails({ setSamplePlantLocation, setHoveredPl, } = useProjectProps(); - const { t, i18n } = useTranslation(['maps']); + const t = useTranslations('Maps'); + const locale = useLocale(); const [treeCount, setTreeCount] = React.useState(1); const [plantationArea, setPlantationArea] = React.useState(0); const [sampleTreeImages, setSampleTreeImages] = React.useState( @@ -150,16 +151,12 @@ export default function PlantLocationDetails({ {plantLocation.type === 'multi' && ( <> - {localizedAbbreviatedNumber( - i18n.language, - Number(treeCount), - 1 - )}{' '} + {localizedAbbreviatedNumber(locale, Number(treeCount), 1)}{' '} {t('trees')} {' '} ( {localizedAbbreviatedNumber( - i18n.language, + locale, Number(plantationArea), 3 )}{' '} @@ -240,7 +237,7 @@ export default function PlantLocationDetails({
{localizedAbbreviatedNumber( - i18n.language, + locale, Number(treeCount / plantationArea), 1 )}{' '} @@ -353,7 +350,7 @@ export default function PlantLocationDetails({ rel="noopener noreferrer" target="_blank" > - {t('treemapper:treeMapper')} + {t('treeMapper')}
diff --git a/src/features/projects/components/maps/PlantLocations.tsx b/src/features/projects/components/maps/PlantLocations.tsx index c929bca7a6..ea785aeb18 100644 --- a/src/features/projects/components/maps/PlantLocations.tsx +++ b/src/features/projects/components/maps/PlantLocations.tsx @@ -5,7 +5,7 @@ import { useProjectProps } from '../../../common/Layout/ProjectPropsContext'; import styles from '../../styles/PlantLocation.module.scss'; import * as turf from '@turf/turf'; import { localizedAbbreviatedNumber } from '../../../../utils/getFormattedNumber'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { Feature, Point, Polygon } from 'geojson'; import { PlantLocation, @@ -27,7 +27,8 @@ export default function PlantLocations(): ReactElement { samplePlantLocation, } = useProjectProps(); - const { i18n, t } = useTranslation(['maps', 'common']); + const t = useTranslations('Maps'); + const locale = useLocale(); const openPl = (pl: PlantLocationSingle | SamplePlantLocation) => { switch (pl.type) { @@ -106,7 +107,7 @@ export default function PlantLocations(): ReactElement { return t('yesterday'); } else if (differenceInDays <= 10) { return t('daysAgo', { - days: localizedAbbreviatedNumber(i18n.language, differenceInDays, 0), + days: localizedAbbreviatedNumber(locale, differenceInDays, 0), }); } else { return null; diff --git a/src/features/projects/components/maps/ProjectTabs.tsx b/src/features/projects/components/maps/ProjectTabs.tsx index 046a19b182..6a178059c6 100644 --- a/src/features/projects/components/maps/ProjectTabs.tsx +++ b/src/features/projects/components/maps/ProjectTabs.tsx @@ -1,6 +1,6 @@ import React, { ReactElement } from 'react'; import { useRouter } from 'next/router'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import LocationIcon from '../../../../../public/assets/images/icons/LocationIcon'; import ResearchIcon from '../../../../../public/assets/images/icons/ResearchIcon'; import SatelliteIcon from '../../../../../public/assets/images/icons/SatelliteIcon'; @@ -11,7 +11,7 @@ import { ParamsContext } from '../../../common/Layout/QueryParamsContext'; export default function ProjectTabs(): ReactElement { const { embed, showProjectDetails } = React.useContext(ParamsContext); const { pathname } = useRouter(); - const { t } = useTranslation(['maps']); + const t = useTranslations('Maps'); const { selectedMode, setSelectedMode, rasterData } = useProjectProps(); const containerClasses = @@ -40,7 +40,7 @@ export default function ProjectTabs(): ReactElement { className={`${styles.options} ${styles.compact}`} > {' '} -

{t('maps:fieldData')}

+

{t('fieldData')}

{ @@ -59,8 +59,8 @@ export default function ProjectTabs(): ReactElement { > {' '}

- {t('maps:timeTravel')} - {t('maps:beta')} + {t('timeTravel')} + {t('beta')}

{/* Raster data for multipolygons is not supported and is returned with an error for such projects. In this case rasterData.evi will not exist*/} @@ -84,8 +84,8 @@ export default function ProjectTabs(): ReactElement { color={selectedMode === 'vegetation' ? '#fff' : null} />{' '}

- {t('maps:vegetationChange')} - {t('maps:beta')} + {t('vegetationChange')} + {t('beta')}

) : null} diff --git a/src/features/projects/components/projectDetails/ProjectContactDetails.tsx b/src/features/projects/components/projectDetails/ProjectContactDetails.tsx index cdd747a20d..9ed2003b5d 100644 --- a/src/features/projects/components/projectDetails/ProjectContactDetails.tsx +++ b/src/features/projects/components/projectDetails/ProjectContactDetails.tsx @@ -1,7 +1,7 @@ import Link from 'next/link'; import React, { ReactElement } from 'react'; import styles from './../../styles/ProjectDetails.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import BlackTree from '../../../../../public/assets/images/icons/project/BlackTree'; import Email from '../../../../../public/assets/images/icons/project/Email'; import Location from '../../../../../public/assets/images/icons/project/Location'; @@ -17,7 +17,8 @@ interface Props { } function ProjectContactDetails({ project }: Props): ReactElement | null { - const { t, ready } = useTranslation(['donate']); + const t = useTranslations('Donate'); + const tCountry = useTranslations('Country'); const { embed } = React.useContext(ParamsContext); const contactAddress = project.tpo && project.tpo.address @@ -27,27 +28,19 @@ function ProjectContactDetails({ project }: Props): ReactElement | null { (project.tpo.address.city ? project.tpo.address.city + ', ' : '') + (project.tpo.address.zipCode ? project.tpo.address.zipCode + ' ' : '') + (project.tpo.address.country - ? ready - ? t('country:' + project.tpo.address.country.toLowerCase()) - : '' + ? tCountry(project.tpo.address.country.toLowerCase()) : '') - : ready - ? t('donate:unavailable') - : ''; - + : t('unavailable'); const projectWebsiteLink = project.website ? project.website.includes('http') || project.website.includes('https') ? project.website : `http://${project.website}` - : ready - ? t('donate:unavailable') - : ''; - + : t('unavailable'); const contactDetails = [ { id: 1, icon: , - text: ready ? t('donate:viewProfile') : '', + text: t('viewProfile'), link: project.tpo.slug, }, { @@ -58,9 +51,7 @@ function ProjectContactDetails({ project }: Props): ReactElement | null { .replace('http://', '') .replace('https://', '') .split(/[/?#]/)[0] - : ready - ? t('donate:unavailable') - : '', + : t('unavailable'), link: projectWebsiteLink, }, { @@ -75,19 +66,15 @@ function ProjectContactDetails({ project }: Props): ReactElement | null { id: 4, icon: , text: - project.tpo && project.tpo.email - ? project.tpo.email - : ready - ? t('donate:unavailable') - : '', + project.tpo && project.tpo.email ? project.tpo.email : t('unavailable'), link: project.tpo && project.tpo.email ? `mailto:${project.tpo.email}` : null, }, ]; - return ready ? ( + return (
-
{t('donate:contactDetails')}
+
{t('contactDetails')}
- ) : null; + ); } export default ProjectContactDetails; diff --git a/src/features/projects/components/projectDetails/ProjectInfo.tsx b/src/features/projects/components/projectDetails/ProjectInfo.tsx index d4f415cbd5..66a9996be9 100644 --- a/src/features/projects/components/projectDetails/ProjectInfo.tsx +++ b/src/features/projects/components/projectDetails/ProjectInfo.tsx @@ -1,6 +1,6 @@ import React, { ReactElement } from 'react'; import styles from './../../styles/ProjectDetails.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { getPDFFile } from '../../../../utils/getImageURL'; import getFormatedCurrency from '../../../../utils/countryCurrency/getFormattedCurrency'; import formatDate from '../../../../utils/countryCurrency/getFormattedDate'; @@ -15,59 +15,60 @@ interface Props { } function ProjectInfo({ project }: Props): ReactElement { - const { t, i18n, ready } = useTranslation(['manageProjects', 'common']); + const tCommon = useTranslations('Common'); + const tManageProjects = useTranslations('ManageProjects'); + const locale = useLocale(); const seasons = [ - { id: 0, title: ready ? t('common:january') : '' }, - { id: 1, title: ready ? t('common:february') : '' }, - { id: 2, title: ready ? t('common:march') : '' }, - { id: 3, title: ready ? t('common:april') : '' }, - { id: 4, title: ready ? t('common:may') : '' }, - { id: 5, title: ready ? t('common:june') : '' }, - { id: 6, title: ready ? t('common:july') : '' }, - { id: 7, title: ready ? t('common:august') : '' }, - { id: 8, title: ready ? t('common:september') : '' }, - { id: 9, title: ready ? t('common:october') : '' }, - { id: 10, title: ready ? t('common:november') : '' }, - { id: 11, title: ready ? t('common:december') : '' }, + { id: 0, title: tCommon('january') }, + { id: 1, title: tCommon('february') }, + { id: 2, title: tCommon('march') }, + { id: 3, title: tCommon('april') }, + { id: 4, title: tCommon('may') }, + { id: 5, title: tCommon('june') }, + { id: 6, title: tCommon('july') }, + { id: 7, title: tCommon('august') }, + { id: 8, title: tCommon('september') }, + { id: 9, title: tCommon('october') }, + { id: 10, title: tCommon('november') }, + { id: 11, title: tCommon('december') }, ]; const siteOwners = [ { id: 1, - title: ready ? t('manageProjects:siteOwnerPrivate') : '', + title: tManageProjects('siteOwnerPrivate'), value: 'private', }, { id: 2, - title: ready ? t('manageProjects:siteOwnerPublic') : '', + title: tManageProjects('siteOwnerPublic'), value: 'public-property', }, { id: 3, - title: ready ? t('manageProjects:siteOwnerSmallHolding') : '', + title: tManageProjects('siteOwnerSmallHolding'), value: 'smallholding', }, { id: 4, - title: ready ? t('manageProjects:siteOwnerCommunal') : '', + title: tManageProjects('siteOwnerCommunal'), value: 'communal-land', }, { id: 5, - title: ready ? t('manageProjects:siteOwnerOwned') : '', + title: tManageProjects('siteOwnerOwned'), value: 'owned-by-owner', }, { id: 6, - title: ready ? t('manageProjects:siteOwnerOther') : '', + title: tManageProjects('siteOwnerOther'), value: 'other', }, ]; const [ownerTypes, setOwnerTypes] = React.useState([]); React.useEffect(() => { if ( - ready && project.purpose === 'trees' && project.metadata.siteOwnerType && project.metadata.siteOwnerType.length > 0 @@ -86,11 +87,10 @@ function ProjectInfo({ project }: Props): ReactElement { setOwnerTypes(updatedSiteOwners); } - }, [ready, i18n.language]); + }, [locale]); React.useEffect(() => { if ( - ready && project.purpose === 'conservation' && project.metadata.landOwnershipType && project.metadata.landOwnershipType.length > 0 @@ -109,7 +109,7 @@ function ProjectInfo({ project }: Props): ReactElement { setOwnerTypes(updatedSiteOwners); } - }, [ready, i18n.language]); + }, [locale]); const expenseAmount = project.expenses.map((expense) => expense.amount); const calculatePercentage = (amount: number) => { @@ -134,7 +134,7 @@ function ProjectInfo({ project }: Props): ReactElement { return newDateArr.join('-'); }; - return ready ? ( + return (
{project.purpose === 'trees' && @@ -142,7 +142,7 @@ function ProjectInfo({ project }: Props): ReactElement { project.metadata.yearAbandoned !== 0 && (
- {t('manageProjects:abandonment')} + {tManageProjects('abandonment')}
-

{t('manageProjects:yearAbandonedInfo')}

+

{tManageProjects('yearAbandonedInfo')}

- {t('common:approx')} {project.metadata.yearAbandoned} + {tCommon('approx')} {project.metadata.yearAbandoned}
)} @@ -171,7 +171,7 @@ function ProjectInfo({ project }: Props): ReactElement { project.metadata.firstTreePlanted !== null && (
- {t('manageProjects:labelRestorationStarted')} + {tManageProjects('labelRestorationStarted')}
{formatDate( @@ -189,15 +189,15 @@ function ProjectInfo({ project }: Props): ReactElement { project.metadata.plantingDensity !== null && (
- {t('manageProjects:plantingDensity')} + {tManageProjects('plantingDensity')}
{project.metadata.plantingDensity} {project.metadata.maxPlantingDensity !== null - ? `-${project.metadata.maxPlantingDensity} ${t( - 'manageProjects:treePerHa' + ? `-${project.metadata.maxPlantingDensity} ${tManageProjects( + 'treePerHa' )}` - : ` ${t('manageProjects:treePerHa')}`} + : ` ${tManageProjects('treePerHa')}`}
)} @@ -206,7 +206,7 @@ function ProjectInfo({ project }: Props): ReactElement { project.metadata.employeesCount !== 0 && (
- {t('manageProjects:employees')} + {tManageProjects('employees')}
{project.metadata.employeesCount} @@ -220,7 +220,7 @@ function ProjectInfo({ project }: Props): ReactElement { project.metadata.activitySeasons.length > 0 && (
- {t('manageProjects:protectionSeasons')} + {tManageProjects('protectionSeasons')}
{project.metadata.activitySeasons.map( @@ -229,7 +229,7 @@ function ProjectInfo({ project }: Props): ReactElement { {seasons[season - 1].title} {index === activitySeasons.length - 2 ? ( - <> {t('manageProjects:and')} + <> {tManageProjects('and')} ) : index === activitySeasons.length - 1 ? ( '.' ) : ( @@ -248,7 +248,7 @@ function ProjectInfo({ project }: Props): ReactElement { project.metadata.plantingSeasons.length > 0 && (
- {t('manageProjects:labelRestorationSeasons')} + {tManageProjects('labelRestorationSeasons')}
{project.metadata.plantingSeasons.map( @@ -257,7 +257,7 @@ function ProjectInfo({ project }: Props): ReactElement { {seasons[season - 1].title} {index === plantingSeasons.length - 2 ? ( - <> {t('manageProjects:and')} + <> {tManageProjects('and')} ) : index === plantingSeasons.length - 1 ? ( '.' ) : ( @@ -275,12 +275,12 @@ function ProjectInfo({ project }: Props): ReactElement { project.metadata.mainInterventions.length > 0 && (
- {t('manageProjects:labelMainInterventions')} + {tManageProjects('labelMainInterventions')}
{project.metadata.mainInterventions .map((intervention) => - t(`manageProjects:interventionTypes.${intervention}`) + tManageProjects(`interventionTypes.${intervention}`) ) .join(', ')}
@@ -290,7 +290,7 @@ function ProjectInfo({ project }: Props): ReactElement { {project.metadata.mainChallenge !== null && (
- {t('manageProjects:mainChallenge')} + {tManageProjects('mainChallenge')}
{project.metadata.mainChallenge} @@ -303,7 +303,7 @@ function ProjectInfo({ project }: Props): ReactElement {
- {t('manageProjects:siteOwnership')} + {tManageProjects('siteOwnership')}
{ownerTypes.map((ownerType, index) => { @@ -311,7 +311,7 @@ function ProjectInfo({ project }: Props): ReactElement { {ownerType} {index === ownerTypes.length - 2 ? ( - <> {t('manageProjects:and')} + <> {tManageProjects('and')} ) : index === ownerTypes.length - 1 ? ( '.' ) : ( @@ -329,9 +329,9 @@ function ProjectInfo({ project }: Props): ReactElement { {project.metadata.acquisitionYear !== null && ( <> {project.metadata.siteOwnerName === null ? ( - <> {t('manageProjects:Since')} + <> {tManageProjects('Since')} ) : ( - <> {t('manageProjects:since')} + <> {tManageProjects('since')} )}{' '} {project.metadata.acquisitionYear} @@ -349,7 +349,7 @@ function ProjectInfo({ project }: Props): ReactElement {
- {t('manageProjects:siteOwnership')} + {tManageProjects('siteOwnership')}
{ownerTypes.map((ownerType, index) => { @@ -357,7 +357,7 @@ function ProjectInfo({ project }: Props): ReactElement { {ownerType} {index === ownerTypes.length - 2 ? ( - <> {t('manageProjects:and')} + <> {tManageProjects('and')} ) : index === ownerTypes.length - 1 ? ( '.' ) : ( @@ -374,9 +374,9 @@ function ProjectInfo({ project }: Props): ReactElement { {project.metadata.acquisitionYear !== null && ( <> {project.metadata.siteOwnerName ? ( - <> {t('manageProjects:Since')} + <> {tManageProjects('Since')} ) : ( - <> {t('manageProjects:since')} + <> {tManageProjects('since')} )}{' '} {project.metadata.acquisitionYear} @@ -393,7 +393,7 @@ function ProjectInfo({ project }: Props): ReactElement { project.metadata.degradationCause !== null && (
- {t('manageProjects:causeOfDegradation')} + {tManageProjects('causeOfDegradation')}
{project.metadata.degradationCause} @@ -404,7 +404,7 @@ function ProjectInfo({ project }: Props): ReactElement { {project.metadata.motivation !== null && (
- {t('manageProjects:whyThisSite')} + {tManageProjects('whyThisSite')}
{project.metadata.motivation}
@@ -413,7 +413,7 @@ function ProjectInfo({ project }: Props): ReactElement { {project.metadata.longTermPlan !== null && (
- {t('manageProjects:longTermProtection')} + {tManageProjects('longTermProtection')}
{project.metadata.longTermPlan}
@@ -422,7 +422,7 @@ function ProjectInfo({ project }: Props): ReactElement { {project.certificates.length > 0 && (
- {t('manageProjects:externalCertifications')} + {tManageProjects('externalCertifications')}
{project.certificates.map((certificate) => { @@ -435,7 +435,7 @@ function ProjectInfo({ project }: Props): ReactElement { rel="noopener noreferrer" href={getPDFFile('projectCertificate', certificate.pdf)} > - {t('common:view')} + {tCommon('view')}
); @@ -446,7 +446,7 @@ function ProjectInfo({ project }: Props): ReactElement { {project.expenses.length > 0 && (
- {t('manageProjects:projectSpendingFinancial')} + {tManageProjects('projectSpendingFinancial')}
{project.expenses.map((expense) => { @@ -477,7 +477,7 @@ function ProjectInfo({ project }: Props): ReactElement { >
- {getFormatedCurrency(i18n.language, 'EUR', expense.amount)} + {getFormatedCurrency(locale, 'EUR', expense.amount)} - {t('common:view')} + {tCommon('view')}
@@ -496,8 +496,6 @@ function ProjectInfo({ project }: Props): ReactElement {
)}
- ) : ( - <> ); } diff --git a/src/features/projects/components/projects/Filters.tsx b/src/features/projects/components/projects/Filters.tsx index c9ac0040e3..6bcd2f0269 100644 --- a/src/features/projects/components/projects/Filters.tsx +++ b/src/features/projects/components/projects/Filters.tsx @@ -1,6 +1,6 @@ import React, { ReactElement } from 'react'; import styles from '../../styles/Filters.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { FormControlLabel, FormGroup } from '@mui/material'; import Switch from '../../../common/InputTypes/ToggleSwitch'; import { useProjectProps } from '../../../common/Layout/ProjectPropsContext'; @@ -8,7 +8,7 @@ import { TreeProjectClassification } from '@planet-sdk/common/build/types/projec import { useTenant } from '../../../common/Layout/TenantContext'; export default function Filters(): ReactElement { - const { t, ready } = useTranslation(['donate']); + const t = useTranslations('Donate'); const { tenantConfig } = useTenant(); const { projects, setFilteredProjects, filtersOpen, setFilterOpen } = @@ -82,7 +82,7 @@ export default function Filters(): ReactElement { setType({ ...type, [event.target.name]: event.target.checked }); }; - return tenantConfig?.tenantName === 'salesforce' && ready ? ( + return tenantConfig?.tenantName === 'salesforce' ? (
-
{t('donate:filters')}
+
{t('filters')}
*/} -
{t('donate:projectType')}
+
{t('projectType')}
{filters && filters.map((filter, index: number) => { @@ -147,7 +147,7 @@ export default function Filters(): ReactElement { name={filter} /> } - label={t(`donate:${filter}`)} + label={t(filter)} /> {/*
diff --git a/src/features/projects/screens/SingleProjectDetails.tsx b/src/features/projects/screens/SingleProjectDetails.tsx index a0da7618b2..5c877d6e5c 100644 --- a/src/features/projects/screens/SingleProjectDetails.tsx +++ b/src/features/projects/screens/SingleProjectDetails.tsx @@ -7,7 +7,7 @@ import ReactPlayer from 'react-player/lazy'; import ReadMoreReact from 'read-more-react'; import BackButton from '../../../../public/assets/images/icons/BackButton'; import ProjectContactDetails from '../components/projectDetails/ProjectContactDetails'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import CancelIcon from '../../../../public/assets/images/icons/CancelIcon'; import ExpandIcon from '../../../../public/assets/images/icons/ExpandIcon'; import ProjectInfo from '../components/projectDetails/ProjectInfo'; @@ -34,7 +34,8 @@ const ImageSlider = dynamic( function SingleProjectDetails(): ReactElement { const router = useRouter(); - const { t, ready } = useTranslation(['donate', 'common', 'country', 'maps']); + const tDonate = useTranslations('Donate'); + const tMaps = useTranslations('Maps'); const { project, geoJson, @@ -111,7 +112,7 @@ function SingleProjectDetails(): ReactElement { } }; - return ready && project !== null ? ( + return project !== null ? ( <> {/* */} {geoJson && } @@ -130,8 +131,8 @@ function SingleProjectDetails(): ReactElement { className="toggleButton" > {hideProjectContainer - ? t('maps:showProjectDetails') - : t('maps:hideProjectDetails')} + ? tMaps('showProjectDetails') + : tMaps('hideProjectDetails')} )}
)}
-
- {t('donate:aboutProject')} -
+
{tDonate('aboutProject')}
diff --git a/src/features/user/Account/CancelModal.tsx b/src/features/user/Account/CancelModal.tsx index f3602afe3a..d14f5d030b 100644 --- a/src/features/user/Account/CancelModal.tsx +++ b/src/features/user/Account/CancelModal.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { ThemeContext } from '../../../theme/themeContext'; import styles from './AccountHistory.module.scss'; -import { useTranslation } from 'react-i18next'; +import { useTranslations } from 'next-intl'; import { putAuthenticatedRequest } from '../../../utils/apiRequests/api'; import { useUserProps } from '../../common/Layout/UserPropsContext'; import GreenRadio from '../../common/InputTypes/GreenRadio'; @@ -59,7 +59,7 @@ export const CancelModal = ({ const [showCalender, setshowCalender] = React.useState(false); const [date, setdate] = React.useState(new Date()); const [disabled, setDisabled] = React.useState(false); - const { t } = useTranslation(['me']); + const t = useTranslations('Me'); const { setErrors } = React.useContext(ErrorHandlingContext); React.useEffect(() => { @@ -119,7 +119,7 @@ export const CancelModal = ({ width: '100%', }} > -

{t('me:cancelDonationConfirmation')}

+

{t('cancelDonationConfirmation')}

@@ -158,7 +158,7 @@ export const CancelModal = ({ key={1} value={'cancelImmediately'} control={} - label={t('me:cancelImmediately')} + label={t('cancelImmediately')} /> {/* } - label={t('me:cancelOnSelectedDate')} + label={t('cancelOnSelectedDate')} /> {showCalender ? ( diff --git a/src/features/user/Account/EditModal.tsx b/src/features/user/Account/EditModal.tsx index 9a2635b6f1..e2db5104bf 100644 --- a/src/features/user/Account/EditModal.tsx +++ b/src/features/user/Account/EditModal.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { useTranslation } from 'react-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { putAuthenticatedRequest } from '../../../utils/apiRequests/api'; import { Controller, useForm } from 'react-hook-form'; import { useUserProps } from '../../common/Layout/UserPropsContext'; @@ -73,7 +73,8 @@ export const EditModal = ({ const { tenantConfig } = useTenant(); const [userLang, setUserLang] = React.useState('en'); const [disabled, setDisabled] = React.useState(false); - const { t, i18n } = useTranslation(['me']); + const t = useTranslations('Me'); + const locale = useLocale(); const { handleSubmit, control, @@ -172,7 +173,7 @@ export const EditModal = ({ }} >

- {t('me:editDonationConfirmation')} + {t('editDonationConfirmation')}

-

{t('me:editDonationDescription')}

+

{t('editDonationDescription')}

@@ -210,7 +211,7 @@ export const EditModal = ({ startAdornment: ( {getCurrencySymbolByCode( - i18n.language, + locale, record?.currency, record?.amount )} @@ -245,7 +246,7 @@ export const EditModal = ({ value={value} onBlur={onBlur} getOptionLabel={(option) => { - return t(`${option.toLowerCase()}`); + return t(option.toLowerCase()); }} renderInput={(params) => ( ( ( @@ -310,7 +311,7 @@ export const EditModal = ({ {errors.currentPeriodEnd && ( - {t('donate:dateRequired')} + {t('dateRequired')} )}
@@ -320,7 +321,7 @@ export const EditModal = ({ )}
-

{record?.method === 'paypal' ? t('me:noteToWait') : []}

+

{record?.method === 'paypal' ? t('noteToWait') : []}

-

{t('me:filters')}

+

{t('filters')}

{accountingFilters && Object.entries(accountingFilters).map((item) => { diff --git a/src/features/user/Account/PauseModal.tsx b/src/features/user/Account/PauseModal.tsx index b20396f922..16c8c13c78 100644 --- a/src/features/user/Account/PauseModal.tsx +++ b/src/features/user/Account/PauseModal.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { ThemeContext } from '../../../theme/themeContext'; import styles from './AccountHistory.module.scss'; -import { useTranslation } from 'react-i18next'; +import { useTranslations } from 'next-intl'; import { putAuthenticatedRequest } from '../../../utils/apiRequests/api'; import { useUserProps } from '../../common/Layout/UserPropsContext'; import GreenRadio from '../../common/InputTypes/GreenRadio'; @@ -61,7 +61,7 @@ export const PauseModal = ({ ); const [disabled, setDisabled] = React.useState(false); - const { t } = useTranslation(['me']); + const t = useTranslations('Me'); const { setErrors } = React.useContext(ErrorHandlingContext); React.useEffect(() => { @@ -126,7 +126,7 @@ export const PauseModal = ({ width: '100%', }} > -

{t('me:pauseDonationConfirmation')}

+

{t('pauseDonationConfirmation')}

-

{t('me:pauseDonationDescription')}

+

{t('pauseDonationDescription')}

@@ -166,13 +166,13 @@ export const PauseModal = ({ key={2} value={'pauseUntilResume'} control={} - label={t('me:pauseUntilResume')} + label={t('pauseUntilResume')} /> } - label={t('me:pauseUntilDate')} + label={t('pauseUntilDate')} /> {showCalender ? ( diff --git a/src/features/user/Account/ReactivateModal.tsx b/src/features/user/Account/ReactivateModal.tsx index a7eceb7ef4..e640ef8a44 100644 --- a/src/features/user/Account/ReactivateModal.tsx +++ b/src/features/user/Account/ReactivateModal.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { ThemeContext } from '../../../theme/themeContext'; import styles from './AccountHistory.module.scss'; -import { useTranslation } from 'react-i18next'; +import { useTranslations } from 'next-intl'; import { putAuthenticatedRequest } from '../../../utils/apiRequests/api'; import { useUserProps } from '../../common/Layout/UserPropsContext'; import Close from '../../../../public/assets/images/icons/headerIcons/Close'; @@ -29,7 +29,7 @@ export const ReactivateModal = ({ const { theme } = React.useContext(ThemeContext); const { token, logoutUser } = useUserProps(); const { setErrors } = React.useContext(ErrorHandlingContext); - const { t } = useTranslation(['me']); + const t = useTranslations('Me'); const bodyToSend = {}; React.useEffect(() => { @@ -77,7 +77,7 @@ export const ReactivateModal = ({ width: '100%', }} > -

{t('me:reactivateDonationConfirmation')}

+

{t('reactivateDonationConfirmation')}

- - - ); - } - return null; + + + + ); }; export default CreationMethodForm; diff --git a/src/features/user/BulkCodes/forms/IssueCodesForm.tsx b/src/features/user/BulkCodes/forms/IssueCodesForm.tsx index b6c502c08f..272926ac6c 100644 --- a/src/features/user/BulkCodes/forms/IssueCodesForm.tsx +++ b/src/features/user/BulkCodes/forms/IssueCodesForm.tsx @@ -1,5 +1,5 @@ import React, { FormEvent, ReactElement, useContext, useState } from 'react'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { Button, TextField } from '@mui/material'; import styles from '../../../../../src/features/user/BulkCodes/BulkCodes.module.scss'; import { useRouter } from 'next/router'; @@ -29,7 +29,8 @@ import { import { useTenant } from '../../../common/Layout/TenantContext'; const IssueCodesForm = (): ReactElement | null => { - const { t, ready, i18n } = useTranslation(['common', 'bulkCodes']); + const t = useTranslations('BulkCodes'); + const locale = useLocale(); const router = useRouter(); const { project, @@ -89,7 +90,7 @@ const IssueCodesForm = (): ReactElement | null => { const handleSubmit = async (event: FormEvent) => { event.preventDefault(); if (isAddingRecipient || isEditingRecipient) { - const shouldSubmit = confirm(t('bulkCodes:unsavedDataWarning')); + const shouldSubmit = confirm(t('unsavedDataWarning')); if (!shouldSubmit) return; } @@ -153,35 +154,27 @@ const IssueCodesForm = (): ReactElement | null => { switch (error.message) { case 'planet_cash_invalid_project': _serializedErrors.push({ - message: t( - 'bulkCodes:donationError.planet_cash_invalid_project' - ), + message: t('donationError.planet_cash_invalid_project'), }); break; case 'planet_cash_insufficient_credit': _serializedErrors.push({ - message: t( - 'bulkCodes:donationError.planet_cash_insufficient_credit', - { - availableBalance: getFormatedCurrency( - i18n.language, - planetCashAccount?.currency as string, - error.parameters && error.parameters['available_credit'] - ), - } - ), + message: t('donationError.planet_cash_insufficient_credit', { + availableBalance: getFormatedCurrency( + locale, + planetCashAccount?.currency as string, + error.parameters && error.parameters['available_credit'] + ), + }), }); break; case 'planet_cash_payment_failure': _serializedErrors.push({ - message: t( - 'bulkCodes:donationError.planet_cash_payment_failure', - { - reason: error.parameters && error.parameters['reason'], - } - ), + message: t('donationError.planet_cash_payment_failure', { + reason: error.parameters && error.parameters['reason'], + }), }); break; @@ -195,7 +188,7 @@ const IssueCodesForm = (): ReactElement | null => { } } else { setIsProcessing(false); - setErrors([{ message: t('bulkCodes:projectRequired') }]); + setErrors([{ message: t('projectRequired') }]); } }; @@ -220,93 +213,84 @@ const IssueCodesForm = (): ReactElement | null => { } }; - if (ready) { - if (!isSubmitted) { - return ( - - -
- + +
+ + setComment(e.target.value)} + value={comment} + label={t('labelComment')} + /> + setOccasion(e.target.value)} + value={occasion} + label={t('occasion')} + /> + {bulkMethod === 'generic' && ( + - setComment(e.target.value)} - value={comment} - label={t('bulkCodes:labelComment')} + )} + {bulkMethod === 'import' && ( + - setOccasion(e.target.value)} - value={occasion} - label={t('bulkCodes:occasion')} - /> - {bulkMethod === 'generic' && ( - - )} - {bulkMethod === 'import' && ( - - )} - -
+ )} + +
- + -
- -
-
-
- ); - } else { - return ( -
- {t('bulkCodes:donationSuccess')} - -
- ); - } +
+ +
+ + + ); + } else { + return ( +
+ {t('donationSuccess')} + +
+ ); } - - return null; }; export default IssueCodesForm; diff --git a/src/features/user/BulkCodes/forms/SelectProjectForm.tsx b/src/features/user/BulkCodes/forms/SelectProjectForm.tsx index 68ba81c1d4..2a35dccf83 100644 --- a/src/features/user/BulkCodes/forms/SelectProjectForm.tsx +++ b/src/features/user/BulkCodes/forms/SelectProjectForm.tsx @@ -1,5 +1,5 @@ import React, { ReactElement, useState } from 'react'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { useRouter } from 'next/router'; import { Button } from '@mui/material'; import { useBulkCode } from '../../../common/Layout/BulkCodeContext'; @@ -13,7 +13,7 @@ import { ProjectOption } from '../../../common/types/project'; const SelectProjectForm = (): ReactElement | null => { const router = useRouter(); - const { t, ready } = useTranslation(['common', 'bulkCodes']); + const tCommon = useTranslations('Common'); const { method } = router.query; const { project, setProject, projectList, planetCashAccount } = useBulkCode(); const { user } = useUserProps(); @@ -29,41 +29,37 @@ const SelectProjectForm = (): ReactElement | null => { } }; - if (ready) { - return ( - - -
- -
+ return ( + + +
+ +
- + - -
-
- ); - } - - return null; + +
+
+ ); }; export default SelectProjectForm; diff --git a/src/features/user/BulkCodes/index.tsx b/src/features/user/BulkCodes/index.tsx index eba92aee36..830a8f6ccf 100644 --- a/src/features/user/BulkCodes/index.tsx +++ b/src/features/user/BulkCodes/index.tsx @@ -1,4 +1,4 @@ -import { useTranslation, Trans } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import React, { ReactElement, useEffect, @@ -33,7 +33,8 @@ interface BulkCodesProps { export default function BulkCodes({ step, }: BulkCodesProps): ReactElement | null { - const { t, ready, i18n } = useTranslation('bulkCodes'); + const t = useTranslations('BulkCodes'); + const locale = useLocale(); const { tenantConfig } = useTenant(); const { planetCashAccount, @@ -48,28 +49,26 @@ export default function BulkCodes({ const [tabConfig, setTabConfig] = useState([]); useEffect(() => { - if (ready) { - setTabConfig([ - { - label: t('bulkCodes:tabCreationMethod'), - link: '/profile/bulk-codes', - step: BulkCodeSteps.SELECT_METHOD, - }, - { - label: t('bulkCodes:tabSelectProject'), - link: `/profile/bulk-codes/${bulkMethod}`, - step: BulkCodeSteps.SELECT_PROJECT, - disabled: bulkMethod === null, - }, - { - label: t('bulkCodes:tabIssueCodes'), - link: `/profile/bulk-codes/${bulkMethod}/${project?.guid}`, - step: BulkCodeSteps.ISSUE_CODES, - disabled: bulkMethod === null || project === null, - }, - ]); - } - }, [ready, bulkMethod, project, i18n.language]); + setTabConfig([ + { + label: t('tabCreationMethod'), + link: '/profile/bulk-codes', + step: BulkCodeSteps.SELECT_METHOD, + }, + { + label: t('tabSelectProject'), + link: `/profile/bulk-codes/${bulkMethod}`, + step: BulkCodeSteps.SELECT_PROJECT, + disabled: bulkMethod === null, + }, + { + label: t('tabIssueCodes'), + link: `/profile/bulk-codes/${bulkMethod}/${project?.guid}`, + step: BulkCodeSteps.ISSUE_CODES, + disabled: bulkMethod === null || project === null, + }, + ]); + }, [bulkMethod, project, locale]); const fetchProjectList = useCallback(async () => { if (planetCashAccount && !projectList) { @@ -82,7 +81,7 @@ export default function BulkCodes({ currency: planetCashAccount.currency, tenant: tenantConfig?.id, 'filter[purpose]': 'trees', - locale: i18n.language, + locale: locale, } ); @@ -121,7 +120,7 @@ export default function BulkCodes({ setErrors(handleError(err as APIError)); } } - }, [planetCashAccount?.currency, i18n.language]); + }, [planetCashAccount?.currency, locale]); useEffect(() => { fetchProjectList(); @@ -153,28 +152,27 @@ export default function BulkCodes({ } }; - return ready ? ( + return (

- - Use of this feature by Companies is subject to partnership with - Plant-for-the-Planet. Please contact{' '} - - partner@plant-for-the-planet.org - {' '} - for details. - + {t.rich('partnerSignupInfo', { + partnerEmailLink: (chunks) => ( + + {chunks} + + ), + })}

- {t('bulkCodes:bulkCodesDescription1')} + {t('bulkCodesDescription1')}
- {t('bulkCodes:bulkCodesDescription2')} + {t('bulkCodesDescription2')}

} @@ -183,5 +181,5 @@ export default function BulkCodes({ {renderStep()} - ) : null; + ); } diff --git a/src/features/user/CompleteSignup/index.tsx b/src/features/user/CompleteSignup/index.tsx index 6234978fc9..35b97fd3e8 100644 --- a/src/features/user/CompleteSignup/index.tsx +++ b/src/features/user/CompleteSignup/index.tsx @@ -22,7 +22,7 @@ import { ThemeContext } from '../../../theme/themeContext'; import GeocoderArcGIS from 'geocoder-arcgis'; import { postRequest } from '../../../utils/apiRequests/api'; import { ErrorHandlingContext } from '../../common/Layout/ErrorHandlingContext'; -import { useTranslation, Trans } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import InlineFormDisplayGroup from '../../common/Layout/Forms/InlineFormDisplayGroup'; import { handleError, @@ -58,7 +58,8 @@ type FormData = Omit< export default function CompleteSignup(): ReactElement | null { const router = useRouter(); - const { i18n, t, ready } = useTranslation('editProfile'); + const t = useTranslations('EditProfile'); + const locale = useLocale(); const { setErrors, redirect } = React.useContext(ErrorHandlingContext); const [addressSugggestions, setaddressSugggestions] = React.useState< AddressSuggestionsType[] @@ -160,7 +161,7 @@ export default function CompleteSignup(): ReactElement | null { const [severity, setSeverity] = useState('info'); const [requestSent, setRequestSent] = useState(false); const [acceptTerms, setAcceptTerms] = useState(null); - + const [postalRegex, setPostalRegex] = React.useState( COUNTRY_ADDRESS_POSTALS.filter((item) => item.abbrev === country)[0]?.postal ); @@ -175,11 +176,15 @@ export default function CompleteSignup(): ReactElement | null { setRequestSent(true); setIsProcessing(true); try { - const res = await postRequest(tenantConfig?.id, `/app/profile`, bodyToSend); + const res = await postRequest( + tenantConfig?.id, + `/app/profile`, + bodyToSend + ); setRequestSent(false); // successful signup -> goto me page setUser(res); - setSnackbarMessage(ready ? t('profileCreated') : ''); + setSnackbarMessage(t('profileCreated')); setSeverity('success'); handleSnackbarOpen(); @@ -202,18 +207,18 @@ export default function CompleteSignup(): ReactElement | null { const profileTypes = [ { id: 1, - title: ready ? t('individual') : '', + title: t('individual'), value: 'individual', }, { id: 2, - title: ready ? t('organization') : '', + title: t('organization'), value: 'organization', }, - { id: 3, title: ready ? t('tpo') : '', value: 'tpo' }, + { id: 3, title: t('tpo'), value: 'tpo' }, { id: 4, - title: ready ? t('education') : '', + title: t('education'), value: 'education', }, ] as const; @@ -250,7 +255,7 @@ export default function CompleteSignup(): ReactElement | null { return null; } if (contextLoaded && token && user === null) { - return ready ? ( + return (
- ) : null; + ); } return null; } diff --git a/src/features/user/GiftFunds/GiftFundDetails.tsx b/src/features/user/GiftFunds/GiftFundDetails.tsx index d07f5b0c80..aa06a24a55 100644 --- a/src/features/user/GiftFunds/GiftFundDetails.tsx +++ b/src/features/user/GiftFunds/GiftFundDetails.tsx @@ -1,6 +1,6 @@ import React, { ReactElement } from 'react'; import { useUserProps } from '../../common/Layout/UserPropsContext'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { Divider, Grid, styled } from '@mui/material'; import { GiftFund } from '@planet-sdk/common'; @@ -10,7 +10,7 @@ interface Props { const GiftFundDetails = ({ giftFund }: Props): ReactElement | null => { const { user } = useUserProps(); - const { t, ready } = useTranslation('giftfunds'); + const t = useTranslations('Giftfunds'); const StyledContainer = styled('article')(({ theme }) => ({ backgroundColor: theme.palette.background.default, @@ -36,7 +36,7 @@ const GiftFundDetails = ({ giftFund }: Props): ReactElement | null => { }, })); - if (ready && user?.planetCash) { + if (user?.planetCash) { return ( <> { - const { t, ready } = useTranslation('giftfunds'); + const t = useTranslations('Giftfunds'); const router = useRouter(); const { user } = useUserProps(); @@ -33,7 +33,7 @@ const GiftFunds = () => { ); }, [user]); - return ready ? ( + return ( { ))} - ) : ( - <> ); }; diff --git a/src/features/user/ManagePayouts/components/BankAccountDetails.tsx b/src/features/user/ManagePayouts/components/BankAccountDetails.tsx index 3bea2422e0..8f7e3a7040 100644 --- a/src/features/user/ManagePayouts/components/BankAccountDetails.tsx +++ b/src/features/user/ManagePayouts/components/BankAccountDetails.tsx @@ -2,7 +2,7 @@ import { ReactElement } from 'react'; import { styled, Grid, Button, Divider } from '@mui/material'; import getFormatedCurrency from '../../../../utils/countryCurrency/getFormattedCurrency'; import Link from 'next/link'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { BankAccount } from '../../../common/types/payouts'; // TODOO - See if something can be made common between accounts of Manage Accounts and Planet Cash @@ -48,14 +48,16 @@ interface BankAccountDetailsProps { const BankAccountDetails = ({ account, }: BankAccountDetailsProps): ReactElement => { - const { t, i18n } = useTranslation(['managePayouts', 'country']); + const tCountry = useTranslations('Country'); + const tManagePayouts = useTranslations('ManagePayouts'); + const locale = useLocale(); const renderAccountTitle = () => { const { currency } = account; if (!currency) { - return t('defaultCurrency'); + return tManagePayouts('defaultCurrency'); } else { - return t('accountTitleText', { currency }); + return tManagePayouts('accountTitleText', { currency }); } }; @@ -74,9 +76,9 @@ const BankAccountDetails = ({ {account.currency !== null && account.payoutMinAmount !== null && ( - {t('minPayoutText', { + {tManagePayouts('minPayoutText', { amount: getFormatedCurrency( - i18n.language, + locale, account.currency, account.payoutMinAmount, true @@ -88,50 +90,60 @@ const BankAccountDetails = ({ -

{t('labels.bankName')}

+

{tManagePayouts('labels.bankName')}

{account.bankName}
-

{t('labels.bankCountry')}

+

+ {tManagePayouts('labels.bankCountry')} +

- {t(`country:${account.bankCountry.toLowerCase()}`)} + {tCountry(account.bankCountry.toLowerCase())}
-

{t('labels.bankAddress')}

+

+ {tManagePayouts('labels.bankAddress')} +

{account.bankAddress}
-

{t('labels.holderName')}

+

{tManagePayouts('labels.holderName')}

{account.holderName}
-

{t('labels.holderAddress')}

+

+ {tManagePayouts('labels.holderAddress')} +

{account.holderAddress}
-

{t('labels.accountNumber')}

+

+ {tManagePayouts('labels.accountNumber')} +

{account.accountNumber}
-

{t('labels.bic')}

+

{tManagePayouts('labels.bic')}

{account.bic}
-

{t('labels.branchCode')}

+

{tManagePayouts('labels.branchCode')}

{account.branchCode || '-'}
-

{t('labels.routingNumber')}

+

+ {tManagePayouts('labels.routingNumber')} +

{account.routingNumber || '-'}
-

{t('labels.remarks')}

+

{tManagePayouts('labels.remarks')}

{account.remarks || '-'}
- +
diff --git a/src/features/user/ManagePayouts/components/BankDetailsForm.tsx b/src/features/user/ManagePayouts/components/BankDetailsForm.tsx index b8b67bf499..77e276c9b6 100644 --- a/src/features/user/ManagePayouts/components/BankDetailsForm.tsx +++ b/src/features/user/ManagePayouts/components/BankDetailsForm.tsx @@ -4,7 +4,7 @@ import { Button, TextField, MenuItem, CircularProgress } from '@mui/material'; import StyledForm from '../../../common/Layout/StyledForm'; import ReactHookFormSelect from '../../../common/InputTypes/ReactHookFormSelect'; import { PayoutCurrency } from '../../../../utils/constants/payoutConstants'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import InlineFormDisplayGroup from '../../../common/Layout/Forms/InlineFormDisplayGroup'; import { BankAccount } from '../../../common/types/payouts'; import AutoCompleteCountry from '../../../common/InputTypes/AutoCompleteCountry'; @@ -57,7 +57,7 @@ const BankDetailsForm = ({ handleSave, isProcessing, }: Props): ReactElement | null => { - const { t, ready } = useTranslation('managePayouts'); + const t = useTranslations('ManagePayouts'); const { handleSubmit, control, @@ -110,248 +110,242 @@ const BankDetailsForm = ({ }); }, [payoutMinAmounts]); - if (ready) { - return ( - -
- - {renderCurrencyOptions()} - - {currency !== PayoutCurrency.DEFAULT && payoutMinAmounts !== null && ( - ( - { - handlePayoutChange(event); - handleChange(event); - }} - value={value} - onBlur={onBlur} - error={errors.payoutMinAmount !== undefined} - helperText={ - errors.payoutMinAmount !== undefined && - errors.payoutMinAmount.message - } - /> - )} - /> - )} + return ( + +
+ + {renderCurrencyOptions()} + + {currency !== PayoutCurrency.DEFAULT && payoutMinAmounts !== null && ( ( + rules={{ + required: t('errors.payoutMinAmountRequired'), + validate: { + isLow: validateMinPayout, + }, + }} + render={({ field: { onChange: handleChange, value, onBlur } }) => ( { + handlePayoutChange(event); + handleChange(event); + }} value={value} onBlur={onBlur} - error={errors.bankName !== undefined} + error={errors.payoutMinAmount !== undefined} helperText={ - errors.bankName !== undefined && errors.bankName.message - } - /> - )} - /> - ( - )} /> + )} + ( + + )} + /> + ( + + )} + /> + ( + + )} + /> + ( + + )} + /> + ( + + )} + /> + ( )} /> ( )} /> + + ( )} /> - - ( - - )} - /> - ( - - )} - /> - - - ( - - )} - /> - ( - - )} - /> - ( )} /> -
- -
- ); - } - - return null; + /> +
+ +
+ ); }; export default BankDetailsForm; diff --git a/src/features/user/ManagePayouts/components/NoBankAccount.tsx b/src/features/user/ManagePayouts/components/NoBankAccount.tsx index 69e60dae98..15c7aa7bf7 100644 --- a/src/features/user/ManagePayouts/components/NoBankAccount.tsx +++ b/src/features/user/ManagePayouts/components/NoBankAccount.tsx @@ -1,26 +1,22 @@ import { ReactElement } from 'react'; import { Button } from '@mui/material'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import Link from 'next/link'; import CenteredContainer from '../../../common/Layout/CenteredContainer'; const NoBankAccount = (): ReactElement | null => { - const { t, ready } = useTranslation('managePayouts'); + const t = useTranslations('ManagePayouts'); - if (ready) { - return ( - -

{t('noBankAccountText')}

- - - -
- ); - } - - return null; + return ( + +

{t('noBankAccountText')}

+ + + +
+ ); }; export default NoBankAccount; diff --git a/src/features/user/ManagePayouts/index.tsx b/src/features/user/ManagePayouts/index.tsx index f396bcb68b..d39670d426 100644 --- a/src/features/user/ManagePayouts/index.tsx +++ b/src/features/user/ManagePayouts/index.tsx @@ -5,7 +5,7 @@ import { useContext, useCallback, } from 'react'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import DashboardView from '../../common/Layout/DashboardView'; import TabbedView from '../../common/Layout/TabbedView'; import { TabItem } from '../../common/Layout/TabbedView/TabbedViewTypes'; @@ -42,7 +42,8 @@ export default function ManagePayouts({ setProgress, isEdit, }: ManagePayoutsProps): ReactElement | null { - const { t, ready, i18n } = useTranslation('managePayouts'); + const t = useTranslations('ManagePayouts'); + const locale = useLocale(); const { tenantConfig } = useTenant(); const router = useRouter(); const { setErrors } = useContext(ErrorHandlingContext); @@ -102,7 +103,7 @@ export default function ManagePayouts({ }, [contextLoaded, token, user]); useEffect(() => { - if (ready && user && user.type === 'tpo') { + if (user && user.type === 'tpo') { setTabConfig([ { label: t('tabOverview'), @@ -121,7 +122,7 @@ export default function ManagePayouts({ }, ]); } - }, [ready, user, i18n.language]); + }, [user, locale]); const renderStep = () => { switch (step) { @@ -140,11 +141,11 @@ export default function ManagePayouts({ } }; - return ready ? ( + return ( {t('description')}

}> {renderStep()}
- ) : null; + ); } diff --git a/src/features/user/ManagePayouts/screens/AddBankAccount.tsx b/src/features/user/ManagePayouts/screens/AddBankAccount.tsx index 78fd5c7dee..ced3484c0a 100644 --- a/src/features/user/ManagePayouts/screens/AddBankAccount.tsx +++ b/src/features/user/ManagePayouts/screens/AddBankAccount.tsx @@ -4,7 +4,7 @@ import { ErrorHandlingContext } from '../../../common/Layout/ErrorHandlingContex import { usePayouts } from '../../../common/Layout/PayoutsContext'; import { useUserProps } from '../../../common/Layout/UserPropsContext'; import { useRouter } from 'next/router'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import BankDetailsForm, { FormData } from '../components/BankDetailsForm'; import CustomSnackbar from '../../../common/CustomSnackbar'; import CenteredContainer from '../../../common/Layout/CenteredContainer'; @@ -14,7 +14,7 @@ import { BankAccount } from '../../../common/types/payouts'; import { useTenant } from '../../../common/Layout/TenantContext'; const AddBankAccount = (): ReactElement | null => { - const { t } = useTranslation('managePayouts'); + const t = useTranslations('ManagePayouts'); const { payoutMinAmounts, setAccounts, accounts } = usePayouts(); const { token, logoutUser } = useUserProps(); const { setErrors } = useContext(ErrorHandlingContext); diff --git a/src/features/user/ManagePayouts/screens/EditBankAccount.tsx b/src/features/user/ManagePayouts/screens/EditBankAccount.tsx index a004083b9a..c8bd87c49e 100644 --- a/src/features/user/ManagePayouts/screens/EditBankAccount.tsx +++ b/src/features/user/ManagePayouts/screens/EditBankAccount.tsx @@ -1,6 +1,6 @@ import { ReactElement, useContext, useEffect, useState } from 'react'; import { useRouter } from 'next/router'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import Link from 'next/link'; import { putAuthenticatedRequest } from '../../../../utils/apiRequests/api'; import { usePayouts } from '../../../common/Layout/PayoutsContext'; @@ -25,7 +25,7 @@ const EditBankAccount = (): ReactElement | null => { const [isAccountUpdated, setIsAccountUpdated] = useState(false); const { token, logoutUser } = useUserProps(); const { setErrors, errors } = useContext(ErrorHandlingContext); - const { t, ready } = useTranslation('managePayouts'); + const t = useTranslations('ManagePayouts'); const closeSnackbar = (): void => { setIsAccountUpdated(false); @@ -129,7 +129,7 @@ const EditBankAccount = (): ReactElement | null => { } }, [accounts, router.query.id]); - return accountToEdit !== null && payoutMinAmounts && ready ? ( + return accountToEdit !== null && payoutMinAmounts ? ( diff --git a/src/features/user/ManagePayouts/screens/PayoutScheduleForm.tsx b/src/features/user/ManagePayouts/screens/PayoutScheduleForm.tsx index fe045f7373..0f32c7377c 100644 --- a/src/features/user/ManagePayouts/screens/PayoutScheduleForm.tsx +++ b/src/features/user/ManagePayouts/screens/PayoutScheduleForm.tsx @@ -4,7 +4,7 @@ import { Button, MenuItem, CircularProgress } from '@mui/material'; import ReactHookFormSelect from '../../../common/InputTypes/ReactHookFormSelect'; import StyledForm from '../../../common/Layout/StyledForm'; import CenteredContainer from '../../../common/Layout/CenteredContainer'; -import { useTranslation, Trans } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { useUserProps } from '../../../common/Layout/UserPropsContext'; import { ErrorHandlingContext } from '../../../common/Layout/ErrorHandlingContext'; import { putAuthenticatedRequest } from '../../../../utils/apiRequests/api'; @@ -26,7 +26,7 @@ type FormData = { }; const PayoutScheduleForm = (): ReactElement | null => { - const { t, ready } = useTranslation('managePayouts'); + const t = useTranslations('ManagePayouts'); const [isProcessing, setIsProcessing] = useState(false); const [isSaved, setIsSaved] = useState(false); const { token, user, setUser, logoutUser } = useUserProps(); @@ -74,7 +74,7 @@ const PayoutScheduleForm = (): ReactElement | null => { setIsSaved(false); }; - if (ready && user?.type === 'tpo') { + if (user?.type === 'tpo') { return ( @@ -82,16 +82,16 @@ const PayoutScheduleForm = (): ReactElement | null => {

{t('payoutInformation2')}

{t('payoutInformation3')}

- - If you have an exceptional case, please contact{' '} - - support@plant-for-the-planet.org - - . - + {t.rich('supportInformation', { + supportLink: (chunks) => ( + + {chunks} + + ), + })}

{ImageSource ? ( @@ -49,17 +52,17 @@ function SingleProject({ project }: { project: Properties }) { {project.country === null ? ( <> ) : ( - t('country:' + (project.country || '').toLowerCase()) + tCountry((project.country || '').toLowerCase()) )}

{project.purpose === 'trees' ? (

{localizedAbbreviatedNumber( - i18n.language, + locale, Number(project.countPlanted), 1 )}{' '} - {t('common:tree', { count: Number(project.countPlanted) })} + {tCommon('tree', { count: Number(project.countPlanted) })}

) : ( <> @@ -70,13 +73,13 @@ function SingleProject({ project }: { project: Properties }) {
🛰 ️TreeMapper
)} */} {project.isFeatured ? ( -
🌟 {t('common:featured')}
+
🌟 {tCommon('featured')}
) : ( '' )} {project.allowDonations ? (
- 💸 {t('donate:acceptingDonations')} + 💸 {tDonate('acceptingDonations')}
) : ( '' @@ -85,10 +88,10 @@ function SingleProject({ project }: { project: Properties }) {
- + - +
@@ -96,7 +99,8 @@ function SingleProject({ project }: { project: Properties }) { } export default function ProjectsContainer() { - const { t, ready } = useTranslation(['donate', 'manageProjects']); + const tDonate = useTranslations('Donate'); + const tManageProjects = useTranslations('ManageProjects'); const { tenantConfig } = useTenant(); const [projects, setProjects] = React.useState([]); const [loader, setLoader] = React.useState(true); @@ -127,52 +131,52 @@ export default function ProjectsContainer() { } }, [contextLoaded, token]); - return ready ? ( + return ( -

{t('manageProjects:descriptionForManageProjects')}

+

{tManageProjects('descriptionForManageProjects')}

} > +
+ + + + + + +
-
- - - - - - -
- -
- {loader && } - {projects?.length < 1 && !loader ? ( -
- - -
{t('donate:noProjectsFound')}
-
-
- ) : ( -
- {projects.map((project, index) => { - return ; - })} -
- )} -
- +
+ {loader && } + {projects?.length < 1 && !loader ? ( +
+ + +
{tDonate('noProjectsFound')}
+
+
+ ) : ( +
+ {projects.map((project, index) => { + return ( + + ); + })} +
+ )} +
- ) : null; + ); } diff --git a/src/features/user/ManageProjects/components/BasicDetails.tsx b/src/features/user/ManageProjects/components/BasicDetails.tsx index 8a09280e2f..551defd310 100644 --- a/src/features/user/ManageProjects/components/BasicDetails.tsx +++ b/src/features/user/ManageProjects/components/BasicDetails.tsx @@ -8,7 +8,7 @@ import React, { } from 'react'; import { useForm, Controller } from 'react-hook-form'; import { Button, FormControlLabel, Switch, Tooltip } from '@mui/material'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import styles from './../StepForm.module.scss'; import MapGL, { Marker, @@ -79,7 +79,8 @@ export default function BasicDetails({ projectGUID, purpose, }: BasicDetailsProps): ReactElement { - const { t, i18n, ready } = useTranslation(['manageProjects']); + const t = useTranslations('ManageProjects'); + const locale = useLocale(); const EMPTY_STYLE = { version: 8, sources: {}, @@ -145,27 +146,27 @@ export default function BasicDetails({ const classifications = [ { - label: ready ? t('manageProjects:largeScalePlanting') : '', + label: t('largeScalePlanting'), value: 'large-scale-planting', }, { - label: ready ? t('manageProjects:agroforestry') : '', + label: t('agroforestry'), value: 'agroforestry', }, { - label: ready ? t('manageProjects:naturalRegeneration') : '', + label: t('naturalRegeneration'), value: 'natural-regeneration', }, { - label: ready ? t('manageProjects:managedRegeneration') : '', + label: t('managedRegeneration'), value: 'managed-regeneration', }, { - label: ready ? t('manageProjects:urbanPlanting') : '', + label: t('urbanPlanting'), value: 'urban-planting', }, { - label: ready ? t('manageProjects:otherPlanting') : '', + label: t('otherPlanting'), value: 'other-planting', }, ]; @@ -257,7 +258,7 @@ export default function BasicDetails({ acceptDonations: projectDetails.acceptDonations, unitType: projectDetails.unitType, unitCost: getFormattedNumber( - i18n.language, + locale, projectDetails.unitCost || 0 ), latitude: projectDetails.geoLatitude.toString(), @@ -277,7 +278,7 @@ export default function BasicDetails({ description: projectDetails.description, acceptDonations: projectDetails.acceptDonations, unitCost: getFormattedNumber( - i18n.language, + locale, projectDetails.unitCost || 0 ), latitude: projectDetails.geoLatitude.toString(), @@ -318,7 +319,7 @@ export default function BasicDetails({ description: data.description, acceptDonations: data.acceptDonations, unitCost: data.unitCost - ? parseNumber(i18n.language, Number(data.unitCost)) + ? parseNumber(locale, Number(data.unitCost)) : undefined, unitType: (data as TreeFormData).unitType, currency: 'EUR', @@ -344,7 +345,7 @@ export default function BasicDetails({ description: data.description, acceptDonations: data.acceptDonations, unitCost: data.unitCost - ? parseNumber(i18n.language, Number(data.unitCost)) + ? parseNumber(locale, Number(data.unitCost)) : undefined, currency: 'EUR', metadata: { @@ -383,13 +384,7 @@ export default function BasicDetails({ try { const res = await postAuthenticatedRequest< ProfileProjectTrees | ProfileProjectConservation - >( - tenantConfig?.id, - `/app/projects`, - submitData, - token, - logoutUser - ); + >(tenantConfig?.id, `/app/projects`, submitData, token, logoutUser); setProjectGUID(res.id); setProjectDetails(res); router.push(`/profile/projects/${res.id}?type=media`); @@ -410,17 +405,17 @@ export default function BasicDetails({ : {} ); - return ready ? ( + return (
( ( {ecosystemTypes.map((ecosystem) => ( - {t(`manageProjects:ecosystemTypes.${ecosystem}`)} + {t(`ecosystemTypes.${ecosystem}`)} ))} @@ -463,12 +458,12 @@ export default function BasicDetails({ ( ( {unitTypeOptions.map((unitType) => ( - {t(`manageProjects:unitTypes.${unitType}`)} + {t(`unitTypes.${unitType}`)} ))} @@ -531,12 +526,12 @@ export default function BasicDetails({ name="countTarget" control={control} rules={{ - required: t('manageProjects:countTargetValidation'), + required: t('countTargetValidation'), validate: (value) => parseInt(value, 10) > 1, }} render={({ field: { onChange, onBlur, value } }) => ( ) => { @@ -553,7 +548,7 @@ export default function BasicDetails({ 'countTarget' in errors && errors.countTarget !== undefined && (errors.countTarget.message || - t('manageProjects:countTargetValidation2')) + t('countTargetValidation2')) } /> )} @@ -564,10 +559,10 @@ export default function BasicDetails({ ( ( ( - {t('manageProjects:receiveDonations')} - + {t('receiveDonations')} + @@ -672,15 +664,15 @@ export default function BasicDetails({ rules={{ required: { value: acceptDonations, - message: t('manageProjects:unitCostRequired'), + message: t('unitCostRequired'), }, validate: (value) => - parseNumber(i18n.language, Number(value)) > 0 && - parseNumber(i18n.language, Number(value)) <= 100, + parseNumber(locale, Number(value)) > 0 && + parseNumber(locale, Number(value)) <= 100, }} render={({ field: { onChange, value, onBlur } }) => ( )} @@ -718,7 +709,7 @@ export default function BasicDetails({ : themeProperties.dark.dark, }} > - {t('manageProjects:projectLocation')} + {t('projectLocation')}

( ) => { @@ -813,8 +804,8 @@ export default function BasicDetails({ helperText={ errors.latitude !== undefined && (wrongCoordinatesMessage - ? t('manageProjects:wrongCoordinates') - : t('manageProjects:latitudeRequired')) + ? t('wrongCoordinates') + : t('latitudeRequired')) } /> )} @@ -834,7 +825,7 @@ export default function BasicDetails({ }} render={({ field: { onChange, value, onBlur } }) => ( ) => { @@ -851,8 +842,8 @@ export default function BasicDetails({ helperText={ errors.longitude !== undefined && (wrongCoordinatesMessage - ? t('manageProjects:wrongCoordinates') - : t('manageProjects:longitudeRequired')) + ? t('wrongCoordinates') + : t('longitudeRequired')) } /> )} @@ -866,7 +857,7 @@ export default function BasicDetails({ control={control} render={({ field: { onChange, value } }) => (
) : ( - t('manageProjects:saveAndContinue') + t('saveAndContinue') )} @@ -900,7 +891,7 @@ export default function BasicDetails({ variant="contained" onClick={() => handleNext(ProjectCreationTabs.PROJECT_MEDIA)} > - {t('manageProjects:skip')} + {t('skip')} ) : ( '' @@ -908,7 +899,5 @@ export default function BasicDetails({
- ) : ( - <> ); } diff --git a/src/features/user/ManageProjects/components/DetailedAnalysis.tsx b/src/features/user/ManageProjects/components/DetailedAnalysis.tsx index dbf840aade..4e58ef2018 100644 --- a/src/features/user/ManageProjects/components/DetailedAnalysis.tsx +++ b/src/features/user/ManageProjects/components/DetailedAnalysis.tsx @@ -1,6 +1,6 @@ import React, { ReactElement, useEffect } from 'react'; import { useForm, Controller } from 'react-hook-form'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import styles from './../StepForm.module.scss'; import BackArrow from '../../../../../public/assets/images/icons/headerIcons/BackArrow'; import ProjectCertificates from './ProjectCertificates'; @@ -101,44 +101,45 @@ export default function DetailedAnalysis({ projectGUID, purpose, }: DetailedAnalysisProps): ReactElement { - const { t, ready } = useTranslation(['manageProjects', 'common']); + const tManageProjects = useTranslations('ManageProjects'); + const tCommon = useTranslations('Common'); const { setErrors } = React.useContext(ErrorHandlingContext); const { logoutUser } = useUserProps(); const { tenantConfig } = useTenant(); const [siteOwners, setSiteOwners] = React.useState([ { id: 1, - title: ready ? t('manageProjects:siteOwnerPrivate') : '', + title: tManageProjects('siteOwnerPrivate'), value: 'private', isSet: false, }, { id: 2, - title: ready ? t('manageProjects:siteOwnerPublic') : '', + title: tManageProjects('siteOwnerPublic'), value: 'public-property', isSet: false, }, { id: 3, - title: ready ? t('manageProjects:siteOwnerSmallHolding') : '', + title: tManageProjects('siteOwnerSmallHolding'), value: 'smallholding', isSet: false, }, { id: 4, - title: ready ? t('manageProjects:siteOwnerCommunal') : '', + title: tManageProjects('siteOwnerCommunal'), value: 'communal-land', isSet: false, }, { id: 5, - title: ready ? t('manageProjects:siteOwnerOwned') : '', + title: tManageProjects('siteOwnerOwned'), value: 'owned-by-owner', isSet: false, }, { id: 6, - title: ready ? t('manageProjects:siteOwnerOther') : '', + title: tManageProjects('siteOwnerOther'), value: 'other', isSet: false, }, @@ -148,18 +149,18 @@ export default function DetailedAnalysis({ const [plantingSeasons, setPlantingSeasons] = React.useState< PlantingSeason[] >([ - { id: 1, title: ready ? t('common:january') : '', isSet: false }, - { id: 2, title: ready ? t('common:february') : '', isSet: false }, - { id: 3, title: ready ? t('common:march') : '', isSet: false }, - { id: 4, title: ready ? t('common:april') : '', isSet: false }, - { id: 5, title: ready ? t('common:may') : '', isSet: false }, - { id: 6, title: ready ? t('common:june') : '', isSet: false }, - { id: 7, title: ready ? t('common:july') : '', isSet: false }, - { id: 8, title: ready ? t('common:august') : '', isSet: false }, - { id: 9, title: ready ? t('common:september') : '', isSet: false }, - { id: 10, title: ready ? t('common:october') : '', isSet: false }, - { id: 11, title: ready ? t('common:november') : '', isSet: false }, - { id: 12, title: ready ? t('common:december') : '', isSet: false }, + { id: 1, title: tCommon('january'), isSet: false }, + { id: 2, title: tCommon('february'), isSet: false }, + { id: 3, title: tCommon('march'), isSet: false }, + { id: 4, title: tCommon('april'), isSet: false }, + { id: 5, title: tCommon('may'), isSet: false }, + { id: 6, title: tCommon('june'), isSet: false }, + { id: 7, title: tCommon('july'), isSet: false }, + { id: 8, title: tCommon('august'), isSet: false }, + { id: 9, title: tCommon('september'), isSet: false }, + { id: 10, title: tCommon('october'), isSet: false }, + { id: 11, title: tCommon('november'), isSet: false }, + { id: 12, title: tCommon('december'), isSet: false }, ]); const [interventionOptions, setInterventionOptions] = React.useState< @@ -521,7 +522,7 @@ export default function DetailedAnalysis({ } }, [projectDetails]); - return ready ? ( + return (
@@ -545,7 +546,7 @@ export default function DetailedAnalysis({ views={['year']} value={value} onChange={onChange} - label={t('manageProjects:yearOfAbandonment')} + label={tManageProjects('yearOfAbandonment')} renderInput={(props) => ( @@ -588,7 +589,7 @@ export default function DetailedAnalysis({ control={control} render={({ field: { onChange, value } }) => ( ( @@ -613,15 +614,15 @@ export default function DetailedAnalysis({ name="areaProtected" control={control} rules={{ - required: t('manageProjects:validation', { - fieldName: t('manageProjects:areaProtected'), + required: tManageProjects('validation', { + fieldName: tManageProjects('areaProtected'), }), validate: (value) => (value ? parseInt(value, 10) > 0 : true), }} render={({ field: { onChange, value, onBlur } }) => ( @@ -663,13 +664,13 @@ export default function DetailedAnalysis({ name="startingProtectionYear" control={control} rules={{ - required: t('manageProjects:validation', { - fieldName: t('manageProjects:date'), + required: tManageProjects('validation', { + fieldName: tManageProjects('date'), }), }} render={({ field: { value, onChange } }) => ( ( @@ -705,15 +706,15 @@ export default function DetailedAnalysis({ name="employeesCount" control={control} rules={{ - required: t('manageProjects:validation', { - fieldName: t('manageProjects:employeeCount'), + required: tManageProjects('validation', { + fieldName: tManageProjects('employeeCount'), }), validate: (value) => parseInt(value, 10) > 0, }} render={({ field: { onChange, value, onBlur } }) => ( { e.target.value = e.target.value.replace(/[^0-9]./g, ''); @@ -729,7 +730,7 @@ export default function DetailedAnalysis({ InputProps={{ endAdornment: ( @@ -753,13 +754,13 @@ export default function DetailedAnalysis({ name="acquisitionYear" control={control} rules={{ - required: t('manageProjects:validation', { - fieldName: t('manageProjects:acquisitionYear'), + required: tManageProjects('validation', { + fieldName: tManageProjects('acquisitionYear'), }), }} render={({ field: { onChange, value } }) => ( ( @@ -792,7 +793,7 @@ export default function DetailedAnalysis({

- {t('manageProjects:labelMainInterventions') + '*'} + {tManageProjects('labelMainInterventions') + '*'}

{interventionOptions.map(([intervention, isSet]) => { return ( @@ -821,7 +822,7 @@ export default function DetailedAnalysis({

- {t(`manageProjects:interventionTypes.${intervention}`)} + {tManageProjects(`interventionTypes.${intervention}`)}

); @@ -829,7 +830,7 @@ export default function DetailedAnalysis({
{isInterventionsMissing === true && ( - {t('manageProjects:missingInterventionsError')} + {tManageProjects('missingInterventionsError')} )}
@@ -837,8 +838,8 @@ export default function DetailedAnalysis({

{' '} {purpose === 'trees' - ? t('manageProjects:labelRestorationSeasons') - : t('manageProjects:protectionSeasons')}{' '} + ? tManageProjects('labelRestorationSeasons') + : tManageProjects('protectionSeasons')}{' '}

{plantingSeasons.map((month) => { return ( @@ -886,12 +887,12 @@ export default function DetailedAnalysis({ }} render={({ field: { onChange, value, onBlur } }) => ( - {t('manageProjects:treePerHa')} + {tManageProjects('treePerHa')}

), }} @@ -921,17 +922,17 @@ export default function DetailedAnalysis({ rules={{ min: { value: minDensity || 0, - message: t('manageProjects:errorForMaxPlantingDensity'), + message: tManageProjects('errorForMaxPlantingDensity'), }, }} render={({ field: { onChange, value, onBlur } }) => ( - {t('manageProjects:treePerHa')} + {tManageProjects('treePerHa')}

), }} @@ -971,7 +972,7 @@ export default function DetailedAnalysis({ views={['year']} value={value} onChange={onChange} - label={t('manageProjects:yearOfDegradation')} + label={tManageProjects('yearOfDegradation')} renderInput={(props) => } disableFuture minDate={new Date(new Date().setFullYear(1950))} @@ -991,12 +992,12 @@ export default function DetailedAnalysis({ rules={{ maxLength: { value: 300, - message: t('manageProjects:max300Chars'), + message: tManageProjects('max300Chars'), }, }} render={({ field: { onChange, value, onBlur } }) => ( ( + @@ -1058,12 +1059,12 @@ export default function DetailedAnalysis({ rules={{ maxLength: { value: 300, - message: t('manageProjects:max300Chars'), + message: tManageProjects('max300Chars'), }, }} render={({ field: { onChange, value, onBlur } }) => ( ( + @@ -1131,12 +1129,12 @@ export default function DetailedAnalysis({ rules={{ maxLength: { value: 300, - message: t('manageProjects:max300Chars'), + message: tManageProjects('max300Chars'), }, }} render={({ field: { onChange, value, onBlur } }) => ( + @@ -1166,12 +1164,12 @@ export default function DetailedAnalysis({ rules={{ maxLength: { value: 300, - message: t('manageProjects:max300Chars'), + message: tManageProjects('max300Chars'), }, }} render={({ field: { onChange, value, onBlur } }) => (

- {t('manageProjects:siteOwner')} + {tManageProjects('siteOwner')}

{siteOwners.map((owner) => { return ( @@ -1228,7 +1226,7 @@ export default function DetailedAnalysis({ control={control} render={({ field: { onChange, value, onBlur } }) => ( } > -

{t('manageProjects:backToMedia')}

+

{tManageProjects('backToMedia')}

) : ( - t('manageProjects:saveAndContinue') + tManageProjects('saveAndContinue') )} @@ -1272,12 +1270,10 @@ export default function DetailedAnalysis({ variant="contained" onClick={() => handleNext(ProjectCreationTabs.PROJECT_SITES)} > - {t('manageProjects:skip')} + {tManageProjects('skip')}
- ) : ( - <> ); } diff --git a/src/features/user/ManageProjects/components/MapComponent.tsx b/src/features/user/ManageProjects/components/MapComponent.tsx index f027db5364..e791d10a9e 100644 --- a/src/features/user/ManageProjects/components/MapComponent.tsx +++ b/src/features/user/ManageProjects/components/MapComponent.tsx @@ -6,7 +6,7 @@ import '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css'; import styles from './../StepForm.module.scss'; import Dropzone from 'react-dropzone'; import tj from '@mapbox/togeojson'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import WebMercatorViewport from '@math.gl/web-mercator'; import gjv from 'geojson-validation'; import getMapStyle from '../../../../utils/maps/getMapStyle'; @@ -30,7 +30,7 @@ export default function MapComponent({ }: Props): ReactElement { const defaultMapCenter = [geoLocation.geoLongitude, geoLocation.geoLatitude]; const defaultZoom = 1.4; - const { t, ready } = useTranslation(['manageProjects']); + const t = useTranslations('ManageProjects'); const [viewport, setViewPort] = React.useState({ height: '400px', width: '100%', @@ -118,7 +118,7 @@ export default function MapComponent({ } }, [geoJson]); - return ready ? ( + return (
(
- {t('manageProjects:dropGeoJson')} + {t('dropGeoJson')}
)} @@ -238,7 +238,5 @@ export default function MapComponent({
Invalid geojson/kml
) : null}
- ) : ( - <> ); } diff --git a/src/features/user/ManageProjects/components/ProjectCertificates.tsx b/src/features/user/ManageProjects/components/ProjectCertificates.tsx index b00ea8e884..6405ecd85f 100644 --- a/src/features/user/ManageProjects/components/ProjectCertificates.tsx +++ b/src/features/user/ManageProjects/components/ProjectCertificates.tsx @@ -1,7 +1,7 @@ import React, { ReactElement } from 'react'; import styles from './../StepForm.module.scss'; import { useForm, Controller } from 'react-hook-form'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { useDropzone } from 'react-dropzone'; import { deleteAuthenticatedRequest, @@ -56,7 +56,7 @@ function ProjectCertificates({ setIsUploadingData, userLang, }: ProjectCertificatesProps): ReactElement { - const { t, ready } = useTranslation(['manageProjects']); + const t = useTranslations('ManageProjects'); const { redirect, setErrors } = React.useContext(ErrorHandlingContext); const { logoutUser } = useUserProps(); const { tenantConfig } = useTenant(); @@ -165,9 +165,9 @@ function ProjectCertificates({ }, onDropRejected: (err) => { if (err[0].errors[0].code === 'file-too-large') { - setErrorMessage(t('manageProjects:fileSizeLimit')); + setErrorMessage(t('fileSizeLimit')); } else if (err[0].errors[0].code === 'file-invalid-type') { - setErrorMessage(t('manageProjects:filePDFOnly')); + setErrorMessage(t('filePDFOnly')); } }, }); @@ -198,11 +198,11 @@ function ProjectCertificates({ const tenYearsAgo = new Date(); tenYearsAgo.setFullYear(tenYearsAgo.getFullYear() - 10); - return ready ? ( + return (
{showToggle && (

{' '} - {t('manageProjects:certifiedBy')} {report.certifierName}{' '} + {t('certifiedBy')} {report.certifierName}{' '}

{report.issueDate}

@@ -261,7 +261,7 @@ function ProjectCertificates({ defaultValue="" render={({ field: { onChange, value, onBlur } }) => ( ( (
- -

- {t('manageProjects:dragIn')} -

+ +

{t('dragIn')}

) : ( @@ -339,11 +335,9 @@ function ProjectCertificates({
-

- {t('manageProjects:dragInPdf')} -

+

{t('dragInPdf')}

)} @@ -357,16 +351,12 @@ function ProjectCertificates({ className={styles.formFieldLarge} onClick={() => setShowForm(true)} > -

- {t('manageProjects:addCertificate')} -

+

{t('addCertificate')}

) : ( <> )}
- ) : ( - <> ); } diff --git a/src/features/user/ManageProjects/components/ProjectMedia.tsx b/src/features/user/ManageProjects/components/ProjectMedia.tsx index 8471ab01ea..fa3e1bd50e 100644 --- a/src/features/user/ManageProjects/components/ProjectMedia.tsx +++ b/src/features/user/ManageProjects/components/ProjectMedia.tsx @@ -21,7 +21,7 @@ import getImageUrl from '../../../../utils/getImageURL'; import DeleteIcon from '../../../../../public/assets/images/icons/manageProjects/Delete'; import Star from '../../../../../public/assets/images/icons/manageProjects/Star'; import { ErrorHandlingContext } from '../../../common/Layout/ErrorHandlingContext'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import CenteredContainer from '../../../common/Layout/CenteredContainer'; import StyledForm from '../../../common/Layout/StyledForm'; import InlineFormDisplayGroup from '../../../common/Layout/Forms/InlineFormDisplayGroup'; @@ -45,7 +45,7 @@ export default function ProjectMedia({ setProjectDetails, projectGUID, }: ProjectMediaProps): ReactElement { - const { t, ready } = useTranslation(['manageProjects']); + const t = useTranslations('ManageProjects'); const { redirect, setErrors } = useContext(ErrorHandlingContext); const { logoutUser } = useUserProps(); @@ -143,9 +143,9 @@ export default function ProjectMedia({ }, onDropRejected: (err) => { if (err[0].errors[0].code === 'file-too-large') { - setErrorMessage(t('manageProjects:fileSizeLimit')); + setErrorMessage(t('fileSizeLimit')); } else if (err[0].errors[0].code === 'file-invalid-type') { - setErrorMessage(t('manageProjects:fileImageOnly')); + setErrorMessage(t('fileImageOnly')); } }, }); @@ -249,7 +249,7 @@ export default function ProjectMedia({ setErrors(handleError(err as APIError)); } }; - return ready ? ( + return (
( uploadCaption(image.id, index, e)} type="text" - placeholder={t('manageProjects:addCaption')} + placeholder={t('addCaption')} defaultValue="" /> @@ -330,9 +330,9 @@ export default function ProjectMedia({ {/* */} @@ -351,7 +351,7 @@ export default function ProjectMedia({ className="formButton" startIcon={} > -

{t('manageProjects:backToBasic')}

+

{t('backToBasic')}

) : ( - t('manageProjects:saveAndContinue') + t('saveAndContinue') )}
- ) : ( - <> ); } diff --git a/src/features/user/ManageProjects/components/ProjectSelection.tsx b/src/features/user/ManageProjects/components/ProjectSelection.tsx index deb28712c8..7205188e8a 100644 --- a/src/features/user/ManageProjects/components/ProjectSelection.tsx +++ b/src/features/user/ManageProjects/components/ProjectSelection.tsx @@ -1,6 +1,6 @@ import { useRouter } from 'next/router'; import React, { ReactElement } from 'react'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import Styles from '../../../../../src/features/user/ManageProjects/StepForm.module.scss'; import { SetState } from '../../../common/types/common'; @@ -12,9 +12,9 @@ export default function ProjectSelection({ setTabSelected, }: ProjectSelectionProps): ReactElement { const router = useRouter(); - const { t, ready } = useTranslation('manageProjects'); + const t = useTranslations('ManageProjects'); - return ready ? ( + return (
@@ -37,11 +37,9 @@ export default function ProjectSelection({ router.push('/profile/projects/new-project/?purpose=conservation'); }} > - {t('manageProjects:conservationProject')} + {t('conservationProject')}
- ) : ( - <> ); } diff --git a/src/features/user/ManageProjects/components/ProjectSites.tsx b/src/features/user/ManageProjects/components/ProjectSites.tsx index efa27d369f..2f6d070306 100644 --- a/src/features/user/ManageProjects/components/ProjectSites.tsx +++ b/src/features/user/ManageProjects/components/ProjectSites.tsx @@ -1,7 +1,7 @@ import React, { ChangeEvent, ReactElement } from 'react'; import styles from './../StepForm.module.scss'; import { Controller, useForm } from 'react-hook-form'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import BackArrow from '../../../../../public/assets/images/icons/headerIcons/BackArrow'; import dynamic from 'next/dynamic'; import { WebMercatorViewport } from 'react-map-gl'; @@ -59,7 +59,6 @@ function EditSite({ siteDetails, status, geoJsonProp, - ready, projectGUID, setSiteList, token, @@ -69,7 +68,7 @@ function EditSite({ }: EditSiteProps) { const { theme } = React.useContext(ThemeContext); const { tenantConfig } = useTenant(); - const { t } = useTranslation(['manageProjects']); + const t = useTranslations('ManageProjects'); const { handleSubmit, formState: { errors }, @@ -131,7 +130,7 @@ function EditSite({ setErrors(handleError(err as APIError)); } } else { - setErrorMessage(ready ? t('manageProjects:polygonRequired') : ''); + setErrorMessage(t('polygonRequired')); } }; @@ -161,11 +160,11 @@ function EditSite({ ( ) => { changeSiteDetails(e); @@ -185,12 +184,12 @@ function EditSite({
( ) => { @@ -231,7 +230,7 @@ function EditSite({ className={styles.backButton} > -

{t('manageProjects:backToSites')}

+

{t('backToSites')}

) : ( - t('manageProjects:saveSite') + t('saveSite') )}
@@ -263,7 +262,7 @@ export default function ProjectSites({ projectGUID, projectDetails, }: ProjectSitesProps): ReactElement { - const { t, ready } = useTranslation(['manageProjects']); + const t = useTranslations('ManageProjects'); const { handleSubmit, formState: { errors }, @@ -399,7 +398,7 @@ export default function ProjectSites({ setErrors(handleError(err as APIError)); } } else { - setErrorMessage(ready ? t('manageProjects:polygonRequired') : ''); + setErrorMessage(t('polygonRequired')); } }; @@ -428,37 +427,31 @@ export default function ProjectSites({ const status = [ { - label: ready - ? projectDetails?.purpose === 'trees' - ? t('manageProjects:siteStatusPlanting') - : t('manageProjects:siteStatusNotYetprotected') - : '', + label: + projectDetails?.purpose === 'trees' + ? t('siteStatusPlanting') + : t('siteStatusNotYetprotected'), value: projectDetails?.purpose === 'trees' ? 'planting' : 'not yet protected', }, { - label: ready - ? projectDetails?.purpose === 'trees' - ? t('manageProjects:siteStatusPlanted') - : t('manageProjects:siteStatusPartiallyprotected') - : '', + label: + projectDetails?.purpose === 'trees' + ? t('siteStatusPlanted') + : t('siteStatusPartiallyprotected'), value: projectDetails?.purpose === 'trees' ? 'planted' : 'partially protected', }, { - label: ready - ? projectDetails?.purpose === 'trees' - ? t('manageProjects:siteStatusBarren') - : t('manageProjects:siteStatusFullyprotected') - : '', + label: + projectDetails?.purpose === 'trees' + ? t('siteStatusBarren') + : t('siteStatusFullyprotected'), value: projectDetails?.purpose === 'trees' ? 'barren' : 'fully protected', }, { - label: ready - ? projectDetails?.purpose === 'trees' - ? t('manageProjects:siteStatusReforestation') - : '' - : '', + label: + projectDetails?.purpose === 'trees' ? t('siteStatusReforestation') : '', value: projectDetails?.purpose === 'trees' ? 'reforestation' : '', }, ]; @@ -496,7 +489,6 @@ export default function ProjectSites({ errorMessage, status, geoJsonProp: geoJson, - ready, projectGUID, setSiteList, token, @@ -505,7 +497,7 @@ export default function ProjectSites({ siteList, }; - return ready ? ( + return ( {editMode && } @@ -608,11 +600,11 @@ export default function ProjectSites({ ( ) => { changeSiteDetails(e); @@ -631,13 +623,13 @@ export default function ProjectSites({ ( ) => { @@ -669,9 +661,7 @@ export default function ProjectSites({ onClick={handleSubmit(uploadProjectSite)} className={styles.projSiteSaveandAdd} > -

- {t('manageProjects:saveAndAddSite')} -

+

{t('saveAndAddSite')}

) : ( @@ -687,9 +677,7 @@ export default function ProjectSites({ }} className={styles.formFieldLarge} > -

- {t('manageProjects:addSite')} -

+

{t('addSite')}

)} @@ -706,7 +694,7 @@ export default function ProjectSites({ className="formButton" startIcon={} > - {t('manageProjects:backToAnalysis')} + {t('backToAnalysis')}
) : ( - t('manageProjects:saveAndContinue') + t('saveAndContinue') )} @@ -726,12 +714,10 @@ export default function ProjectSites({ variant="contained" className="formButton" > - {t('manageProjects:skip')} + {t('skip')}
- ) : ( - <> ); } diff --git a/src/features/user/ManageProjects/components/ProjectSpending.tsx b/src/features/user/ManageProjects/components/ProjectSpending.tsx index c9619318df..a9fcd0499b 100644 --- a/src/features/user/ManageProjects/components/ProjectSpending.tsx +++ b/src/features/user/ManageProjects/components/ProjectSpending.tsx @@ -1,7 +1,7 @@ import React, { ReactElement } from 'react'; import styles from './../StepForm.module.scss'; import { useForm, Controller } from 'react-hook-form'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import BackArrow from '../../../../../public/assets/images/icons/headerIcons/BackArrow'; import { useDropzone } from 'react-dropzone'; import { @@ -60,7 +60,8 @@ export default function ProjectSpending({ userLang, projectGUID, }: ProjectSpendingProps): ReactElement { - const { t, ready } = useTranslation(['manageProjects', 'common']); + const tManageProjects = useTranslations('ManageProjects'); + const tCommon = useTranslations('Common'); const { redirect, setErrors } = React.useContext(ErrorHandlingContext); const { formState: { errors, isDirty }, @@ -137,9 +138,9 @@ export default function ProjectSpending({ }, onDropRejected: (err) => { if (err[0].errors[0].code === 'file-too-large') { - setErrorMessage(t('manageProjects:fileSizeLimit')); + setErrorMessage(tManageProjects('fileSizeLimit')); } else if (err[0].errors[0].code === 'file-invalid-type') { - setErrorMessage(t('manageProjects:filePDFOnly')); + setErrorMessage(tManageProjects('filePDFOnly')); } }, }); @@ -189,7 +190,7 @@ export default function ProjectSpending({ const fiveYearsAgo = new Date(); fiveYearsAgo.setFullYear(fiveYearsAgo.getFullYear() - 5); - return ready ? ( + return ( {uploadedFiles && uploadedFiles.length > 0 ? ( @@ -247,7 +248,7 @@ export default function ProjectSpending({ control={control} defaultValue={new Date()} rules={{ - required: t('manageProjects:spendingYearValidation'), + required: tManageProjects('spendingYearValidation'), }} render={({ field: { onChange, value } }) => ( ( value > 0, }} render={({ field: { onChange, value, onBlur } }) => (

- {t('manageProjects:dragInPdf')} + {tManageProjects('dragInPdf')}

@@ -327,10 +328,10 @@ export default function ProjectSpending({

- {t('manageProjects:dragInPdf')} + {tManageProjects('dragInPdf')}

@@ -342,7 +343,7 @@ export default function ProjectSpending({ onClick={() => setShowForm(true)} >

- {t('manageProjects:addAnotherYear')} + {tManageProjects('addAnotherYear')}

)} @@ -360,7 +361,7 @@ export default function ProjectSpending({ className="formButton" startIcon={} > -

{t('manageProjects:backToSites')}

+

{tManageProjects('backToSites')}

@@ -386,12 +387,10 @@ export default function ProjectSpending({ variant="contained" onClick={() => handleNext(ProjectCreationTabs.REVIEW)} > - {t('manageProjects:skip')} + {tManageProjects('skip')} - ) : ( - <> ); } diff --git a/src/features/user/ManageProjects/components/SubmitForReview.tsx b/src/features/user/ManageProjects/components/SubmitForReview.tsx index fac4803664..459fa8b2af 100644 --- a/src/features/user/ManageProjects/components/SubmitForReview.tsx +++ b/src/features/user/ManageProjects/components/SubmitForReview.tsx @@ -3,7 +3,7 @@ import BackArrow from '../../../../../public/assets/images/icons/headerIcons/Bac import styles from './../StepForm.module.scss'; import SubmitForReviewImage from '../../../../../public/assets/images/icons/manageProjects/SubmitForReviewImage'; import UnderReview from '../../../../../public/assets/images/icons/manageProjects/UnderReview'; -import { useTranslation, Trans } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import NotReviewed from '../../../../../public/assets/images/icons/manageProjects/NotReviewed'; import router from 'next/router'; import { Button, FormControlLabel, Switch } from '@mui/material'; @@ -18,12 +18,12 @@ function SubmitForReview({ projectDetails, handlePublishChange, }: SubmitForReviewProps): ReactElement { - const { t, ready } = useTranslation(['manageProjects']); + const t = useTranslations('ManageProjects'); function UnderReviewComponent() { return ( -

- {t('manageProjects:projectUnderReview')} -

+

{t('projectUnderReview')}

@@ -67,21 +65,20 @@ function SubmitForReview({
- }} - /> + {t.rich('reviewNote', { + bold: (chunks) => {chunks}, + })}
    -
  • {t('manageProjects:legalAccreditation')}
  • -
  • {t('manageProjects:taxExemption')}
  • -
  • {t('manageProjects:annualReport')}
  • -
  • {t('manageProjects:financialReport')}
  • -
  • {t('manageProjects:PlantingReport')}
  • +
  • {t('legalAccreditation')}
  • +
  • {t('taxExemption')}
  • +
  • {t('annualReport')}
  • +
  • {t('financialReport')}
  • +
  • {t('PlantingReport')}
-

- {t('manageProjects:projectForReview')} -

+

{t('projectForReview')}

@@ -123,7 +118,7 @@ function SubmitForReview({ variant="contained" onClick={() => router.push('/profile/projects')} > -

{t('manageProjects:exit')}

+

{t('exit')}

@@ -137,9 +132,7 @@ function SubmitForReview({
-

- {t('manageProjects:acceptedReview')} -

+

{t('acceptedReview')}

@@ -167,9 +160,7 @@ function SubmitForReview({
-

- {t('manageProjects:deniedReview')} -

+

{t('deniedReview')}

@@ -178,13 +169,13 @@ function SubmitForReview({ variant="outlined" startIcon={} > -

{t('manageProjects:backToSpending')}

+

{t('backToSpending')}

@@ -193,17 +184,17 @@ function SubmitForReview({ switch (projectDetails?.verificationStatus) { case 'incomplete': - return ready ? : <>; + return ; case 'pending': - return ready ? : <>; + return ; case 'processing': - return ready ? : <>; + return ; case 'accepted': - return ready ? : <>; + return ; case 'denied': - return ready ? : <>; + return ; default: - return ready ? : <>; + return ; } } diff --git a/src/features/user/ManageProjects/index.tsx b/src/features/user/ManageProjects/index.tsx index a2d12559b9..09ad2344a4 100644 --- a/src/features/user/ManageProjects/index.tsx +++ b/src/features/user/ManageProjects/index.tsx @@ -12,7 +12,7 @@ import { } from '../../../utils/apiRequests/api'; import SubmitForReview from './components/SubmitForReview'; import { useRouter } from 'next/router'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { ErrorHandlingContext } from '../../common/Layout/ErrorHandlingContext'; import TabbedView from '../../common/Layout/TabbedView'; import { TabItem } from '../../common/Layout/TabbedView/TabbedViewTypes'; @@ -40,7 +40,8 @@ export default function ManageProjects({ token, project, }: ManageProjectsProps) { - const { t, i18n } = useTranslation(['manageProjects']); + const t = useTranslations('ManageProjects'); + const locale = useLocale(); const { tenantConfig } = useTenant(); const { redirect, setErrors } = React.useContext(ErrorHandlingContext); const { logoutUser } = useUserProps(); @@ -105,7 +106,13 @@ export default function ManageProjects({ try { const res = await putAuthenticatedRequest< ProfileProjectTrees | ProfileProjectConservation - >(tenantConfig?.id, `/app/projects/${projectGUID}`, submitData, token, logoutUser); + >( + tenantConfig?.id, + `/app/projects/${projectGUID}`, + submitData, + token, + logoutUser + ); setProjectDetails(res); setIsUploadingData(false); } catch (err) { @@ -123,7 +130,13 @@ export default function ManageProjects({ try { const res = await putAuthenticatedRequest< ProfileProjectTrees | ProfileProjectConservation - >(tenantConfig?.id,`/app/projects/${projectGUID}`, submitData, token, logoutUser); + >( + tenantConfig?.id, + `/app/projects/${projectGUID}`, + submitData, + token, + logoutUser + ); setProjectDetails(res); setIsUploadingData(false); } catch (err) { @@ -196,32 +209,32 @@ export default function ManageProjects({ if (router.query.type && project) { setTabList([ { - label: t('manageProjects:basicDetails'), + label: t('basicDetails'), link: `/profile/projects/${projectGUID}?type=basic-details`, step: ProjectCreationTabs.BASIC_DETAILS, }, { - label: t('manageProjects:projectMedia'), + label: t('projectMedia'), link: `/profile/projects/${projectGUID}?type=media`, step: ProjectCreationTabs.PROJECT_MEDIA, }, { - label: t('manageProjects:detailedAnalysis'), + label: t('detailedAnalysis'), link: `/profile/projects/${projectGUID}?type=detail-analysis`, step: ProjectCreationTabs.DETAILED_ANALYSIS, }, { - label: t('manageProjects:projectSites'), + label: t('projectSites'), link: `/profile/projects/${projectGUID}?type=project-sites`, step: ProjectCreationTabs.PROJECT_SITES, }, { - label: t('manageProjects:projectSpending'), + label: t('projectSpending'), link: `/profile/projects/${projectGUID}?type=project-spendings`, step: ProjectCreationTabs.PROJECT_SPENDING, }, { - label: t('manageProjects:review'), + label: t('review'), link: `/profile/projects/${projectGUID}?type=review`, step: ProjectCreationTabs.REVIEW, }, @@ -229,7 +242,7 @@ export default function ManageProjects({ } else if (router.query.purpose === 'trees' && !project) { setTabList([ { - label: t('manageProjects:basicDetails'), + label: t('basicDetails'), link: '/profile/projects/new-project?purpose=trees', step: ProjectCreationTabs.BASIC_DETAILS, }, @@ -237,7 +250,7 @@ export default function ManageProjects({ } else if (router.query.purpose === 'conservation' && !project) { setTabList([ { - label: t('manageProjects:basicDetails'), + label: t('basicDetails'), link: '/profile/projects/new-project?purpose=conservation', step: ProjectCreationTabs.BASIC_DETAILS, }, @@ -245,13 +258,13 @@ export default function ManageProjects({ } else { setTabList([ { - label: t('manageProjects:projectType'), + label: t('projectType'), link: '/profile/projects/new-project', step: ProjectCreationTabs.PROJECT_TYPE, }, ]); } - }, [tabSelected, router.query.purpose, i18n?.language]); + }, [tabSelected, router.query.purpose, locale]); function getStepContent() { switch (tabSelected) { @@ -340,25 +353,20 @@ export default function ManageProjects({ return ( -
{t('manageProjects:addProjetDescription')}
+
{t('addProjetDescription')}
-
{t('manageProjects:important')}
-
{t('manageProjects:englishOnly')}
+
{t('important')}
+
{t('englishOnly')}
{' '} - {t('manageProjects:addProjetContact')}{' '} - {t('manageProjects:supportLink')}{' '} + {t('addProjetContact')} {t('supportLink')}{' '}
) diff --git a/src/features/user/PlanetCash/components/AccountDetails.tsx b/src/features/user/PlanetCash/components/AccountDetails.tsx index 51e7e8e8ee..11aa405082 100644 --- a/src/features/user/PlanetCash/components/AccountDetails.tsx +++ b/src/features/user/PlanetCash/components/AccountDetails.tsx @@ -1,6 +1,6 @@ import { ReactElement } from 'react'; import { styled, Grid, Button, Divider } from '@mui/material'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import getFormatedCurrency from '../../../../utils/countryCurrency/getFormattedCurrency'; import { getDonationUrl } from '../../../../utils/getDonationUrl'; import { useUserProps } from '../../../common/Layout/UserPropsContext'; @@ -63,7 +63,8 @@ interface AccountDetailsProps { } const AccountDetails = ({ account }: AccountDetailsProps): ReactElement => { - const { t, i18n } = useTranslation('planetcash'); + const t = useTranslations('PlanetCash'); + const locale = useLocale(); const { token } = useUserProps(); const { tenantConfig } = useTenant(); @@ -93,7 +94,7 @@ const AccountDetails = ({ account }: AccountDetailsProps): ReactElement => { {getFormatedCurrency( - i18n.language, + locale, account.currency, (account.balance + account.creditLimit) / 100 )} @@ -121,7 +122,7 @@ const AccountDetails = ({ account }: AccountDetailsProps): ReactElement => {

{t('labelBalance')}

{getFormatedCurrency( - i18n.language, + locale, account.currency, account.balance / 100 )} @@ -132,7 +133,7 @@ const AccountDetails = ({ account }: AccountDetailsProps): ReactElement => {

{t('labelCreditLimit')}

{getFormatedCurrency( - i18n.language, + locale, account.currency, account.creditLimit / 100 )} diff --git a/src/features/user/PlanetCash/components/CreateAccountForm.tsx b/src/features/user/PlanetCash/components/CreateAccountForm.tsx index 42dbea6502..3a679e5c30 100644 --- a/src/features/user/PlanetCash/components/CreateAccountForm.tsx +++ b/src/features/user/PlanetCash/components/CreateAccountForm.tsx @@ -3,7 +3,7 @@ import { Button, CircularProgress } from '@mui/material'; import AutoCompleteCountry from '../../../common/InputTypes/AutoCompleteCountry'; import CustomSnackbar from '../../../common/CustomSnackbar'; import StyledForm from '../../../common/Layout/StyledForm'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import FormHeader from '../../../common/Layout/Forms/FormHeader'; import { postAuthenticatedRequest } from '../../../../utils/apiRequests/api'; import { useUserProps } from '../../../common/Layout/UserPropsContext'; @@ -26,7 +26,8 @@ const CreateAccountForm = ({ allowedCountries, isPlanetCashActive, }: Props): ReactElement | null => { - const { t, ready } = useTranslation(['planetcash', 'country']); + const tPlanetCash = useTranslations('PlanetCash'); + const tCountry = useTranslations('Country'); const { setAccounts } = usePlanetCash(); const [country, setCountry] = useState(''); const [isProcessing, setIsProcessing] = useState(false); @@ -64,15 +65,15 @@ const CreateAccountForm = ({ switch (error.message) { case 'duplicate_account': _serializedErrors.push({ - message: t('accountError.duplicate_account', { - country: t(`country:${country?.toLowerCase()}`), + message: tPlanetCash('accountError.duplicate_account', { + country: tCountry(country?.toLowerCase()), }), }); break; case 'active_account_exists': _serializedErrors.push({ - message: t('accountError.active_account_exists'), + message: tPlanetCash('accountError.active_account_exists'), }); break; @@ -90,50 +91,47 @@ const CreateAccountForm = ({ setIsAccountCreated(false); }; - if (ready) { - return ( - <> - -

{t('createAccountTitleText')}

-
- -
- -
-

{t('planetCashTerms1')}

-

{t('planetCashTerms2')}

-

{t('planetCashTerms3')}

- -
- {isAccountCreated && ( - + +

{tPlanetCash('createAccountTitleText')}

+
+ +
+ - )} - - ); - } - return null; +
+

{tPlanetCash('planetCashTerms1')}

+

{tPlanetCash('planetCashTerms2')}

+

{tPlanetCash('planetCashTerms3')}

+ +
+ {isAccountCreated && ( + + )} + + ); }; export default CreateAccountForm; diff --git a/src/features/user/PlanetCash/components/NoPlanetCashAccount.tsx b/src/features/user/PlanetCash/components/NoPlanetCashAccount.tsx index f89331948b..4838628e4d 100644 --- a/src/features/user/PlanetCash/components/NoPlanetCashAccount.tsx +++ b/src/features/user/PlanetCash/components/NoPlanetCashAccount.tsx @@ -1,29 +1,25 @@ import { ReactElement } from 'react'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { Button } from '@mui/material'; import { useRouter } from 'next/router'; import CenteredContainer from '../../../common/Layout/CenteredContainer'; const NoPlanetCashAccount = (): ReactElement | null => { - const { t, ready } = useTranslation('planetcash'); + const t = useTranslations('PlanetCash'); const router = useRouter(); const handleClick = () => { router.push('/profile/planetcash/new'); }; - if (ready) { - return ( - -

{t('noAccountsText')}

- -
- ); - } - - return null; + return ( + +

{t('noAccountsText')}

+ +
+ ); }; export default NoPlanetCashAccount; diff --git a/src/features/user/PlanetCash/index.tsx b/src/features/user/PlanetCash/index.tsx index 09747ce792..147564068e 100644 --- a/src/features/user/PlanetCash/index.tsx +++ b/src/features/user/PlanetCash/index.tsx @@ -5,7 +5,7 @@ import { useContext, useCallback, } from 'react'; -import { Trans, useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import DashboardView from '../../common/Layout/DashboardView'; import TabbedView from '../../common/Layout/TabbedView'; import { TabItem } from '../../common/Layout/TabbedView/TabbedViewTypes'; @@ -36,7 +36,8 @@ export default function PlanetCash({ step, setProgress, }: PlanetCashProps): ReactElement | null { - const { t, ready, i18n } = useTranslation('planetcash'); + const t = useTranslations('PlanetCash'); + const locale = useLocale(); const { tenantConfig } = useTenant(); const [tabConfig, setTabConfig] = useState([]); const { token, contextLoaded, logoutUser } = useUserProps(); @@ -124,7 +125,7 @@ export default function PlanetCash({ } }; useEffect(() => { - if (ready && accounts) { + if (accounts) { if (!accounts.length) { setTabConfig([ { @@ -147,31 +148,30 @@ export default function PlanetCash({ }, ]); } - }, [ready, accounts, i18n.language]); + }, [accounts, locale]); - return ready ? ( + return (

- - Use of this feature by Companies is subject to partnership with - Plant-for-the-Planet. Please contact{' '} - - partner@plant-for-the-planet.org - {' '} - for details. - + {t.rich('partnerSignupInfo', { + partnerEmailLink: (chunks) => ( + + {chunks} + + ), + })}

{t('description')}{' '} @@ -180,7 +180,7 @@ export default function PlanetCash({
@@ -194,5 +194,5 @@ export default function PlanetCash({ {renderStep()} - ) : null; + ); } diff --git a/src/features/user/PlanetCash/screens/CreateAccount.tsx b/src/features/user/PlanetCash/screens/CreateAccount.tsx index 8599950f84..212fff342f 100644 --- a/src/features/user/PlanetCash/screens/CreateAccount.tsx +++ b/src/features/user/PlanetCash/screens/CreateAccount.tsx @@ -3,7 +3,7 @@ import CreateAccountForm from '../components/CreateAccountForm'; import CenteredContainer from '../../../common/Layout/CenteredContainer'; import { usePlanetCash } from '../../../common/Layout/PlanetCashContext'; import { CountryType } from '../../../common/types/country'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import AccountListLoader from '../../../../../public/assets/images/icons/AccountListLoader'; const initialAllowedCountries: CountryType[] = [ @@ -17,7 +17,7 @@ const CreateAccount = (): ReactElement | null => { CountryType[] | null >(null); const { accounts, isPlanetCashActive } = usePlanetCash(); - const { t, ready } = useTranslation('planetcash'); + const t = useTranslations('PlanetCash'); // Prevents creating a duplicate planetcash account for a country. // This condition cannot currently happen, as the frontend prevents users from creating multiple planet cash accounts @@ -44,9 +44,7 @@ const CreateAccount = (): ReactElement | null => { /> ) : ( - - {ready && t('accountQuotaReachedText')} - + {t('accountQuotaReachedText')} ); } diff --git a/src/features/user/PlanetCash/screens/Transactions.tsx b/src/features/user/PlanetCash/screens/Transactions.tsx index f15eb915ce..a76bb17f56 100644 --- a/src/features/user/PlanetCash/screens/Transactions.tsx +++ b/src/features/user/PlanetCash/screens/Transactions.tsx @@ -5,7 +5,7 @@ import { useEffect, useCallback, } from 'react'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import AccountRecord from '../../Account/components/AccountRecord'; import TransactionListLoader from '../../../../../public/assets/images/icons/TransactionListLoader'; import { Button, CircularProgress } from '@mui/material'; @@ -25,7 +25,7 @@ interface TransactionsProps { const Transactions = ({ setProgress, }: TransactionsProps): ReactElement | null => { - const { t } = useTranslation('me'); + const t = useTranslations('Me'); const { token, contextLoaded, logoutUser } = useUserProps(); const { tenantConfig } = useTenant(); const { redirect, setErrors } = useContext(ErrorHandlingContext); diff --git a/src/features/user/Profile/components/ContributionStats/ConservationButton.tsx b/src/features/user/Profile/components/ContributionStats/ConservationButton.tsx index d2ba6275fe..06cf7f9860 100644 --- a/src/features/user/Profile/components/ContributionStats/ConservationButton.tsx +++ b/src/features/user/Profile/components/ContributionStats/ConservationButton.tsx @@ -4,7 +4,7 @@ import { ArrowSvg, } from '../../../../../../public/assets/images/ProfilePageIcons'; import myForestStyles from '../../styles/MyForest.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { ReactElement } from 'react'; import { useMyForest } from '../../../../common/Layout/MyForestContext'; import theme from '../../../../../theme/themeProperties'; @@ -24,7 +24,8 @@ const ConservationButton = ({ setIsTreePlantedButtonActive, } = useMyForest(); - const { t, i18n } = useTranslation(['profile']); + const t = useTranslations('Profile'); + const locale = useLocale(); const handleClick = () => { if (isConservedButtonActive) { @@ -55,12 +56,12 @@ const ConservationButton = ({ />

- {t('profile:myForestMap.conservation')} + {t('myForestMap.conservation')}
- {conservedArea ? getFormattedNumber(i18n.language, conservedArea) : 0} + {conservedArea ? getFormattedNumber(locale, conservedArea) : 0}
{'m²'}
{conservedArea !== null && diff --git a/src/features/user/Profile/components/ContributionStats/DonationInfo.tsx b/src/features/user/Profile/components/ContributionStats/DonationInfo.tsx index 09000a93b4..d6fee8aa1d 100644 --- a/src/features/user/Profile/components/ContributionStats/DonationInfo.tsx +++ b/src/features/user/Profile/components/ContributionStats/DonationInfo.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import myForestStyles from '../../styles/MyForest.module.scss'; import { ProjectsSvg, @@ -15,7 +15,7 @@ const DonationInfo = ({ donations, }: DonationInfoProps): ReactElement => { const { darkBlackColor } = theme; - const { t } = useTranslation(['profile']); + const t = useTranslations('Profile'); return (
@@ -24,7 +24,7 @@ const DonationInfo = ({
- {t('profile:myForestMap.projects')} + {t('myForestMap.projects')}
{`${ @@ -37,7 +37,7 @@ const DonationInfo = ({
- {t('profile:myForestMap.countries')} + {t('myForestMap.countries')}
{`${ @@ -50,7 +50,7 @@ const DonationInfo = ({
- {t('profile:myForestMap.donations')} + {t('myForestMap.donations')}
{`${ diff --git a/src/features/user/Profile/components/ContributionStats/PlantedTreesButton.tsx b/src/features/user/Profile/components/ContributionStats/PlantedTreesButton.tsx index f364657991..5520df141c 100644 --- a/src/features/user/Profile/components/ContributionStats/PlantedTreesButton.tsx +++ b/src/features/user/Profile/components/ContributionStats/PlantedTreesButton.tsx @@ -1,6 +1,6 @@ import { PlantedTreesSvg } from '../../../../../../public/assets/images/ProfilePageIcons'; import myForestStyles from '../../styles/MyForest.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { useMyForest } from '../../../../common/Layout/MyForestContext'; import theme from '../../../../../theme/themeProperties'; import { getFormattedNumber } from '../../../../../utils/getFormattedNumber'; @@ -12,7 +12,8 @@ export interface PlantedTreesButtonProps { const PlantedTreesButton = ({ plantedTrees }: PlantedTreesButtonProps) => { const { light, primaryDarkColorX } = theme; const { isTreePlantedButtonActive } = useMyForest(); - const { t, i18n } = useTranslation(['profile']); + const t = useTranslations('Profile'); + const locale = useLocale(); return (
{ />
- {t('profile:myForestMap.treesPlanted')} + {t('myForestMap.treesPlanted')}
-
{plantedTrees ? getFormattedNumber(i18n.language, plantedTrees) : 0}
+
{plantedTrees ? getFormattedNumber(locale, plantedTrees) : 0}
); diff --git a/src/features/user/Profile/components/ContributionStats/RestoredButton.tsx b/src/features/user/Profile/components/ContributionStats/RestoredButton.tsx index 852e069682..d5148fb110 100644 --- a/src/features/user/Profile/components/ContributionStats/RestoredButton.tsx +++ b/src/features/user/Profile/components/ContributionStats/RestoredButton.tsx @@ -5,7 +5,7 @@ import { } from '../../../../../../public/assets/images/ProfilePageIcons'; import { ReactElement } from 'react'; import myForestStyles from '../../styles/MyForest.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { useMyForest } from '../../../../common/Layout/MyForestContext'; import theme from '../../../../../theme/themeProperties'; import { getFormattedNumber } from '../../../../../utils/getFormattedNumber'; @@ -20,10 +20,11 @@ const RestoredButton = ({ plantedTrees, }: RestoredButtonProps): ReactElement => { const { primaryDarkColorX, light } = theme; - const { t, i18n, ready } = useTranslation(['profile']); + const t = useTranslations('Profile'); + const locale = useLocale(); const { isTreePlantedButtonActive } = useMyForest(); - return ready ? ( + return (
- {t('profile:myForestMap.restored')} + {t('myForestMap.restored')}
-
{restoredArea ? getFormattedNumber(i18n.language, restoredArea) : 0}
+
+ {restoredArea ? getFormattedNumber(locale, restoredArea) : 0} +
{'m²'}
{restoredArea !== null && @@ -64,8 +67,6 @@ const RestoredButton = ({ )}
- ) : ( - <> ); }; diff --git a/src/features/user/Profile/components/MyContributions/microComponents/AddTargetModal.tsx b/src/features/user/Profile/components/MyContributions/microComponents/AddTargetModal.tsx index a7ddf616c8..74eb802c6b 100644 --- a/src/features/user/Profile/components/MyContributions/microComponents/AddTargetModal.tsx +++ b/src/features/user/Profile/components/MyContributions/microComponents/AddTargetModal.tsx @@ -4,7 +4,7 @@ import { useForm, Controller } from 'react-hook-form'; import Fade from '@mui/material/Fade'; import styles from '../../../../../common/RedeemCode/style/RedeemModal.module.scss'; import MaterialTextField from '../../../../../common/InputTypes/MaterialTextField'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { putAuthenticatedRequest } from '../../../../../../utils/apiRequests/api'; import { ThemeContext } from '../../../../../../theme/themeContext'; import { useUserProps } from '../../../../../common/Layout/UserPropsContext'; @@ -26,7 +26,7 @@ export default function AddTargetModal({ handleAddTargetModalClose, }: AddTargetModalProps) { // External imports - const { t, ready } = useTranslation(['me']); + const t = useTranslations('Me'); const { user, token, contextLoaded, setUser, logoutUser } = useUserProps(); const { control, @@ -75,7 +75,7 @@ export default function AddTargetModal({ if (!addTargetModalOpen) setIsLoading(false); }; - return ready && user ? ( + return user ? (
- {t('me:setTarget')}{' '} + {t('setTarget')}{' '}
{errors.target && ( - {t('me:targetErrorMessage')} + {t('targetErrorMessage')} )} {errors.target ? (
- {t('me:targetSave')} + {t('targetSave')}
) : ( )} diff --git a/src/features/user/Profile/components/MyContributions/microComponents/ConservationContributions.tsx b/src/features/user/Profile/components/MyContributions/microComponents/ConservationContributions.tsx index 797930396c..4ab1d4b479 100644 --- a/src/features/user/Profile/components/MyContributions/microComponents/ConservationContributions.tsx +++ b/src/features/user/Profile/components/MyContributions/microComponents/ConservationContributions.tsx @@ -1,5 +1,5 @@ import myForestStyles from '../../../styles/MyForest.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import ContributedProjectList from './ContributedProjectList'; import { ReactElement } from 'react'; import { TreeContributedProjectListProps } from '../../../../../common/types/myForest'; @@ -15,14 +15,14 @@ const ConservationContributions = ({ hasNextPage, handleFetchNextPage, }: AreaConservedProjectListProps): ReactElement => { - const { t, ready } = useTranslation(['profile']); + const t = useTranslations('Profile'); const { conservationContribution } = useMyForest(); - return ready ? ( + return (
-
{t('profile:myContributions.areaConserved')}
+
{t('myContributions.areaConserved')}
@@ -35,8 +35,6 @@ const ConservationContributions = ({ />
- ) : ( - <> ); }; diff --git a/src/features/user/Profile/components/MyContributions/microComponents/ContributedProjectList.tsx b/src/features/user/Profile/components/MyContributions/microComponents/ContributedProjectList.tsx index 8de5a467f4..2d86e17fbc 100644 --- a/src/features/user/Profile/components/MyContributions/microComponents/ContributedProjectList.tsx +++ b/src/features/user/Profile/components/MyContributions/microComponents/ContributedProjectList.tsx @@ -1,5 +1,5 @@ import myForestStyles from '../../../styles/MyForest.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { ReactElement } from 'react'; import { Button } from '@mui/material'; import ContributedToProject from './ContributedToProject'; @@ -22,7 +22,7 @@ const ContributedProjectList = ({ }: ContributedProjectListProps): ReactElement => { const { isConservedButtonActive, isProcessing, setIsProcessing } = useMyForest(); - const { t } = useTranslation(['profile']); + const t = useTranslations('Profile'); return contributionProjectList ? (
{contributionProjectList.map((singlePage) => { @@ -74,8 +74,8 @@ const ContributedProjectList = ({ }} > {isProcessing - ? t('profile:myContributions.loadingContribution') - : t('profile:myContributions.loadMoreContribution')} + ? t('myContributions.loadingContribution') + : t('myContributions.loadMoreContribution')}
)} diff --git a/src/features/user/Profile/components/MyContributions/microComponents/PlantedTreesContributions.tsx b/src/features/user/Profile/components/MyContributions/microComponents/PlantedTreesContributions.tsx index 2c98177509..931d70ce15 100644 --- a/src/features/user/Profile/components/MyContributions/microComponents/PlantedTreesContributions.tsx +++ b/src/features/user/Profile/components/MyContributions/microComponents/PlantedTreesContributions.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { useState } from 'react'; import Button from '@mui/material/Button'; import myForestStyles from '../../../styles/MyForest.module.scss'; @@ -17,7 +17,7 @@ const PlantedTreesContributions = ({ hasNextPage, }: TreeContributedProjectListProps): ReactElement => { const { asPath } = useRouter(); - const { t } = useTranslation(['profile']); + const t = useTranslations('Profile'); const [isAddTargetModalOpen, setIsAddTargetModalOpen] = useState(false); const { treePlantationContribution, additionalInfoRelatedToContributions } = useMyForest(); @@ -93,7 +93,7 @@ const PlantedTreesContributions = ({ onClick={handleAddTargetModalOpen} className={myForestStyles.customEditButton} > - {t('profile:myTreeCounter.editTarget')} + {t('myTreeCounter.editTarget')} ) : ( @@ -101,7 +101,7 @@ const PlantedTreesContributions = ({ )}
- {t('profile:myContributions.treesPlantedAndAreaRestored')} + {t('myContributions.treesPlantedAndAreaRestored')}

{ - const { t, ready } = useTranslation(['profile']); - return ready ? ( + const t = useTranslations('Profile'); + const tCountry = useTranslations('Country'); + return (
{projectName}
{tpoName || countryName ? (
-
{t('country:' + countryName)}
+
{tCountry(countryName)}
.
@@ -40,7 +41,7 @@ const ProjectInfoAndContributionDate = ({ @@ -48,7 +49,7 @@ const ProjectInfoAndContributionDate = ({ {giftSenderName ? (
- {t('profile:myContributions.receivedFrom', { + {t('myContributions.receivedFrom', { name: `${giftSenderName}`, })}
@@ -67,8 +68,6 @@ const ProjectInfoAndContributionDate = ({ <> )}
- ) : ( - <> ); }; diff --git a/src/features/user/Profile/components/MyContributions/microComponents/ProjectsContainer.tsx b/src/features/user/Profile/components/MyContributions/microComponents/ProjectsContainer.tsx index e8d494ed37..4e767b914b 100644 --- a/src/features/user/Profile/components/MyContributions/microComponents/ProjectsContainer.tsx +++ b/src/features/user/Profile/components/MyContributions/microComponents/ProjectsContainer.tsx @@ -3,7 +3,7 @@ import React from 'react'; import LazyLoad from 'react-lazyload'; import NotFound from '../../../../../../../public/assets/images/NotFound'; import ProjectLoader from '../../../../../common/ContentLoaders/Projects/ProjectLoader'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import styles from '../../../styles/ProjectsContainer.module.scss'; import { getRequest } from '../../../../../../utils/apiRequests/api'; import { ErrorHandlingContext } from '../../../../../common/Layout/ErrorHandlingContext'; @@ -24,7 +24,8 @@ interface Props { export default function ProjectsContainer({ profile }: Props) { const { tenantConfig } = useTenant(); - const { t, ready, i18n } = useTranslation(['donate', 'manageProjects']); + const t = useTranslations('Donate'); + const locale = useLocale(); const [projects, setProjects] = React.useState([]); const { setErrors } = React.useContext(ErrorHandlingContext); @@ -34,7 +35,7 @@ export default function ProjectsContainer({ profile }: Props) { `${tenantConfig?.id}`, `/app/profiles/${profile.id}/projects`, { - locale: i18n.language, + locale: locale, } ); setProjects(projects); @@ -46,9 +47,9 @@ export default function ProjectsContainer({ profile }: Props) { // This effect is used to get and update UserInfo if the isAuthenticated changes React.useEffect(() => { loadProjects(); - }, [i18n.language]); + }, [locale]); - return ready ? ( + return (
{/*
{t('manageProjects:manageProjects')}
*/}
@@ -56,12 +57,12 @@ export default function ProjectsContainer({ profile }: Props) {
-
{t('donate:noProjectsFound')}
+
{t('noProjectsFound')}
) : (
-
{t('donate:projects')}
+
{t('projects')}
{projects .filter( @@ -100,5 +101,5 @@ export default function ProjectsContainer({ profile }: Props) { )}
- ) : null; + ); } diff --git a/src/features/user/Profile/components/MyContributions/microComponents/TreesOrUnitAreaAndDonateOption.tsx b/src/features/user/Profile/components/MyContributions/microComponents/TreesOrUnitAreaAndDonateOption.tsx index 41a72befac..8c1bbc5dcd 100644 --- a/src/features/user/Profile/components/MyContributions/microComponents/TreesOrUnitAreaAndDonateOption.tsx +++ b/src/features/user/Profile/components/MyContributions/microComponents/TreesOrUnitAreaAndDonateOption.tsx @@ -1,5 +1,5 @@ import myForestStyles from '../../../styles/MyForest.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { getDonationUrl } from '../../../../../../utils/getDonationUrl'; import { ParamsContext } from '../../../../../common/Layout/QueryParamsContext'; import { useUserProps } from '../../../../../common/Layout/UserPropsContext'; @@ -33,7 +33,7 @@ const TreesOrUnitAreaAndDonateOption = ({ countryName, tpoName, }: TreesOrUnitAreaAndDonateOptionProps) => { - const { t } = useTranslation(['profile']); + const t = useTranslations('Profile'); const { embed } = useContext(ParamsContext); const { token } = useUserProps(); const router = useRouter(); @@ -54,13 +54,13 @@ const TreesOrUnitAreaAndDonateOption = ({ const _checkConditions = () => { if (gift && asPath === '/profile') { - const _label = t('profile:myContributions.donate'); + const _label = t('myContributions.donate'); return _label; } else if (asPath !== '/profile') { - const _label = t('profile:myContributions.donate'); + const _label = t('myContributions.donate'); return _label; } else { - const _label = t('profile:myContributions.donateAgain'); + const _label = t('myContributions.donateAgain'); return _label; } }; @@ -69,28 +69,28 @@ const TreesOrUnitAreaAndDonateOption = ({
diff --git a/src/features/user/Profile/components/MyForestMap/microComponents/ClusterMarker.tsx b/src/features/user/Profile/components/MyForestMap/microComponents/ClusterMarker.tsx index 07aab97f09..cedfb6fcc2 100644 --- a/src/features/user/Profile/components/MyForestMap/microComponents/ClusterMarker.tsx +++ b/src/features/user/Profile/components/MyForestMap/microComponents/ClusterMarker.tsx @@ -1,5 +1,5 @@ import { Marker } from 'react-map-gl'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { ReactElement, useState } from 'react'; import { ConservationTreeSvg, @@ -17,7 +17,7 @@ export const TreePlantedClusterMarker = ({ mapRef, }: MarkerProps): ReactElement => { const { primaryDarkColorX } = theme; - const { t, ready } = useTranslation(['profile']); + const t = useTranslations('Profile'); const [showPopUp, setShowPopUp] = useState(false); const _totalTrees = @@ -32,7 +32,7 @@ export const TreePlantedClusterMarker = ({ geoJson?.properties?.plantProject?.unitType === 'm2' && geoJson?.properties?.purpose === 'trees'; - return ready ? ( + return ( <>
{_isRestoredArea - ? t('profile:myForestMap.area', { + ? t('myForestMap.area', { areaConserved: `${_unitArea}`, }) - : t('profile:myForestMap.plantedTree', { + : t('myForestMap.plantedTree', { count: Number(_totalTrees.toFixed(2)) || 0, })}
- ) : ( - <> ); }; @@ -80,9 +78,9 @@ export const ConservAreaClusterMarker = ({ const _unitArea = geoJson.properties.totalTrees || geoJson.properties.quantity; const { lightBlueColor } = theme; - const { t, ready } = useTranslation(['profile']); + const t = useTranslations('Profile'); const [showPopUp, setShowPopUp] = useState(false); - return ready ? ( + return (
- {t('profile:myForestMap.area', { + {t('myForestMap.area', { areaConserved: `${_unitArea}`, })}
- ) : ( - <> ); }; diff --git a/src/features/user/Profile/components/MyForestMap/microComponents/PopUp.tsx b/src/features/user/Profile/components/MyForestMap/microComponents/PopUp.tsx index 9a25643d61..aa3fcfcc79 100644 --- a/src/features/user/Profile/components/MyForestMap/microComponents/PopUp.tsx +++ b/src/features/user/Profile/components/MyForestMap/microComponents/PopUp.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import MyForestMapStyle from '../../../styles/MyForestMap.module.scss'; import formatDate from '../../../../../../utils/countryCurrency/getFormattedDate'; import { Cluster, ClusterMarker } from '../../../../../common/types/map'; @@ -48,10 +48,10 @@ interface RegisteredTreePopUpProps { } export const PopUpLabel = () => { - const { t } = useTranslation(['profile']); + const t = useTranslations('Profile'); return (
- {t('profile:myForestMap.registered')} + {t('myForestMap.registered')}
); }; @@ -82,7 +82,7 @@ export const ClusterPopUpLabel = ({ geoJson, mapRef, }: ClusterPopUpLabelProps) => { - const { t, ready } = useTranslation(['profile']); + const t = useTranslations('Profile'); const { totalDonations, setTotalDonations, @@ -143,25 +143,21 @@ export const ClusterPopUpLabel = ({ } }, [geoJson, viewState, mapRef]); - return ready ? ( + return (
- {t('profile:myForestMap.totalDonation', { + {t('myForestMap.totalDonation', { count: Number(totalDonations), })} - {t('profile:myForestMap.totalProject', { + {t('myForestMap.totalProject', { count: totalProjects, })}
-
- {t('profile:myForestMap.zoomIn')} -
+
{t('myForestMap.zoomIn')}
- ) : ( - <> ); }; //this popup will be appear at last zoom level (except registered tree contribution marker) @@ -182,7 +178,8 @@ export const DonationPopUp = ({ }: DonationPopUpProps) => { const router = useRouter(); const { asPath } = router; - const { t, ready } = useTranslation(['profile', 'country']); + const t = useTranslations('Profile'); + const tCountry = useTranslations('Country'); const { embed } = useContext(ParamsContext); const { token } = useUserProps(); const { tenantConfig } = useTenant(); //default tenant @@ -201,7 +198,7 @@ export const DonationPopUp = ({ : (window.location.href = url); } }; - return ready ? ( + return (
- {t('profile:myForestMap.plantedTree', { + {t('myForestMap.plantedTree', { count: numberOfTrees, })}
.
-
- {t(`country:${country}`)} -
+
{tCountry(country)}
- {t('profile:myForestMap.tpoName', { + {t('myForestMap.tpoName', { tpo: tpoName, })}
@@ -268,7 +263,5 @@ export const DonationPopUp = ({
- ) : ( - <> ); }; diff --git a/src/features/user/Profile/components/MyForestMap/microComponents/SingleMarkerUnits.tsx b/src/features/user/Profile/components/MyForestMap/microComponents/SingleMarkerUnits.tsx index 443d4d7f0c..51c940b86e 100644 --- a/src/features/user/Profile/components/MyForestMap/microComponents/SingleMarkerUnits.tsx +++ b/src/features/user/Profile/components/MyForestMap/microComponents/SingleMarkerUnits.tsx @@ -1,5 +1,5 @@ import MyForestMapStyle from '../../../styles/MyForestMap.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; export interface SingleMarkerUnitsProps { isNormalTreeDonation: boolean; @@ -20,31 +20,21 @@ const SingleMarkerUnits = ({ isGiftContribution, isMergeContribution, }: SingleMarkerUnitsProps) => { - const { t, ready } = useTranslation(['profile']); - return ready ? ( + const t = useTranslations('Profile'); + return (
- {t( - isConservation || isRestorationTreePlantation - ? 'profile:myForestMap.area' - : '', - { + {(isConservation || isRestorationTreePlantation) && + t('myForestMap.area', { areaConserved: units, - } - )} - {t( - isNormalTreeDonation || - isRegisteredTree || - isGiftContribution || - isMergeContribution - ? 'profile:myForestMap.plantedTree' - : '', - { + })} + {(isNormalTreeDonation || + isRegisteredTree || + isGiftContribution || + isMergeContribution) && + t('myForestMap.plantedTree', { count: units, - } - )} + })}
- ) : ( - <> ); }; diff --git a/src/features/user/Profile/components/ProfileBox/index.tsx b/src/features/user/Profile/components/ProfileBox/index.tsx index bebd867cb5..da28b399d6 100644 --- a/src/features/user/Profile/components/ProfileBox/index.tsx +++ b/src/features/user/Profile/components/ProfileBox/index.tsx @@ -1,6 +1,6 @@ import { useState, ReactElement } from 'react'; import ProfileMainContainer from './microComponents/ProfileMainContainer'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import UserInfo from './microComponents/UserInfo'; import { ProfileProps } from '../../../../common/types/profile'; import UserFeatures from './microComponents/UserFeatures'; @@ -8,18 +8,16 @@ import { useTenant } from '../../../../common/Layout/TenantContext'; const Profile = ({ userProfile }: ProfileProps): ReactElement => { const { tenantConfig } = useTenant(); - const { t, ready } = useTranslation(['donate']); + const t = useTranslations('Donate'); const [showSocialButton, setShowSocialButton] = useState(false); const handleShare = () => { if (navigator?.share) { navigator ?.share({ - title: ready ? t('donate:shareTextTitle') : '', + title: t('shareTextTitle'), url: `${process.env.SCHEME}://${tenantConfig.config.tenantURL}/t/${userProfile.slug}`, - text: ready - ? t('donate:textToShare', { name: userProfile.displayName }) - : '', + text: t('textToShare', { name: userProfile.displayName }), }) .then(() => { console.log('thanks for sharing'); diff --git a/src/features/user/Profile/components/ProfileBox/microComponents/PublicProfileFeature.tsx b/src/features/user/Profile/components/ProfileBox/microComponents/PublicProfileFeature.tsx index c2d652acbb..29e16bdef0 100644 --- a/src/features/user/Profile/components/ProfileBox/microComponents/PublicProfileFeature.tsx +++ b/src/features/user/Profile/components/ProfileBox/microComponents/PublicProfileFeature.tsx @@ -3,7 +3,7 @@ import myProfileStyle from '../../../styles/MyProfile.module.scss'; import { SupportSvg } from '../../../../../../../public/assets/images/ProfilePageIcons'; import theme from '../../../../../../theme/themeProperties'; import { useRouter } from 'next/router'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { User } from '@planet-sdk/common'; import LinkIcon from '@mui/icons-material/Link'; @@ -15,7 +15,7 @@ export const PublicProfileFeature = ({ profile, }: NormalUserPublicProfileFeatureProps) => { const router = useRouter(); - const { t } = useTranslation(['profile']); + const t = useTranslations('Profile'); const { light } = theme; const handleSupport = (): void => { router.push(`/s/${profile?.slug}`); @@ -38,7 +38,7 @@ export const PublicProfileFeature = ({ startIcon={} onClick={handleSupport} > - {t('profile:myPublicProfile.support')} + {t('myPublicProfile.support')} )} @@ -49,7 +49,7 @@ export const PublicProfileFeature = ({ onClick={handleShareUrl} startIcon={} > - {t('profile:myPublicProfile.link')} + {t('myPublicProfile.link')} )} diff --git a/src/features/user/Profile/components/ProfileBox/microComponents/RedeemModal.tsx b/src/features/user/Profile/components/ProfileBox/microComponents/RedeemModal.tsx index d0a21d4fcf..eef42bf5f5 100644 --- a/src/features/user/Profile/components/ProfileBox/microComponents/RedeemModal.tsx +++ b/src/features/user/Profile/components/ProfileBox/microComponents/RedeemModal.tsx @@ -1,7 +1,7 @@ import Modal from '@mui/material/Modal'; import Fade from '@mui/material/Fade'; import React, { ReactElement } from 'react'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { postAuthenticatedRequest } from '../../../../../../utils/apiRequests/api'; import { ThemeContext } from '../../../../../../theme/themeContext'; import { useUserProps } from '../../../../../common/Layout/UserPropsContext'; @@ -23,7 +23,7 @@ export default function RedeemModal({ redeemModalOpen, handleRedeemModalClose, }: RedeemModal): ReactElement | null { - const { t, ready } = useTranslation(['redeem']); + const t = useTranslations('Redeem'); const { tenantConfig } = useTenant(); const { user, @@ -70,13 +70,13 @@ export default function RedeemModal({ switch (error.message) { case 'already_redeemed': _serializedErrors.push({ - message: t('redeem:alreadyRedeemed'), + message: t('alreadyRedeemed'), }); break; case 'invalid_code': _serializedErrors.push({ - message: t('redeem:invalidCode'), + message: t('invalidCode'), }); break; @@ -111,7 +111,7 @@ export default function RedeemModal({ }; const { theme } = React.useContext(ThemeContext); - return ready ? ( + return ( - ) : null; + ); } diff --git a/src/features/user/Profile/components/ProfileBox/microComponents/Share.tsx b/src/features/user/Profile/components/ProfileBox/microComponents/Share.tsx index 465ba13772..61ada05db3 100644 --- a/src/features/user/Profile/components/ProfileBox/microComponents/Share.tsx +++ b/src/features/user/Profile/components/ProfileBox/microComponents/Share.tsx @@ -1,7 +1,7 @@ import SharePlatforms from './SharePlatforms'; import { Button } from '@mui/material'; import { ShareSvg } from '../../../../../../../public/assets/images/ProfilePageIcons'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { UserFeaturesProps } from '../../../../../common/types/profile'; import theme from '../../../../../../theme/themeProperties'; import myProfileStyle from '../../../styles/MyProfile.module.scss'; @@ -12,7 +12,7 @@ const Share = ({ handleShare, }: UserFeaturesProps) => { const { light } = theme; - const { t } = useTranslation(['profile']); + const t = useTranslations('Profile'); return ( <> {showSocialButton ? ( @@ -27,7 +27,7 @@ const Share = ({ onClick={handleShare} className={myProfileStyle.shareButton} > - {showSocialButton ? '' : t('profile:feature.share')} + {showSocialButton ? '' : t('feature.share')} )} diff --git a/src/features/user/Profile/components/ProfileBox/microComponents/SharePlatforms.tsx b/src/features/user/Profile/components/ProfileBox/microComponents/SharePlatforms.tsx index 8ef56c093d..857f3f5914 100644 --- a/src/features/user/Profile/components/ProfileBox/microComponents/SharePlatforms.tsx +++ b/src/features/user/Profile/components/ProfileBox/microComponents/SharePlatforms.tsx @@ -3,7 +3,7 @@ import FacebookIcon from '@mui/icons-material/Facebook'; import LinkedInIcon from '@mui/icons-material/LinkedIn'; import CloseIcon from '@mui/icons-material/Close'; import { useTenant } from '../../../../../common/Layout/TenantContext'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import myProfilestyle from '../../../styles/MyProfile.module.scss'; import { ReactElement } from 'react'; import { SetState } from '../../../../../common/types/common'; @@ -23,14 +23,13 @@ const SharePlatforms = ({ }: SharePlatformsProps): ReactElement => { const { tenantConfig } = useTenant(); const { darkOliveGreen } = theme; - const { t, ready } = useTranslation(['donate']); + const t = useTranslations('Donate'); const linkToShare = `${tenantConfig.config.tenantURL}/t/${userProfile?.slug}`; - const textToShare = ready - ? t('donate:textToShare', { name: userProfile?.displayName }) - : ''; - const textToShareLinkedin = ready - ? t('donate:textToShareLinkedin', { name: userProfile?.displayName }) - : ''; + const textToShare = t('textToShare', { name: userProfile?.displayName }); + const textToShareLinkedin = t('textToShareLinkedin', { + name: userProfile?.displayName, + }); + const handleShare = (shareUrl: string) => { window.open(shareUrl, '_blank'); }; diff --git a/src/features/user/Profile/components/ProfileBox/microComponents/UserFeatures.tsx b/src/features/user/Profile/components/ProfileBox/microComponents/UserFeatures.tsx index 62eaeb1a73..1adb66d98d 100644 --- a/src/features/user/Profile/components/ProfileBox/microComponents/UserFeatures.tsx +++ b/src/features/user/Profile/components/ProfileBox/microComponents/UserFeatures.tsx @@ -3,7 +3,7 @@ import { Button } from '@mui/material'; import { useRouter } from 'next/router'; import Share from './Share'; import { UserFeaturesProps } from '../../../../../common/types/profile'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { useState } from 'react'; import RedeemModal from './RedeemModal'; import { @@ -22,7 +22,7 @@ const UserFeatures = ({ }: UserFeaturesProps) => { const { light } = theme; const router = useRouter(); - const { t } = useTranslation(['profile']); + const t = useTranslations('Profile'); const { setRefetchUserData } = useUserProps(); const [isRedeemModalOpen, setIsRedeemModalOpen] = useState(false); @@ -54,7 +54,7 @@ const UserFeatures = ({ startIcon={} onClick={handleRedeemModalOpen} > - {t('profile:feature.redeem')} + {t('feature.redeem')} } onClick={handleRegisterTree} > - {t('profile:feature.registerTree')} + {t('feature.registerTree')} )} diff --git a/src/features/user/Profile/components/ProfileBox/microComponents/UserInfo.tsx b/src/features/user/Profile/components/ProfileBox/microComponents/UserInfo.tsx index d5325194a2..fc0b867e8f 100644 --- a/src/features/user/Profile/components/ProfileBox/microComponents/UserInfo.tsx +++ b/src/features/user/Profile/components/ProfileBox/microComponents/UserInfo.tsx @@ -2,7 +2,7 @@ import myProfilestyle from '../../../styles/MyProfile.module.scss'; import getImageUrl from '../../../../../../utils/getImageURL'; import { useRouter } from 'next/router'; import { Avatar } from '@mui/material'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { ProfileProps } from '../../../../../common/types/profile'; import { ReactElement } from 'react'; import formatDate from '../../../../../../utils/countryCurrency/getFormattedDate'; @@ -13,10 +13,10 @@ import { } from '../../../../../../../public/assets/images/ProfilePageIcons'; const UserInfo = ({ userProfile }: ProfileProps): ReactElement => { - const { t, ready } = useTranslation(['profile']); + const t = useTranslations('Profile'); const router = useRouter(); - return ready ? ( + return ( <>
{userProfile?.image ? ( @@ -33,7 +33,7 @@ const UserInfo = ({ userProfile }: ProfileProps): ReactElement => { {userProfile?.displayName}
- {t('profile:myProfile.memberSince', { + {t('myProfile.memberSince', { date: `${formatDate(userProfile?.created)}`, })}
@@ -50,13 +50,11 @@ const UserInfo = ({ userProfile }: ProfileProps): ReactElement => { )}
- {t('profile:myProfile.userDescription', { + {t('myProfile.userDescription', { bio: userProfile?.bio, })}
- ) : ( - <> ); }; diff --git a/src/features/user/RegisterTrees/RegisterTrees/DrawMap.tsx b/src/features/user/RegisterTrees/RegisterTrees/DrawMap.tsx index 00979036ea..681c7ac957 100644 --- a/src/features/user/RegisterTrees/RegisterTrees/DrawMap.tsx +++ b/src/features/user/RegisterTrees/RegisterTrees/DrawMap.tsx @@ -3,7 +3,7 @@ import ReactMapboxGl, { ZoomControl } from 'react-mapbox-gl'; import DrawControl from 'react-mapbox-gl-draw'; import '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css'; import styles from '../RegisterModal.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import getMapStyle from '../../../../utils/maps/getMapStyle'; import { ViewportProps } from '../../../common/types/map'; @@ -45,7 +45,7 @@ export default function MapComponent({ } }); }, []); - const { t, ready } = useTranslation(['me', 'common']); + const t = useTranslations('Me'); const [drawing, setDrawing] = React.useState(false); const drawControlRef = React.useRef(null); @@ -85,52 +85,50 @@ export default function MapComponent({ return ( <> {' '} - {ready ? ( -
- {!drawing ? ( -
-
{ - setDrawing(true); - if (drawControlRef.current?.draw) - drawControlRef.current?.draw.changeMode('draw_polygon'); - }} - className="primaryButton" - style={{ maxWidth: '150px' }} - > - {t('me:startDrawing')} -
+
+ {!drawing ? ( +
+
{ + setDrawing(true); + if (drawControlRef.current?.draw) + drawControlRef.current?.draw.changeMode('draw_polygon'); + }} + className="primaryButton" + style={{ maxWidth: '150px' }} + > + {t('startDrawing')}
- ) : null} - - {/* NOTE: this functionality does not seem to work locally using React 18. +
+ ) : null} + + {/* NOTE: this functionality does not seem to work locally using React 18. To test, a temporary fix is to set `reactStrictMode=false` in next.config.js */} - - - -
- ) : null} + + + +
); } diff --git a/src/features/user/RegisterTrees/RegisterTrees/SingleContribution.tsx b/src/features/user/RegisterTrees/RegisterTrees/SingleContribution.tsx index b8c16f8fcd..f4b511335f 100644 --- a/src/features/user/RegisterTrees/RegisterTrees/SingleContribution.tsx +++ b/src/features/user/RegisterTrees/RegisterTrees/SingleContribution.tsx @@ -4,7 +4,7 @@ import React, { ReactElement } from 'react'; import CheckCircle from '../../../../../public/assets/images/icons/CheckCircle'; import styles from '../RegisterModal.module.scss'; import UploadImages from './UploadImages'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import formatDate from '../../../../utils/countryCurrency/getFormattedDate'; import { Button } from '@mui/material'; import { Image } from '@planet-sdk/common'; @@ -45,15 +45,15 @@ export default function SingleContribution({ contributionGUID, token, }; - const { t, ready } = useTranslation(['me', 'common']); - return ready && contribution !== null ? ( + const t = useTranslations('Me'); + return contribution !== null ? (

- {t('me:contribSuccess', { + {t('contribSuccess', { treeCount: contribution.treeCount, treeSpecies: contribution.treeSpecies, plantDate: formatDate(contribution.plantDate), @@ -80,7 +80,7 @@ export default function SingleContribution({ color="primary" style={{ maxWidth: '100px', marginTop: '24px' }} > - {t('me:save')} + {t('save')}

) : ( diff --git a/src/features/user/RegisterTrees/RegisterTrees/UploadImages.tsx b/src/features/user/RegisterTrees/RegisterTrees/UploadImages.tsx index 8917104e3f..74969cbbcc 100644 --- a/src/features/user/RegisterTrees/RegisterTrees/UploadImages.tsx +++ b/src/features/user/RegisterTrees/RegisterTrees/UploadImages.tsx @@ -7,7 +7,7 @@ import { } from '../../../../utils/apiRequests/api'; import getImageUrl from '../../../../utils/getImageURL'; import DeleteIcon from '../../../../../public/assets/images/icons/manageProjects/Delete'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { ErrorHandlingContext } from '../../../common/Layout/ErrorHandlingContext'; import { handleError, APIError, Image } from '@planet-sdk/common'; import { useUserProps } from '../../../common/Layout/UserPropsContext'; @@ -26,7 +26,7 @@ export default function UploadImages({ }: Props): ReactElement { const [uploadedImages, setUploadedImages] = React.useState([]); const [isUploadingData, setIsUploadingData] = React.useState(false); - const { t, ready } = useTranslation(['me', 'common']); + const t = useTranslations('Me'); const { setErrors } = React.useContext(ErrorHandlingContext); const { logoutUser } = useUserProps(); const { tenantConfig } = useTenant(); @@ -103,7 +103,7 @@ export default function UploadImages({ } }; - return ready ? ( + return ( <> {/* Change to field array of react hook form */} {uploadedImages && uploadedImages.length > 0 ? ( @@ -146,14 +146,12 @@ export default function UploadImages({ {isUploadingData ? (
) : ( - t('me:uploadPhotos') + t('uploadPhotos') )} -

{t('me:dragHere')}

+

{t('dragHere')}

- ) : ( - <> ); } diff --git a/src/features/user/RegisterTrees/RegisterTreesWidget.tsx b/src/features/user/RegisterTrees/RegisterTreesWidget.tsx index c0d89732e8..dc470cb980 100644 --- a/src/features/user/RegisterTrees/RegisterTreesWidget.tsx +++ b/src/features/user/RegisterTrees/RegisterTreesWidget.tsx @@ -8,7 +8,7 @@ import MapGL, { Marker, NavigationControl, } from 'react-map-gl'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { getAuthenticatedRequest, postAuthenticatedRequest, @@ -66,7 +66,7 @@ function RegisterTreesForm({ }: RegisterTreesFormProps) { const { user, token, contextLoaded, logoutUser, setRefetchUserData } = useUserProps(); - const { t, ready } = useTranslation(['me', 'common']); + const t = useTranslations('Me'); const EMPTY_STYLE = { version: 8, sources: {}, @@ -208,10 +208,10 @@ function RegisterTreesForm({ setRegistered(false); } } else { - setErrorMessage(ready ? t('me:locationMissing') : ''); + setErrorMessage(t('locationMissing')); } } else { - setErrorMessage(ready ? t('me:wentWrong') : ''); + setErrorMessage(t('wentWrong')); } }; async function loadProjects() { @@ -245,19 +245,19 @@ function RegisterTreesForm({ onSubmit={handleSubmit(submitRegisterTrees)} >
-

{t('me:registerTreesDescription')}

+

{t('registerTreesDescription')}

parseInt(value, 10) >= 1, }} render={({ field: { onChange, value, onBlur } }) => ( { e.target.value = e.target.value.replace(/[^0-9]/g, ''); @@ -270,7 +270,7 @@ function RegisterTreesForm({ helperText={ errors && errors.treeCount && errors.treeCount.message ? errors.treeCount.message - : t('me:moreThanOne') + : t('moreThanOne') } /> )} @@ -289,7 +289,7 @@ function RegisterTreesForm({ defaultValue={new Date()} render={({ field: { onChange, value } }) => ( } @@ -308,10 +308,10 @@ function RegisterTreesForm({ ( ( {isMultiple ? ( -

{t('me:drawPolygon')}

+

{t('drawPolygon')}

) : ( -

{t('me:selectLocation')}

+

{t('selectLocation')}

)}
@@ -420,7 +420,7 @@ function RegisterTreesForm({ {isUploadingData ? (
) : ( - t('me:registerButton') + t('registerButton') )}
diff --git a/src/features/user/RegisterTrees/index.tsx b/src/features/user/RegisterTrees/index.tsx index f5a39def69..081021d153 100644 --- a/src/features/user/RegisterTrees/index.tsx +++ b/src/features/user/RegisterTrees/index.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { ReactElement } from 'react'; import DashboardView from '../../common/Layout/DashboardView'; import SingleColumnView from '../../common/Layout/SingleColumnView'; @@ -6,9 +6,9 @@ import RegisterTreesWidget from './RegisterTreesWidget'; import CenteredContainer from '../../common/Layout/CenteredContainer'; export default function RegisterTrees(): ReactElement | null { - const { t, ready } = useTranslation('me'); + const t = useTranslations('Me'); - return ready ? ( + return ( @@ -16,5 +16,5 @@ export default function RegisterTrees(): ReactElement | null { - ) : null; + ); } diff --git a/src/features/user/Settings/ApiKey/ApiKeyForm.tsx b/src/features/user/Settings/ApiKey/ApiKeyForm.tsx index 359ee0033d..8886884903 100644 --- a/src/features/user/Settings/ApiKey/ApiKeyForm.tsx +++ b/src/features/user/Settings/ApiKey/ApiKeyForm.tsx @@ -9,7 +9,7 @@ import { ErrorHandlingContext } from '../../../common/Layout/ErrorHandlingContex import CopyToClipboard from '../../../common/CopyToClipboard'; import EyeIcon from '../../../../../public/assets/images/icons/EyeIcon'; import EyeDisabled from '../../../../../public/assets/images/icons/EyeDisabled'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import StyledForm from '../../../common/Layout/StyledForm'; import { Button, InputAdornment, TextField } from '@mui/material'; import { APIError, handleError } from '@planet-sdk/common'; @@ -34,7 +34,7 @@ const EyeButton = ({ isVisible, onClick }: EyeButtonParams) => { export default function ApiKey() { const { token, contextLoaded, logoutUser } = useUserProps(); - const { t } = useTranslation(['me']); + const t = useTranslations('Me'); const { tenantConfig } = useTenant(); const { setErrors } = React.useContext(ErrorHandlingContext); const [isUploadingData, setIsUploadingData] = React.useState(false); @@ -125,7 +125,7 @@ export default function ApiKey() { {isUploadingData ? (
) : ( - t('me:regenerateKey') + t('regenerateKey') )} diff --git a/src/features/user/Settings/ApiKey/index.tsx b/src/features/user/Settings/ApiKey/index.tsx index 5dcc381085..8268cad7e0 100644 --- a/src/features/user/Settings/ApiKey/index.tsx +++ b/src/features/user/Settings/ApiKey/index.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { ReactElement } from 'react'; import CenteredContainer from '../../../common/Layout/CenteredContainer'; import DashboardView from '../../../common/Layout/DashboardView'; @@ -6,15 +6,15 @@ import SingleColumnView from '../../../common/Layout/SingleColumnView'; import ApiKeyForm from './ApiKeyForm'; export default function ApiKey(): ReactElement | null { - const { t, ready } = useTranslation('me'); + const t = useTranslations('Me'); - return ready ? ( + return ( -

{t('me:apiKeyMessage1')}

-

{t('me:apiKeyMessage3')}

+

{t('apiKeyMessage1')}

+

{t('apiKeyMessage3')}

} > @@ -24,5 +24,5 @@ export default function ApiKey(): ReactElement | null {
- ) : null; + ); } diff --git a/src/features/user/Settings/DeleteProfile/DeleteProfileForm.tsx b/src/features/user/Settings/DeleteProfile/DeleteProfileForm.tsx index 673c69d873..815e043a02 100644 --- a/src/features/user/Settings/DeleteProfile/DeleteProfileForm.tsx +++ b/src/features/user/Settings/DeleteProfile/DeleteProfileForm.tsx @@ -5,7 +5,7 @@ import { useUserProps } from '../../../common/Layout/UserPropsContext'; import { ErrorHandlingContext } from '../../../common/Layout/ErrorHandlingContext'; import CustomModal from '../../../common/Layout/CustomModal'; import router from 'next/router'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { Button, TextField } from '@mui/material'; import StyledForm from '../../../common/Layout/StyledForm'; import { APIError, handleError, SerializedError } from '@planet-sdk/common'; @@ -14,7 +14,7 @@ import { useTenant } from '../../../common/Layout/TenantContext'; export default function DeleteProfileForm() { const { user, token, logoutUser } = useUserProps(); const { tenantConfig } = useTenant(); - const { t } = useTranslation(['me', 'common', 'editProfile']); + const tCommon = useTranslations('Common'); const handleChange = (e: React.ChangeEvent<{}>) => { e.preventDefault(); }; @@ -68,14 +68,14 @@ export default function DeleteProfileForm() {

- {t('common:deleteAccountMessage', { + {tCommon('deleteAccountMessage', { delete: 'Delete', })}

-

{t('common:alternativelyEditProfile')}

+

{tCommon('alternativelyEditProfile')}

- {t('common:deleteAccountConsent')} + {tCommon('deleteAccountConsent')}

- {t('common:deleteCondition')} + {tCommon('deleteCondition')}

- {t('common:deleteIrreversible', { + {tCommon('deleteIrreversible', { email: user?.email, })}

@@ -113,7 +113,7 @@ export default function DeleteProfileForm() { {isUploadingData ? (
) : ( - t('common:delete') + tCommon('delete') )} @@ -122,9 +122,9 @@ export default function DeleteProfileForm() { isOpen={isModalOpen} handleContinue={handleSubscriptions} handleCancel={closeModal} - buttonTitle={t('common:showSubscriptions')} - modalTitle={t('common:modalTitle')} - modalSubtitle={t('common:modalSubtitle')} + buttonTitle={tCommon('showSubscriptions')} + modalTitle={tCommon('modalTitle')} + modalSubtitle={tCommon('modalSubtitle')} /> ); } diff --git a/src/features/user/Settings/DeleteProfile/index.tsx b/src/features/user/Settings/DeleteProfile/index.tsx index 771e0d9396..4900ee8960 100644 --- a/src/features/user/Settings/DeleteProfile/index.tsx +++ b/src/features/user/Settings/DeleteProfile/index.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { ReactElement } from 'react'; import DashboardView from '../../../common/Layout/DashboardView'; import SingleColumnView from '../../../common/Layout/SingleColumnView'; @@ -6,9 +6,9 @@ import DeleteProfileForm from './DeleteProfileForm'; import CenteredContainer from '../../../common/Layout/CenteredContainer'; export default function DonationLink(): ReactElement | null { - const { t, ready } = useTranslation('me'); + const t = useTranslations('Me'); - return ready ? ( + return ( @@ -16,5 +16,5 @@ export default function DonationLink(): ReactElement | null { - ) : null; + ); } diff --git a/src/features/user/Settings/EditProfile/EditProfileForm.tsx b/src/features/user/Settings/EditProfile/EditProfileForm.tsx index 7ff46cd320..0a96980ca8 100644 --- a/src/features/user/Settings/EditProfile/EditProfileForm.tsx +++ b/src/features/user/Settings/EditProfile/EditProfileForm.tsx @@ -17,7 +17,7 @@ import { useUserProps } from '../../../common/Layout/UserPropsContext'; import styles from './EditProfile.module.scss'; import GeocoderArcGIS from 'geocoder-arcgis'; import { ErrorHandlingContext } from '../../../common/Layout/ErrorHandlingContext'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { allCountries } from '../../../../utils/constants/countries'; import InlineFormDisplayGroup from '../../../common/Layout/Forms/InlineFormDisplayGroup'; import { @@ -65,7 +65,7 @@ export default function EditProfileForm() { const { user, setUser, token, contextLoaded, logoutUser } = useUserProps(); const { tenantConfig } = useTenant(); const [isUploadingData, setIsUploadingData] = React.useState(false); - const { t, ready } = useTranslation('editProfile'); + const t = useTranslations('EditProfile'); const defaultProfileDetails = useMemo(() => { return { @@ -183,24 +183,24 @@ export default function EditProfileForm() { ); const [localProfileType, setLocalProfileType] = useState({ id: 1, - title: ready ? t('individual') : '', + title: t('individual'), value: 'individual', }); const profileTypes: ProfileTypeOption[] = [ { id: 1, - title: ready ? t('individual') : '', + title: t('individual'), value: 'individual', }, { id: 2, - title: ready ? t('organization') : '', + title: t('organization'), value: 'organization', }, { id: 3, - title: ready ? t('education') : '', + title: t('education'), value: 'education', }, ]; @@ -233,7 +233,7 @@ export default function EditProfileForm() { imageFile: event.target?.result, }; setSeverity('info'); - setSnackbarMessage(ready ? t('profilePicUpdated') : ''); + setSnackbarMessage(t('profilePicUpdated')); handleSnackbarOpen(); try { @@ -283,7 +283,7 @@ export default function EditProfileForm() { logoutUser ); setSeverity('success'); - setSnackbarMessage(ready ? t('profileSaved') : ''); + setSnackbarMessage(t('profileSaved')); handleSnackbarOpen(); setIsUploadingData(false); setUser(res); @@ -295,7 +295,7 @@ export default function EditProfileForm() { }; let suggestion_counter = 0; - return ready ? ( + return (
@@ -673,5 +673,5 @@ export default function EditProfileForm() {
- ) : null; + ); } diff --git a/src/features/user/Settings/EditProfile/index.tsx b/src/features/user/Settings/EditProfile/index.tsx index 714a9c9dea..e91cba0b71 100644 --- a/src/features/user/Settings/EditProfile/index.tsx +++ b/src/features/user/Settings/EditProfile/index.tsx @@ -1,17 +1,17 @@ -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { ReactElement } from 'react'; import CenteredContainer from '../../../common/Layout/CenteredContainer'; import DashboardView from '../../../common/Layout/DashboardView'; import EditProfileForm from './EditProfileForm'; export default function (): ReactElement | null { - const { t, ready } = useTranslation('me'); + const t = useTranslations('Me'); - return ready ? ( + return ( - ) : null; + ); } diff --git a/src/features/user/Settings/ImpersonateUser/ImpersonateUserForm.tsx b/src/features/user/Settings/ImpersonateUser/ImpersonateUserForm.tsx index a1ea55e482..6e767edea0 100644 --- a/src/features/user/Settings/ImpersonateUser/ImpersonateUserForm.tsx +++ b/src/features/user/Settings/ImpersonateUser/ImpersonateUserForm.tsx @@ -1,6 +1,6 @@ import { ReactElement, useState } from 'react'; import { useRouter } from 'next/router'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { Controller, useForm } from 'react-hook-form'; import { TextField, Button } from '@mui/material'; import { getAccountInfo } from '../../../../utils/apiRequests/api'; @@ -18,7 +18,7 @@ export type ImpersonationData = { const ImpersonateUserForm = (): ReactElement => { const router = useRouter(); const { tenantConfig } = useTenant(); - const { t } = useTranslation('me'); + const t = useTranslations('Me'); const [isInvalidEmail, setIsInvalidEmail] = useState(false); const [isProcessing, setIsProcessing] = useState(false); const { token, setUser, setIsImpersonationModeOn } = useUserProps(); @@ -76,18 +76,16 @@ const ImpersonateUserForm = (): ReactElement => { rules={{ required: { value: true, - message: t('me:enterTheEmail'), + message: t('enterTheEmail'), }, validate: { emailInvalid: (value) => - value.length === 0 || - isEmailValid(value) || - t('me:invalidEmail'), + value.length === 0 || isEmailValid(value) || t('invalidEmail'), }, }} render={({ field: { onChange, value, onBlur } }) => ( { helperText={ (errors.targetEmail !== undefined && errors.targetEmail.message) || - (isInvalidEmail && t('me:wrongEntered')) + (isInvalidEmail && t('wrongEntered')) } /> )} @@ -105,12 +103,12 @@ const ImpersonateUserForm = (): ReactElement => { name="supportPin" control={control} rules={{ - required: t('me:enterSupportPin'), + required: t('enterSupportPin'), }} render={({ field: { onChange, value, onBlur } }) => ( { helperText={ (errors.supportPin !== undefined && errors.supportPin.message) || - (isInvalidEmail && t('me:wrongEntered')) + (isInvalidEmail && t('wrongEntered')) } /> )} @@ -131,7 +129,7 @@ const ImpersonateUserForm = (): ReactElement => { className="formButton" disabled={isProcessing} > - {isProcessing ?
: t('me:switch')} + {isProcessing ?
: t('switch')} ); diff --git a/src/features/user/Settings/ImpersonateUser/ImpersonationActivated.tsx b/src/features/user/Settings/ImpersonateUser/ImpersonationActivated.tsx index e5ac1db416..4669e03cbb 100644 --- a/src/features/user/Settings/ImpersonateUser/ImpersonationActivated.tsx +++ b/src/features/user/Settings/ImpersonateUser/ImpersonationActivated.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import LogoutIcon from '../../../../../public/assets/images/icons/Sidebar/LogoutIcon'; import styles from './ImpersonateUser.module.scss'; import { useUserProps } from '../../../common/Layout/UserPropsContext'; @@ -18,12 +18,12 @@ const ImpersonationActivated = () => { loadUser(); }; - const { t } = useTranslation('me'); + const t = useTranslations('Me'); return user && isImpersonationModeOn ? (
- {t('me:targetUser', { impersonatedEmail: `<${user?.email}>` })} + {t('targetUser', { impersonatedEmail: `<${user?.email}>` })}
{
-
{t('me:exitImpersonation')}
+
{t('exitImpersonation')}
) : null; diff --git a/src/features/user/Settings/ImpersonateUser/SupportPin.tsx b/src/features/user/Settings/ImpersonateUser/SupportPin.tsx index f33450702c..e43cc377e6 100644 --- a/src/features/user/Settings/ImpersonateUser/SupportPin.tsx +++ b/src/features/user/Settings/ImpersonateUser/SupportPin.tsx @@ -1,5 +1,5 @@ import styles from '../../../common/Layout/UserLayout/UserLayout.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { putAuthenticatedRequest } from '../../../../utils/apiRequests/api'; import RestartAltIcon from '@mui/icons-material/RestartAlt'; import { useTenant } from '../../../common/Layout/TenantContext'; @@ -11,7 +11,7 @@ interface SupportPin { const SupportPin = () => { const { token, user, setUser, logoutUser } = useUserProps(); - const { t } = useTranslation('me'); + const t = useTranslations('Me'); const { tenantConfig } = useTenant(); const handleNewPin = async () => { try { @@ -37,7 +37,7 @@ const SupportPin = () => { return ( <>
-
{t('me:supportPin')} :
+
{t('supportPin')} :
{user?.supportPin}
- {t('me:resetPin')} + {t('resetPin')}
diff --git a/src/features/user/Settings/ImpersonateUser/index.tsx b/src/features/user/Settings/ImpersonateUser/index.tsx index af22c8653b..7200e3edf8 100644 --- a/src/features/user/Settings/ImpersonateUser/index.tsx +++ b/src/features/user/Settings/ImpersonateUser/index.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { ReactElement } from 'react'; import DashboardView from '../../../common/Layout/DashboardView'; import SingleColumnView from '../../../common/Layout/SingleColumnView'; @@ -6,13 +6,10 @@ import CenteredContainer from '../../../common/Layout/CenteredContainer'; import ImpersonateUserForm from './ImpersonateUserForm'; const ImpersonateUser = (): ReactElement => { - const { t } = useTranslation('me'); + const t = useTranslations('Me'); return ( - + diff --git a/src/features/user/TreeMapper/Analytics/components/Counter/components/CounterItem/index.tsx b/src/features/user/TreeMapper/Analytics/components/Counter/components/CounterItem/index.tsx index a598db32b0..c60e84852d 100644 --- a/src/features/user/TreeMapper/Analytics/components/Counter/components/CounterItem/index.tsx +++ b/src/features/user/TreeMapper/Analytics/components/Counter/components/CounterItem/index.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from 'react-i18next'; +import { useTranslations } from 'next-intl'; import styles from './index.module.scss'; import { Grid } from '@mui/material'; @@ -13,7 +13,7 @@ const ONE_BILLION = ONE_MILLION * 1000; const ONE_TRILLION = ONE_BILLION * 1000; export const CounterItem = ({ quantity, label }: Props) => { - const { t } = useTranslation(['treemapperAnalytics']); + const t = useTranslations('TreemapperAnalytics'); function formatNumber(num: number) { if (num >= ONE_TRILLION) { diff --git a/src/features/user/TreeMapper/Analytics/components/Counter/index.tsx b/src/features/user/TreeMapper/Analytics/components/Counter/index.tsx index ba163f29bf..a72f0ccfdd 100644 --- a/src/features/user/TreeMapper/Analytics/components/Counter/index.tsx +++ b/src/features/user/TreeMapper/Analytics/components/Counter/index.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import { useTranslation } from 'react-i18next'; +import { useTranslations } from 'next-intl'; import { useAnalytics } from '../../../../../common/Layout/AnalyticsContext'; import { CounterItem } from './components/CounterItem'; import styles from './index.module.scss'; @@ -14,7 +14,7 @@ import { export const Counter = () => { const { project, fromDate, toDate } = useAnalytics(); - const { t } = useTranslation(['treemapperAnalytics']); + const t = useTranslations('TreemapperAnalytics'); const [totalTreesPlanted, setTotalTreesPlanted] = useState( null diff --git a/src/features/user/TreeMapper/Analytics/components/Export/index.tsx b/src/features/user/TreeMapper/Analytics/components/Export/index.tsx index e3964e054c..037470e6e3 100644 --- a/src/features/user/TreeMapper/Analytics/components/Export/index.tsx +++ b/src/features/user/TreeMapper/Analytics/components/Export/index.tsx @@ -15,7 +15,7 @@ import { useUserProps } from '../../../../../common/Layout/UserPropsContext'; import { SxProps } from '@mui/material'; import themeProperties from '../../../../../../theme/themeProperties'; import { MobileDatePicker as MuiDatePicker } from '@mui/x-date-pickers/MobileDatePicker'; -import { useTranslation } from 'react-i18next'; +import { useTranslations } from 'next-intl'; import MaterialTextField from '../../../../../common/InputTypes/MaterialTextField'; import { format } from 'date-fns'; import ProjectTypeSelector, { ProjectType } from '../ProjectTypeSelector'; @@ -44,7 +44,7 @@ const dialogSx: SxProps = { }; export const Export = () => { - const { t, ready } = useTranslation('treemapperAnalytics'); + const t = useTranslations('TreemapperAnalytics'); const { projectList, project, fromDate, toDate } = useAnalytics(); const { userLang } = useUserProps(); const { setErrors } = useContext(ErrorHandlingContext); @@ -193,7 +193,7 @@ export const Export = () => { setProjectType(projType); }; - return ready ? ( + return (
{ } > ( @@ -238,7 +238,7 @@ export const Export = () => { } > ( @@ -260,5 +260,5 @@ export const Export = () => {
- ) : null; + ); }; diff --git a/src/features/user/TreeMapper/Analytics/components/ProjectFilter/index.tsx b/src/features/user/TreeMapper/Analytics/components/ProjectFilter/index.tsx index 8f660560f6..8a80209221 100644 --- a/src/features/user/TreeMapper/Analytics/components/ProjectFilter/index.tsx +++ b/src/features/user/TreeMapper/Analytics/components/ProjectFilter/index.tsx @@ -8,7 +8,7 @@ import { MobileDatePicker as MuiDatePicker } from '@mui/x-date-pickers/MobileDat import Grid from '@mui/material/Grid'; import themeProperties from '../../../../../../theme/themeProperties'; import { SxProps } from '@mui/material'; -import { useTranslation } from 'react-i18next'; +import { useTranslations } from 'next-intl'; import MaterialTextField from '../../../../../common/InputTypes/MaterialTextField'; import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'; import { localeMapForDate } from '../../../../../../utils/language/getLanguageName'; @@ -33,7 +33,7 @@ const dialogSx: SxProps = { }; const ProjectFilter = () => { - const { t, ready } = useTranslation('treemapperAnalytics'); + const t = useTranslations('TreemapperAnalytics'); const { projectList, fromDate, @@ -49,7 +49,7 @@ const ProjectFilter = () => { setProject(proj); }; - return ready ? ( + return ( { } > ( @@ -95,7 +95,7 @@ const ProjectFilter = () => { } > ( @@ -112,7 +112,7 @@ const ProjectFilter = () => { - ) : null; + ); }; export default ProjectFilter; diff --git a/src/features/user/TreeMapper/Analytics/components/ProjectSelectAutocomplete.tsx b/src/features/user/TreeMapper/Analytics/components/ProjectSelectAutocomplete.tsx index e2bb1dab52..d3b10e62db 100644 --- a/src/features/user/TreeMapper/Analytics/components/ProjectSelectAutocomplete.tsx +++ b/src/features/user/TreeMapper/Analytics/components/ProjectSelectAutocomplete.tsx @@ -1,6 +1,6 @@ import React, { ReactElement, useState, useEffect } from 'react'; import { Autocomplete, TextField, styled } from '@mui/material'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { Project } from '../../../../common/Layout/AnalyticsContext'; @@ -27,7 +27,7 @@ const ProjectSelectAutocomplete = ({ handleProjectChange, }: ProjectSelectAutocompleteProps): ReactElement | null => { const [localProject, setLocalProject] = useState(project); - const { t, ready } = useTranslation(['common']); + const t = useTranslations('Common'); useEffect(() => { setLocalProject(project); @@ -39,35 +39,27 @@ const ProjectSelectAutocomplete = ({ } }, [localProject]); - if (ready) { - return ( - (option as Project).name} - isOptionEqualToValue={(option, value) => - (option as Project).id === (value as Project).id - } - value={localProject} - onChange={(_event, newValue: unknown) => - setLocalProject(newValue as Project | null) - } - renderOption={(props, option) => ( - - {(option as Project).name} - - )} - renderInput={(params) => ( - - )} - /> - ); - } - - return null; + return ( + (option as Project).name} + isOptionEqualToValue={(option, value) => + (option as Project).id === (value as Project).id + } + value={localProject} + onChange={(_event, newValue: unknown) => + setLocalProject(newValue as Project | null) + } + renderOption={(props, option) => ( + + {(option as Project).name} + + )} + renderInput={(params) => ( + + )} + /> + ); }; export default ProjectSelectAutocomplete; diff --git a/src/features/user/TreeMapper/Analytics/components/ProjectTypeSelector.tsx b/src/features/user/TreeMapper/Analytics/components/ProjectTypeSelector.tsx index 9e3944afd6..3b31127dbc 100644 --- a/src/features/user/TreeMapper/Analytics/components/ProjectTypeSelector.tsx +++ b/src/features/user/TreeMapper/Analytics/components/ProjectTypeSelector.tsx @@ -1,6 +1,6 @@ import React, { ReactElement, useState, useEffect } from 'react'; import { Autocomplete, TextField, styled } from '@mui/material'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; /* eslint-disable no-unused-vars */ export enum ProjectType { @@ -35,7 +35,7 @@ const ProjectTypeSelector = ({ const [localProjectType, setLocalProjectType] = useState( null ); - const { t, ready } = useTranslation(['treemapperAnalytics']); + const t = useTranslations('TreemapperAnalytics'); useEffect(() => { setLocalProjectType(projectTypeList[0]); @@ -47,32 +47,28 @@ const ProjectTypeSelector = ({ } }, [localProjectType]); - if (ready) { - return ( - t(option as ProjectType)} - isOptionEqualToValue={(option, value) => - (option as ProjectType) === (value as ProjectType) - } - value={localProjectType} - onChange={(_event, newValue: unknown) => - setLocalProjectType(newValue as ProjectType | null) - } - getOptionDisabled={(option) => option !== ProjectType.INTERVENTIONS} - renderOption={(props, option) => ( - - {t(option as ProjectType)} - - )} - renderInput={(params) => ( - - )} - /> - ); - } - - return null; + return ( + t(option as ProjectType)} + isOptionEqualToValue={(option, value) => + (option as ProjectType) === (value as ProjectType) + } + value={localProjectType} + onChange={(_event, newValue: unknown) => + setLocalProjectType(newValue as ProjectType | null) + } + getOptionDisabled={(option) => option !== ProjectType.INTERVENTIONS} + renderOption={(props, option) => ( + + {t(option as ProjectType)} + + )} + renderInput={(params) => ( + + )} + /> + ); }; export default ProjectTypeSelector; diff --git a/src/features/user/TreeMapper/Analytics/components/SpeciesPlanted/Tooltip/index.tsx b/src/features/user/TreeMapper/Analytics/components/SpeciesPlanted/Tooltip/index.tsx index 9946e9516b..ff5c1b1144 100644 --- a/src/features/user/TreeMapper/Analytics/components/SpeciesPlanted/Tooltip/index.tsx +++ b/src/features/user/TreeMapper/Analytics/components/SpeciesPlanted/Tooltip/index.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from 'react-i18next'; +import { useLocale } from 'next-intl'; import { getFormattedNumber } from '../../../../../../../utils/getFormattedNumber'; import styles from './index.module.scss'; @@ -9,9 +9,7 @@ interface Props { } export const Tooltip = ({ headerTitle, bodyTitle, value }: Props) => { - const { - i18n: { language }, - } = useTranslation(); + const locale = useLocale(); return (
@@ -22,7 +20,7 @@ export const Tooltip = ({ headerTitle, bodyTitle, value }: Props) => {

{bodyTitle}

- {getFormattedNumber(language, parseInt(value))} + {getFormattedNumber(locale, parseInt(value))}

diff --git a/src/features/user/TreeMapper/Analytics/components/SpeciesPlanted/index.tsx b/src/features/user/TreeMapper/Analytics/components/SpeciesPlanted/index.tsx index a61b258797..cc4ae6ea7d 100644 --- a/src/features/user/TreeMapper/Analytics/components/SpeciesPlanted/index.tsx +++ b/src/features/user/TreeMapper/Analytics/components/SpeciesPlanted/index.tsx @@ -1,6 +1,6 @@ import dynamic from 'next/dynamic'; import { useEffect, useState } from 'react'; -import { useTranslation } from 'react-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import themeProperties from '../../../../../../theme/themeProperties'; import { getFormattedNumber } from '../../../../../../utils/getFormattedNumber'; import styles from './index.module.scss'; @@ -25,10 +25,8 @@ const getDownloadIcon = () => { }; export const SpeciesPlanted = () => { - const { - i18n: { language }, - t, - } = useTranslation(['treemapperAnalytics']); + const t = useTranslations('TreemapperAnalytics'); + const locale = useLocale(); const { project, fromDate, toDate } = useAnalytics(); @@ -146,7 +144,7 @@ export const SpeciesPlanted = () => { labels: { show: true, formatter: function (val) { - return getFormattedNumber(language, val); + return getFormattedNumber(locale, val); }, }, }, diff --git a/src/features/user/TreeMapper/Analytics/components/TreePlanted/TimeFrameSelector.tsx b/src/features/user/TreeMapper/Analytics/components/TreePlanted/TimeFrameSelector.tsx index 98025d9e37..29316f5cf2 100644 --- a/src/features/user/TreeMapper/Analytics/components/TreePlanted/TimeFrameSelector.tsx +++ b/src/features/user/TreeMapper/Analytics/components/TreePlanted/TimeFrameSelector.tsx @@ -1,6 +1,6 @@ import React, { ReactElement, useState, useEffect } from 'react'; import { Autocomplete, TextField, styled } from '@mui/material'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { getTimeFrames } from '.'; import { useAnalytics } from '../../../../../common/Layout/AnalyticsContext'; @@ -45,7 +45,7 @@ const TimeFrameSelector = ({ const [localTimeFrame, setLocalTimeFrame] = useState( timeFrame ); - const { t, ready } = useTranslation(['treemapperAnalytics']); + const t = useTranslations('TreemapperAnalytics'); const { toDate, fromDate } = useAnalytics(); @@ -63,35 +63,29 @@ const TimeFrameSelector = ({ } }, [localTimeFrame]); - if (ready) { - return ( - t(option as TIME_FRAME)} - isOptionEqualToValue={(option, value) => - (option as TIME_FRAME) === (value as TIME_FRAME) - } - value={localTimeFrame} - onChange={(_event, newValue: unknown) => - setLocalTimeFrame(newValue as TIME_FRAME | null) - } - getOptionDisabled={(option) => - !timeFrames.includes(option as TIME_FRAME) - } - renderOption={(props, option) => ( - - {t(option as TIME_FRAME)} - - )} - style={{ width: 150 }} - renderInput={(params) => ( - - )} - /> - ); - } - - return null; + return ( + t(option as TIME_FRAME)} + isOptionEqualToValue={(option, value) => + (option as TIME_FRAME) === (value as TIME_FRAME) + } + value={localTimeFrame} + onChange={(_event, newValue: unknown) => + setLocalTimeFrame(newValue as TIME_FRAME | null) + } + getOptionDisabled={(option) => !timeFrames.includes(option as TIME_FRAME)} + renderOption={(props, option) => ( + + {t(option as TIME_FRAME)} + + )} + style={{ width: 150 }} + renderInput={(params) => ( + + )} + /> + ); }; export default TimeFrameSelector; diff --git a/src/features/user/TreeMapper/Analytics/components/TreePlanted/Tooltip/index.tsx b/src/features/user/TreeMapper/Analytics/components/TreePlanted/Tooltip/index.tsx index 9946e9516b..ff5c1b1144 100644 --- a/src/features/user/TreeMapper/Analytics/components/TreePlanted/Tooltip/index.tsx +++ b/src/features/user/TreeMapper/Analytics/components/TreePlanted/Tooltip/index.tsx @@ -1,4 +1,4 @@ -import { useTranslation } from 'react-i18next'; +import { useLocale } from 'next-intl'; import { getFormattedNumber } from '../../../../../../../utils/getFormattedNumber'; import styles from './index.module.scss'; @@ -9,9 +9,7 @@ interface Props { } export const Tooltip = ({ headerTitle, bodyTitle, value }: Props) => { - const { - i18n: { language }, - } = useTranslation(); + const locale = useLocale(); return (
@@ -22,7 +20,7 @@ export const Tooltip = ({ headerTitle, bodyTitle, value }: Props) => {

{bodyTitle}

- {getFormattedNumber(language, parseInt(value))} + {getFormattedNumber(locale, parseInt(value))}

diff --git a/src/features/user/TreeMapper/Analytics/components/TreePlanted/index.tsx b/src/features/user/TreeMapper/Analytics/components/TreePlanted/index.tsx index 7d47cbde79..86c27dd2d1 100644 --- a/src/features/user/TreeMapper/Analytics/components/TreePlanted/index.tsx +++ b/src/features/user/TreeMapper/Analytics/components/TreePlanted/index.tsx @@ -1,5 +1,5 @@ import { differenceInDays, format } from 'date-fns'; -import { useTranslation } from 'react-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { useEffect, useRef, useState } from 'react'; import dynamic from 'next/dynamic'; import themeProperties from '../../../../../../theme/themeProperties'; @@ -76,10 +76,8 @@ export const getTimeFrames = (toDate: Date, fromDate: Date) => { }; export const TreePlanted = () => { - const { - i18n: { language }, - t, - } = useTranslation(['treemapperAnalytics']); + const t = useTranslations('TreemapperAnalytics'); + const locale = useLocale(); const [series, setSeries] = useState([ { @@ -201,7 +199,7 @@ export const TreePlanted = () => { labels: { show: true, formatter: function (val) { - return getFormattedNumber(language, val); + return getFormattedNumber(locale, val); }, }, }, diff --git a/src/features/user/TreeMapper/Analytics/index.tsx b/src/features/user/TreeMapper/Analytics/index.tsx index 6787e896d0..ab670754b0 100644 --- a/src/features/user/TreeMapper/Analytics/index.tsx +++ b/src/features/user/TreeMapper/Analytics/index.tsx @@ -1,6 +1,6 @@ import React, { useEffect } from 'react'; import DashboardView from '../../../common/Layout/DashboardView'; -import { useTranslation } from 'react-i18next'; +import { useTranslations } from 'next-intl'; import ProjectFilter from './components/ProjectFilter'; import { Project, useAnalytics } from '../../../common/Layout/AnalyticsContext'; import { DataExplorerGridContainer } from './components/DataExplorerGridContainer'; @@ -12,7 +12,7 @@ import { MapProject } from '../../../common/types/ProjectPropsContextInterface'; import { useTenant } from '../../../common/Layout/TenantContext'; const Analytics = () => { - const { t, ready } = useTranslation('treemapperAnalytics'); + const t = useTranslations('TreemapperAnalytics'); const { setProjectList, setProject } = useAnalytics(); const { token, logoutUser } = useUserProps(); const { tenantConfig } = useTenant(); @@ -46,12 +46,12 @@ const Analytics = () => { fetchProjects(); }, []); - return ready ? ( - + return ( + - ) : null; + ); }; export default Analytics; diff --git a/src/features/user/TreeMapper/Import/components/PlantingLocation.tsx b/src/features/user/TreeMapper/Import/components/PlantingLocation.tsx index dc7d56229a..6ffe4f6cb3 100644 --- a/src/features/user/TreeMapper/Import/components/PlantingLocation.tsx +++ b/src/features/user/TreeMapper/Import/components/PlantingLocation.tsx @@ -8,7 +8,7 @@ import { Control, } from 'react-hook-form'; import styles from '../Import.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { localeMapForDate } from '../../../../../utils/language/getLanguageName'; import { useDropzone } from 'react-dropzone'; import DeleteIcon from '../../../../../../public/assets/images/icons/manageProjects/Delete'; @@ -61,7 +61,6 @@ const dialogSx: SxProps = { interface SpeciesProps { index: number; - t: Function; remove: Function; errors: FieldErrors; item: FieldArrayWithId; @@ -70,26 +69,26 @@ interface SpeciesProps { function PlantedSpecies({ index, - t, remove, errors, item, control, }: SpeciesProps): ReactElement { + const tTreemapper = useTranslations('Treemapper'); return (
- {/* */} + {/* */} 0 ? false : t('treemapper:atLeastOneSpeciesRequired'), + index > 0 ? false : tTreemapper('atLeastOneSpeciesRequired'), }} render={({ field: { onChange, onBlur, value } }) => ( 0 ? false : t('treemapper:treesRequired'), + required: index > 0 ? false : tTreemapper('treesRequired'), validate: (value) => { - return Number(value) >= 1 ? true : t('treemapper:treesRequired'); + return Number(value) >= 1 ? true : tTreemapper('treesRequired'); }, }} render={({ field: { onChange, onBlur, value } }) => ( { e.target.value = e.target.value.replace(/[^0-9]/g, ''); @@ -181,8 +180,9 @@ export default function PlantingLocation({ const [geoJsonError, setGeoJsonError] = React.useState(false); const [mySpecies, setMySpecies] = React.useState(null); const { setErrors } = React.useContext(ErrorHandlingContext); - - const { t } = useTranslation(['treemapper', 'common', 'maps']); + const tTreemapper = useTranslations('Treemapper'); + const tMe = useTranslations('Me'); + const tMaps = useTranslations('Maps'); const defaultValues = { plantDate: '', plantProject: '', @@ -338,7 +338,8 @@ export default function PlantingLocation({ }; try { - const res = await postAuthenticatedRequest(tenantConfig?.id, + const res = await postAuthenticatedRequest( + tenantConfig?.id, `/treemapper/plantLocations`, submitData, token, @@ -371,11 +372,11 @@ export default function PlantingLocation({ {isUploadingData ? (
) : ( - t('treemapper:uploadFile') + tTreemapper('uploadFile') )}

- {t('treemapper:fileFormatKML')} + {tTreemapper('fileFormatKML')}

@@ -421,10 +422,10 @@ export default function PlantingLocation({ ( } @@ -451,11 +452,11 @@ export default function PlantingLocation({ name="plantProject" control={control} rules={{ - required: t('treemapper:projectRequired'), + required: tTreemapper('projectRequired'), }} render={({ field: { onChange, value, onBlur } }) => ( - {t(`treemapper:${method}`)} + {tTreemapper(method)} ))}
{getMethod(activeMethod)}
- {geoJsonError && t('treemapper:geoJsonError')} + {geoJsonError && tTreemapper('geoJsonError')}
-
{t('maps:speciesPlanted')}
+
{tMaps('speciesPlanted')}
{mySpecies && fields.map((item, index) => { return ( @@ -504,7 +505,6 @@ export default function PlantingLocation({ // Use id instead of index to prevent rerenders as per rhf guidelines key={item.id} index={index} - t={t} remove={remove} errors={errors} item={item} @@ -521,7 +521,7 @@ export default function PlantingLocation({ }} className={styles.addSpeciesButton} > - {t('treemapper:addAnotherSpecies')} + {tTreemapper('addAnotherSpecies')}
@@ -534,7 +534,7 @@ export default function PlantingLocation({ {isUploadingData ? (
) : ( - t('treemapper:continue') + tTreemapper('continue') )}
diff --git a/src/features/user/TreeMapper/Import/components/ReviewSubmit.tsx b/src/features/user/TreeMapper/Import/components/ReviewSubmit.tsx index 46bb0bfa92..9848f8740b 100644 --- a/src/features/user/TreeMapper/Import/components/ReviewSubmit.tsx +++ b/src/features/user/TreeMapper/Import/components/ReviewSubmit.tsx @@ -1,6 +1,6 @@ import React, { ReactElement } from 'react'; import styles from '../Import.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import formatDate from '../../../../../utils/countryCurrency/getFormattedDate'; import { useRouter } from 'next/router'; import { Button } from '@mui/material'; @@ -18,7 +18,8 @@ export default function ReviewSubmit({ handleBack, }: Props): ReactElement { const router = useRouter(); - const { t } = useTranslation(['treemapper', 'common']); + const tTreemapper = useTranslations('Treemapper'); + const tMaps = useTranslations('Maps'); const [isUploadingData, setIsUploadingData] = React.useState(false); const [submitted, setSubmitted] = React.useState(true); @@ -33,48 +34,52 @@ export default function ReviewSubmit({ {submitted ? ( <>
-

{t('treemapper:submittedSuccess')}

-

{t('treemapper:submittedSuccessDescription')}

+

{tTreemapper('submittedSuccess')}

+

{tTreemapper('submittedSuccessDescription')}

) : ( <> -
{t('summary')}
+
{tTreemapper('summary')}
- {t('reviewSubmitDescription')} + {tTreemapper('reviewSubmitDescription')}
{plantLocation ? (
-
{t('captureMode')}
+
+ {tTreemapper('captureMode')} +
{plantLocation.captureMode}
-
{t('plantDate')}
+
+ {tTreemapper('plantDate')} +
{formatDate(plantLocation.plantDate)}
- {t('registrationDate')} + {tTreemapper('registrationDate')}
{formatDate(plantLocation.registrationDate)}
-

{t('species')}

+

{tTreemapper('species')}

{plantLocation.plantedSpecies @@ -87,7 +92,7 @@ export default function ReviewSubmit({ : species.otherSpecies && species.otherSpecies !== 'Unknown' ? species.otherSpecies - : t('maps:unknown')} + : tMaps('unknown')}

); }) @@ -97,7 +102,9 @@ export default function ReviewSubmit({ {plantLocation.type === 'multi' && plantLocation.captureMode === 'external' ? ( <> -

{t('sampleTrees')}

+

+ {tTreemapper('sampleTrees')} +

{plantLocation.samplePlantLocations && plantLocation.samplePlantLocations.map((spl, index) => { @@ -108,10 +115,10 @@ export default function ReviewSubmit({ {'otherSpecies' in spl && spl.otherSpecies}
- {spl.tag ? `${t('maps:tag')} #${spl.tag} • ` : null} + {spl.tag ? `${tMaps('tag')} #${spl.tag} • ` : null} {spl?.measurements?.height} - {t('maps:meterHigh')} • {spl?.measurements?.width} - {t('maps:cmWide')} + {tMaps('meterHigh')} • {spl?.measurements?.width} + {tMaps('cmWide')}
); })} @@ -130,7 +137,7 @@ export default function ReviewSubmit({ {isUploadingData ? (
) : ( - t('treemapper:back') + tTreemapper('back') )}
@@ -143,7 +150,7 @@ export default function ReviewSubmit({ {isUploadingData ? (
) : ( - t('treemapper:submit') + tTreemapper('submit') )}
diff --git a/src/features/user/TreeMapper/Import/components/SampleTreeCard.tsx b/src/features/user/TreeMapper/Import/components/SampleTreeCard.tsx index 790bcdf189..a18e227c2a 100644 --- a/src/features/user/TreeMapper/Import/components/SampleTreeCard.tsx +++ b/src/features/user/TreeMapper/Import/components/SampleTreeCard.tsx @@ -1,5 +1,5 @@ import React, { ReactElement } from 'react'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import styles from '../Import.module.scss'; import DeleteIcon from '../../../../../../public/assets/images/icons/manageProjects/Delete'; import { @@ -62,7 +62,7 @@ export default function SampleTreeCard({ errors, }: Props): ReactElement { const sampleTrees = getValues(); - const { t } = useTranslation(['treemapper', 'common']); + const t = useTranslations('Treemapper'); return (
diff --git a/src/features/user/TreeMapper/Import/components/SampleTrees.tsx b/src/features/user/TreeMapper/Import/components/SampleTrees.tsx index 8ee26a6feb..7a1b4d1cc2 100644 --- a/src/features/user/TreeMapper/Import/components/SampleTrees.tsx +++ b/src/features/user/TreeMapper/Import/components/SampleTrees.tsx @@ -3,7 +3,7 @@ import styles from '../Import.module.scss'; import { useDropzone } from 'react-dropzone'; import { postAuthenticatedRequest } from '../../../../../utils/apiRequests/api'; import { useUserProps } from '../../../../common/Layout/UserPropsContext'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { useForm, useFieldArray } from 'react-hook-form'; import SampleTreeCard from './SampleTreeCard'; import Papa from 'papaparse'; @@ -35,7 +35,8 @@ export default function SampleTrees({ plantLocation, userLang, }: Props): ReactElement { - const { t, ready } = useTranslation(['treemapper', 'common', 'bulkCodes']); + const tTreemapper = useTranslations('Treemapper'); + const tBulkCodes = useTranslations('BulkCodes'); const { setErrors } = React.useContext(ErrorHandlingContext); const [isUploadingData, setIsUploadingData] = React.useState(false); const [uploadStatus, setUploadStatus] = React.useState([]); @@ -118,11 +119,9 @@ export default function SampleTrees({ } else { setParseError({ type: 'missingColumns', - message: ready - ? `${t( - 'bulkCodes:errorUploadCSV.missingColumns' - )} ${headerValidity.missingColumns.join(', ')}` - : '', + message: `${tBulkCodes( + 'errorUploadCSV.missingColumns' + )} ${headerValidity.missingColumns.join(', ')}`, }); } }, @@ -237,13 +236,13 @@ export default function SampleTrees({ return ( <> @@ -258,16 +257,16 @@ export default function SampleTrees({ {isUploadingData ? (
) : ( - t('treemapper:importCSV') + tTreemapper('importCSV') )} -

{t('treemapper:fileFormatCSV')}

+

{tTreemapper('fileFormatCSV')}

{parseError &&

{parseError.message}

} {hasIgnoredColumns && (

- {t('treemapper:ignoredColumnsWarning')} + {tTreemapper('ignoredColumnsWarning')}

)}
@@ -304,8 +303,8 @@ export default function SampleTrees({ className={styles.addSpeciesButton} > {fields.length === 0 - ? t('treemapper:addSampleTree') - : t('treemapper:addAnotherSampleTree')} + ? tTreemapper('addSampleTree') + : tTreemapper('addAnotherSampleTree')}
@@ -317,7 +316,7 @@ export default function SampleTrees({ {isUploadingData ? (
) : ( - t('treemapper:continue') + tTreemapper('continue') )}
@@ -330,7 +329,7 @@ export default function SampleTrees({ {isUploadingData ? (
) : ( - t('treemapper:skip') + tTreemapper('skip') )}
diff --git a/src/features/user/TreeMapper/Import/index.tsx b/src/features/user/TreeMapper/Import/index.tsx index d7968efd36..a767be3386 100644 --- a/src/features/user/TreeMapper/Import/index.tsx +++ b/src/features/user/TreeMapper/Import/index.tsx @@ -2,7 +2,7 @@ import React, { ReactElement } from 'react'; import { getAuthenticatedRequest } from '../../../../utils/apiRequests/api'; import PlantingLocation from './components/PlantingLocation'; import styles from './Import.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { useUserProps } from '../../../common/Layout/UserPropsContext'; import { useRouter } from 'next/router'; import { @@ -44,15 +44,16 @@ const MapComponent = dynamic(() => import('./components/MapComponent'), { export default function ImportData(): ReactElement { const router = useRouter(); const { tenantConfig } = useTenant(); - const { t, ready } = useTranslation(['treemapper']); + const tTreemapper = useTranslations('Treemapper'); + const tCommon = useTranslations('Common'); const { token, logoutUser } = useUserProps(); const { setErrors } = React.useContext(ErrorHandlingContext); function getSteps() { return [ - ready ? t('treemapper:plantingLocation') : '', - ready ? t('treemapper:sampleTrees') : '', - ready ? t('treemapper:submitted') : '', + tTreemapper('plantingLocation'), + tTreemapper('sampleTrees'), + tTreemapper('submitted'), ]; } const [activeStep, setActiveStep] = React.useState(0); @@ -123,7 +124,7 @@ export default function ImportData(): ReactElement { userLang={userLang} /> ) : ( -

{t('common:some_error')}

+

{tCommon('some_error')}

); case 2: return plantLocation ? ( @@ -134,7 +135,7 @@ export default function ImportData(): ReactElement { setErrorMessage={setErrorMessage} /> ) : ( -

{t('common:some_error')}

+

{tCommon('some_error')}

); default: return ( @@ -154,9 +155,9 @@ export default function ImportData(): ReactElement {
-
{t('treemapper:importData')}
+
{tTreemapper('importData')}

- {t('treemapper:importExplanation')} + {tTreemapper('importExplanation')}

([]); @@ -111,7 +112,7 @@ export default function MySpeciesForm() {
(
) : ( - t('common:add') + tCommon('add') )} diff --git a/src/features/user/TreeMapper/MySpecies/SpeciesAutoComplete.tsx b/src/features/user/TreeMapper/MySpecies/SpeciesAutoComplete.tsx index 8331609a26..ef1a28bc30 100644 --- a/src/features/user/TreeMapper/MySpecies/SpeciesAutoComplete.tsx +++ b/src/features/user/TreeMapper/MySpecies/SpeciesAutoComplete.tsx @@ -4,7 +4,7 @@ import { postRequest } from '../../../../utils/apiRequests/api'; import { Controller, Control, FieldValues, FieldPath } from 'react-hook-form'; import { Autocomplete, TextField } from '@mui/material'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { handleError, APIError } from '@planet-sdk/common'; import { ErrorHandlingContext } from '../../../common/Layout/ErrorHandlingContext'; import { SpeciesSuggestionType } from '../../../common/types/plantLocation'; @@ -40,7 +40,7 @@ export default function SpeciesSelect< >([]); const [query, setQuery] = React.useState(''); const { tenantConfig } = useTenant(); - const { t } = useTranslation(['treemapper']); + const t = useTranslations('Treemapper'); const { setErrors } = React.useContext(ErrorHandlingContext); // Code below can be removed if no longer needed, along with the `mySpecies` prop @@ -103,7 +103,7 @@ export default function SpeciesSelect< name={name} control={control} rules={{ - required: t('treemapper:speciesValidation'), + required: t('speciesValidation'), }} render={({ field: { onChange, ...fieldProps } }) => ( + diff --git a/src/features/user/TreeMapper/components/PlantLocation.tsx b/src/features/user/TreeMapper/components/PlantLocation.tsx index b85da67893..0b06a3f0c8 100644 --- a/src/features/user/TreeMapper/components/PlantLocation.tsx +++ b/src/features/user/TreeMapper/components/PlantLocation.tsx @@ -1,7 +1,7 @@ import React from 'react'; import formatDate from '../../../../utils/countryCurrency/getFormattedDate'; import styles from '../TreeMapper.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import * as turf from '@turf/turf'; import { localizedAbbreviatedNumber } from '../../../../utils/getFormattedNumber'; import TreeIcon from '../../../../../public/assets/images/icons/TreeIcon'; @@ -33,7 +33,8 @@ function PlantLocation({ selectedLocation, setselectedLocation, }: Props) { - const { t, i18n } = useTranslation('treemapper'); + const t = useTranslations('Treemapper'); + const locale = useLocale(); const router = useRouter(); let treeCount = 0; if ((location as PlantLocationMulti)?.plantedSpecies?.length !== 0) { @@ -89,7 +90,7 @@ function PlantLocation({ (location as PlantLocationMulti).type === 'multi' ? '• ' + localizedAbbreviatedNumber( - i18n.language, + locale, Number(plantationArea), 2 ) + @@ -108,7 +109,7 @@ function PlantLocation({ {(location as PlantLocationMulti).type === 'multi' && treeCount ? `${treeCount}` : `1`} - +
{t((location as PlantLocationBase).captureStatus)} diff --git a/src/features/user/TreeMapper/components/PlantLocationPage.tsx b/src/features/user/TreeMapper/components/PlantLocationPage.tsx index 727b814e70..abcd13d881 100644 --- a/src/features/user/TreeMapper/components/PlantLocationPage.tsx +++ b/src/features/user/TreeMapper/components/PlantLocationPage.tsx @@ -1,7 +1,7 @@ import React, { ReactElement } from 'react'; import formatDate from '../../../../utils/countryCurrency/getFormattedDate'; import styles from '../TreeMapper.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import BackButton from '../../../../../public/assets/images/icons/BackButton'; import { getFormattedNumber } from '../../../../utils/getFormattedNumber'; import dynamic from 'next/dynamic'; @@ -52,19 +52,20 @@ export function LocationDetails({ location, setselectedLocation, }: Props): ReactElement { - const { t, i18n, ready } = useTranslation(['treemapper', 'maps']); + const tTreemapper = useTranslations('Treemapper'); + const tMaps = useTranslations('Maps'); + const locale = useLocale(); const [sampleTreeImages, setSampleTreeImages] = React.useState< SampleTreeImageProps[] >([]); const text = `${location?.deviceLocation?.coordinates.map((coord) => { - return getFormattedNumber(i18n.language, Number(coord)); + return getFormattedNumber(locale, Number(coord)); })}`; React.useEffect(() => { if (location?.type === 'multi') { if ( - ready && location && (location as PlantLocationMulti).samplePlantLocations && (location as PlantLocationMulti).samplePlantLocations.length > 0 @@ -84,7 +85,7 @@ export function LocationDetails({ if (element.coordinates?.[0]) { images.push({ image: element.coordinates[0].image, - description: `${t('maps:sampleTree')} ${ + description: `${tMaps('sampleTree')} ${ element.tag ? '#' + element.tag : '' }`, }); @@ -96,7 +97,7 @@ export function LocationDetails({ setSampleTreeImages([]); } } - }, [location, ready]); + }, [location]); return location ? ( <> {location.type === 'multi' && sampleTreeImages.length > 0 && ( @@ -123,22 +124,26 @@ export function LocationDetails({ )}
-

{t('captureMode')}

-
{t(location.captureMode)}
+

{tTreemapper('captureMode')}

+
+ {tTreemapper(location.captureMode)} +
-

{t('captureStatus')}

-
{t(location.captureStatus)}
+

{tTreemapper('captureStatus')}

+
+ {tTreemapper(location.captureStatus)} +
{/*
-

{t('guid')}

+

{tTreemapper('guid')}

{location.id}
*/} {location?.deviceLocation ? (

- {t('coordinates')} + {tTreemapper('coordinates')}

{text.split(',').join(', ')}
@@ -147,11 +152,11 @@ export function LocationDetails({ [] )}
-

{t('plantDate')}

+

{tTreemapper('plantDate')}

{formatDate(location.plantDate)}
-

{t('registrationDate')}

+

{tTreemapper('registrationDate')}

{formatDate(location.registrationDate)}
@@ -160,12 +165,12 @@ export function LocationDetails({ <>
-

{t('measurements')}

+

{tTreemapper('measurements')}

-

{t('date')}

+

{tTreemapper('date')}

{location.history?.map((h, index) => (
{formatDate(h?.created)} @@ -173,18 +178,18 @@ export function LocationDetails({ ))}
-

{t('height')}

+

{tTreemapper('height')}

{location.history?.map((h, index) => (
- {h?.measurements?.height} {t('m')} + {h?.measurements?.height} {tTreemapper('m')}
))}
-

{t('width')}

+

{tTreemapper('width')}

{location.history?.map((h, index) => (
- {h?.measurements?.width} {t('cm')} + {h?.measurements?.width} {tTreemapper('cm')}
))}
@@ -193,7 +198,7 @@ export function LocationDetails({ )} {(location as PlantLocationMulti | PlantLocation).plantProject && (
-

{t('plantProject')}

+

{tTreemapper('plantProject')}

{(location as PlantLocationMulti)?.plantedSpecies && (
-

{t('species')}

+

{tTreemapper('species')}

{(location as PlantLocationMulti)?.plantedSpecies?.map( @@ -221,7 +226,7 @@ export function LocationDetails({ : species.otherSpecies && species.otherSpecies !== 'Unknown' ? species.otherSpecies - : t('maps:unknown')} + : tMaps('unknown')}

); } @@ -232,7 +237,7 @@ export function LocationDetails({ )} {location.type === 'multi' && location.captureMode === 'on-site' && (
-

{t('maps:sampleTree')}

+

{tMaps('sampleTree')}

{/*
*/} {(location as PlantLocationMulti).samplePlantLocations && (location as PlantLocationMulti).samplePlantLocations.map( @@ -249,13 +254,13 @@ export function LocationDetails({ : spl.scientificSpecies && spl.scientificSpecies !== 'Unknown' ? spl.scientificSpecies - : t('maps:unknown')} + : tMaps('unknown')}
- {spl.tag ? `${t('maps:tag')} #${spl.tag} • ` : null} + {spl.tag ? `${tMaps('tag')} #${spl.tag} • ` : null} {spl?.measurements?.height} - {t('maps:meterHigh')} • {spl?.measurements?.width} - {t('maps:cmWide')} + {tMaps('meterHigh')} • {spl?.measurements?.width} + {tMaps('cmWide')}
); } diff --git a/src/features/user/TreeMapper/components/TreeMapperList.tsx b/src/features/user/TreeMapper/components/TreeMapperList.tsx index eea37b085a..dac17b76a4 100644 --- a/src/features/user/TreeMapper/components/TreeMapperList.tsx +++ b/src/features/user/TreeMapper/components/TreeMapperList.tsx @@ -2,7 +2,7 @@ import React, { ReactElement } from 'react'; import TransactionListLoader from '../../../../../public/assets/images/icons/TransactionListLoader'; import TransactionsNotFound from '../../../../../public/assets/images/icons/TransactionsNotFound'; import styles from '../TreeMapper.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { SamplePlantLocation, PlantLocation as PlantLocationType, @@ -34,7 +34,7 @@ export default function TreeMapperList({ fetchTreemapperData, links, }: Props): ReactElement { - const { t } = useTranslation('treemapper'); + const t = useTranslations('Treemapper'); return (
import('./components/Map'), { function TreeMapper(): ReactElement { const router = useRouter(); const { token, contextLoaded, logoutUser } = useUserProps(); - const { t } = useTranslation(['treemapper']); + const t = useTranslations('Treemapper'); const [progress, setProgress] = React.useState(0); const [isDataLoading, setIsDataLoading] = React.useState(false); const [plantLocations, setPlantLocations] = React.useState< @@ -186,9 +186,7 @@ function TreeMapper(): ReactElement { ) : (
-
- {t('treemapper:treeMapper')} -
+
{t('treeMapper')}
diff --git a/src/features/user/Widget/DonationLink/DonationLinkForm.tsx b/src/features/user/Widget/DonationLink/DonationLinkForm.tsx index 115b16f727..a9b3a51c1c 100644 --- a/src/features/user/Widget/DonationLink/DonationLinkForm.tsx +++ b/src/features/user/Widget/DonationLink/DonationLinkForm.tsx @@ -1,5 +1,5 @@ import { ReactElement, useState, useEffect } from 'react'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { Button, Switch, TextField } from '@mui/material'; import AutoCompleteCountry from '../../../common/InputTypes/AutoCompleteCountry'; import { useUserProps } from '../../../common/Layout/UserPropsContext'; @@ -41,7 +41,9 @@ const DonationLinkForm = ({ languageName: 'Automatic Selection', }); const [donationUrl, setDonationUrl] = useState(''); - const { t, ready } = useTranslation(['donationLink', 'country', 'me']); + const tDonationLink = useTranslations('DonationLink'); + const tCountry = useTranslations('Country'); + const tMe = useTranslations('Me'); const [localProject, setLocalProject] = useState(null); const [isSupport, setIsSupport] = useState(!user?.isPrivate); const [isTesting, setIsTesting] = useState(false); @@ -91,14 +93,14 @@ const DonationLinkForm = ({ useEffect(() => { const autoLanguage = { langCode: 'auto', - languageName: `${t('donationLink:automaticSelection')}`, + languageName: `${tDonationLink('automaticSelection')}`, }; if (!supportedLanguages.find((obj2) => obj2.langCode === 'auto')) supportedLanguages.unshift(autoLanguage as LanguageType); const autoCountry = { code: 'auto', - label: `${t('country:auto')}`, + label: tCountry('auto'), phone: '', } as const; if (!allCountries.find((obj2) => obj2.code === 'auto')) { @@ -116,22 +118,22 @@ const DonationLinkForm = ({ const linkSource = qrCode; const downloadLink = document.createElement('a'); downloadLink.href = linkSource; - downloadLink.download = t('donationLink:qrCodeFileName'); + downloadLink.download = tDonationLink('qrCodeFileName'); downloadLink.click(); } }; - if (isArrayUpdated && ready && user) { + if (isArrayUpdated && user) { return (
- {t('donationLink:countryLanguageTitle')} + {tDonationLink('countryLanguageTitle')}
)} renderOption={(props, option) => ( @@ -177,7 +179,7 @@ const DonationLinkForm = ({
- {t('donationLink:projectTitle')} + {tDonationLink('projectTitle')}
- {t('donationLink:treeCounterTitle')} + {tDonationLink('treeCounterTitle')}
-
{t('donationLink:treeCounterSubtitle')}
+
{tDonationLink('treeCounterSubtitle')}
{user.isPrivate && ( -
{t('donationLink:treeCounterPrivateAccountSubtitle')}
+
{tDonationLink('treeCounterPrivateAccountSubtitle')}
)}
- {t('donationLink:testingTitle')} + {tDonationLink('testingTitle')}
{isTesting && ( <> -
{t('donationLink:testingModeSubtitle1')}
+
{tDonationLink('testingModeSubtitle1')}
- {t('donationLink:testingModeSubtitle2')}{' '} + {tDonationLink('testingModeSubtitle2')}{' '} )}
-
- {t('donationLink:urlTitle')} -
+
{tDonationLink('urlTitle')}
window.open(donationUrl, '_blank')} > - {t('donationLink:preview')} + {tDonationLink('preview')}
{qrCode && (
- {t('donationLink:qrCodeTitle')} + {tDonationLink('qrCodeTitle')}
- {t('me:download')} + {tMe('download')}
@@ -288,7 +288,7 @@ const DonationLinkForm = ({
{isLinkUpdated && ( diff --git a/src/features/user/Widget/DonationLink/index.tsx b/src/features/user/Widget/DonationLink/index.tsx index 8ed23b66ea..b77979f08b 100644 --- a/src/features/user/Widget/DonationLink/index.tsx +++ b/src/features/user/Widget/DonationLink/index.tsx @@ -1,5 +1,5 @@ import React, { ReactElement, useContext, useEffect, useState } from 'react'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { getRequest } from '../../../../utils/apiRequests/api'; import DashboardView from '../../../common/Layout/DashboardView'; import { ErrorHandlingContext } from '../../../common/Layout/ErrorHandlingContext'; @@ -14,7 +14,8 @@ import { MapProject } from '../../../common/types/ProjectPropsContextInterface'; export default function DonationLink(): ReactElement | null { const { setErrors } = useContext(ErrorHandlingContext); const [projects, setProjects] = useState(null); - const { t, ready, i18n } = useTranslation(['donationLink']); + const t = useTranslations('DonationLink'); + const locale = useLocale(); const { tenantConfig } = useTenant(); async function fetchProjectList() { @@ -26,7 +27,7 @@ export default function DonationLink(): ReactElement | null { _scope: 'map', 'filter[purpose]': 'trees,restoration', tenant: tenantConfig?.id, - locale: i18n.language, + locale: locale, } ); if ( @@ -59,13 +60,13 @@ export default function DonationLink(): ReactElement | null { fetchProjectList(); }, []); - return ready ? ( + return ( -

{t('donationLink:donationLinkDescription')}

-

{t('donationLink:qrCodeDiscription')}

+

{t('donationLinkDescription')}

+

{t('qrCodeDiscription')}

} > @@ -75,5 +76,5 @@ export default function DonationLink(): ReactElement | null { - ) : null; + ); } diff --git a/src/features/user/Widget/EmbedModal.tsx b/src/features/user/Widget/EmbedModal.tsx index f923dfabc9..70acb6969c 100644 --- a/src/features/user/Widget/EmbedModal.tsx +++ b/src/features/user/Widget/EmbedModal.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Modal, Snackbar, styled } from '@mui/material'; import MuiAlert from '@mui/material/Alert'; import styles from './EmbedModal.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { putAuthenticatedRequest } from '../../../utils/apiRequests/api'; import { useRouter } from 'next/router'; import { ThemeContext } from '../../../theme/themeContext'; @@ -27,7 +27,7 @@ export default function EmbedModal({ embedModalOpen, setEmbedModalOpen, }: Props) { - const { t, ready } = useTranslation(['editProfile']); + const t = useTranslations('EditProfile'); const { setErrors } = React.useContext(ErrorHandlingContext); const [isUploadingData, setIsUploadingData] = React.useState(false); const [severity, setSeverity] = React.useState('success'); @@ -67,7 +67,7 @@ export default function EmbedModal({ logoutUser ); setSeverity('success'); - setSnackbarMessage(ready ? t('editProfile:profileSaved') : ''); + setSnackbarMessage(t('profileSaved')); handleSnackbarOpen(); setEmbedModalOpen(false); setIsUploadingData(false); @@ -92,10 +92,10 @@ export default function EmbedModal({
{' '} - {t('editProfile:changeAccountToPublic')} + {t('changeAccountToPublic')}
- {t('editProfile:accountPrivacyChangeText')} + {t('accountPrivacyChangeText')}
{/*
@@ -121,7 +121,7 @@ export default function EmbedModal({ {isUploadingData ? (
) : ( - t('editProfile:continue') + t('continue') )}
diff --git a/src/tenants/common/Home/index.tsx b/src/tenants/common/Home/index.tsx index cae4b826c4..378779cd75 100644 --- a/src/tenants/common/Home/index.tsx +++ b/src/tenants/common/Home/index.tsx @@ -5,7 +5,7 @@ import TreeCounter from '../../../features/common/TreeCounter/TreeCounter'; import Footer from '../../../features/common/Layout/Footer'; import React from 'react'; import { useTenant } from '../../../features/common/Layout/TenantContext'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import { LeaderBoardList, TenantScore, @@ -18,18 +18,18 @@ interface Props { export default function About({ leaderboard, tenantScore }: Props) { const { tenantConfig } = useTenant(); - const { t, ready } = useTranslation(['tenants']); + const t = useTranslations('Tenants'); const descriptionRef = React.useRef(null); React.useEffect(() => { if (descriptionRef.current !== null) { descriptionRef.current.innerHTML = t( - `tenants:${tenantConfig.config.slug}.description` + `${tenantConfig.config.slug}.description` ); } - }, [ready]); + }, []); - return ready ? ( + return (
@@ -43,7 +43,7 @@ export default function About({ leaderboard, tenantScore }: Props) { className={styles.publicUserDescription} style={{ fontWeight: 'bold', marginBottom: '0px' }} > - {t(`tenants:${tenantConfig.config.slug}.title`)} + {t(`${tenantConfig.config.slug}.title`)}

- ) : null; + ); } diff --git a/src/tenants/common/LeaderBoard/index.tsx b/src/tenants/common/LeaderBoard/index.tsx index 967297d6e9..f91517815b 100644 --- a/src/tenants/common/LeaderBoard/index.tsx +++ b/src/tenants/common/LeaderBoard/index.tsx @@ -1,7 +1,7 @@ import React from 'react'; import styles from './LeaderBoard.module.scss'; import { getFormattedNumber } from '../../../utils/getFormattedNumber'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { LeaderBoardList } from '../../../features/common/types/leaderboard'; interface Props { @@ -11,12 +11,14 @@ interface Props { export default function LeaderBoardSection(leaderboard: Props) { const [selectedTab, setSelectedTab] = React.useState('recent'); const leaderboardData = leaderboard.leaderboard; - const { t, i18n, ready } = useTranslation(['leaderboard', 'common']); + const tLeaderboard = useTranslations('Leaderboard'); + const tCommon = useTranslations('Common'); + const locale = useLocale(); - return ready ? ( + return (
-

{t('leaderboard:forestFrontrunners')}

+

{tLeaderboard('forestFrontrunners')}

{leaderboardData && @@ -53,11 +55,8 @@ export default function LeaderBoardSection(leaderboard: Props) { {leader.donorName}

- {getFormattedNumber( - i18n.language, - Number(leader.treeCount) - )}{' '} - {t('common:tree', { count: Number(leader.treeCount) })} + {getFormattedNumber(locale, Number(leader.treeCount))}{' '} + {tCommon('tree', { count: Number(leader.treeCount) })}

{/*

{leader.created} @@ -73,11 +72,8 @@ export default function LeaderBoardSection(leaderboard: Props) { {leader.donorName}

- {getFormattedNumber( - i18n.language, - Number(leader.treeCount) - )}{' '} - {t('common:tree', { count: Number(leader.treeCount) })} + {getFormattedNumber(locale, Number(leader.treeCount))}{' '} + {tCommon('tree', { count: Number(leader.treeCount) })}

))} @@ -104,5 +100,5 @@ export default function LeaderBoardSection(leaderboard: Props) { alt="" /> */}
- ) : null; + ); } diff --git a/src/tenants/planet/LeaderBoard/components/Score.tsx b/src/tenants/planet/LeaderBoard/components/Score.tsx index 91ffc37db5..c59eb7de4d 100644 --- a/src/tenants/planet/LeaderBoard/components/Score.tsx +++ b/src/tenants/planet/LeaderBoard/components/Score.tsx @@ -1,6 +1,6 @@ import React from 'react'; import styles from './LeaderBoard.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { getFormattedNumber } from '../../../../utils/getFormattedNumber'; import LeaderboardLoader from '../../../../features/common/ContentLoaders/LeaderboardLoader'; import MaterialTextField from '../../../../features/common/InputTypes/MaterialTextField'; @@ -22,7 +22,9 @@ interface Props { export default function LeaderBoardSection(leaderboard: Props) { const [selectedTab, setSelectedTab] = React.useState('recent'); const leaderboardData = leaderboard.leaderboard; - const { t, i18n, ready } = useTranslation(['leaderboard', 'common']); + const tLeaderboard = useTranslations('Leaderboard'); + const tCommon = useTranslations('Common'); + const locale = useLocale(); const { setErrors } = React.useContext(ErrorHandlingContext); const [users, setUsers] = React.useState([]); const { tenantConfig } = useTenant(); @@ -38,10 +40,10 @@ export default function LeaderBoardSection(leaderboard: Props) { } }; - return ready ? ( + return (
-

{t('leaderboard:forestFrontrunners')}

+

{tLeaderboard('forestFrontrunners')}

@@ -54,7 +56,7 @@ export default function LeaderBoardSection(leaderboard: Props) { : styles.leaderBoardTableHeaderTitle } > - {t('leaderboard:mostRecent')} + {tLeaderboard('mostRecent')}
))} @@ -166,7 +162,7 @@ export default function LeaderBoardSection(leaderboard: Props) { renderInput={(params) => ( { @@ -207,5 +203,5 @@ export default function LeaderBoardSection(leaderboard: Props) { alt="" />
- ) : null; + ); } diff --git a/src/tenants/planet/LeaderBoard/components/Stats.tsx b/src/tenants/planet/LeaderBoard/components/Stats.tsx index 6e902ffe95..29c095654a 100644 --- a/src/tenants/planet/LeaderBoard/components/Stats.tsx +++ b/src/tenants/planet/LeaderBoard/components/Stats.tsx @@ -3,7 +3,7 @@ import React, { ReactElement } from 'react'; import InfoIcon from '../../../../../public/assets/images/icons/InfoIcon'; import styles from './Stats.module.scss'; import StatsInfoModal from './StatsInfoModal'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { localizedAbbreviatedNumber } from '../../../../utils/getFormattedNumber'; import { ThemeContext } from '../../../../theme/themeContext'; @@ -12,25 +12,22 @@ interface Props { } export default function Stats({ tenantScore }: Props): ReactElement { const [infoExpanded, setInfoExpanded] = React.useState(null); - const { t, i18n, ready } = useTranslation([ - 'leaderboard', - 'common', - 'planet', - ]); + const tPlanet = useTranslations('Planet'); + const locale = useLocale(); const [openModal, setModalOpen] = React.useState(false); const handleModalClose = () => { setModalOpen(false); }; const { theme } = React.useContext(ThemeContext); - return ready ? ( + return (

- {localizedAbbreviatedNumber(i18n.language, Number(63356788), 2)} + {localizedAbbreviatedNumber(locale, Number(63356788), 2)}

-

{t('planet:treesDonated')}

+

{tPlanet('treesDonated')}

- {localizedAbbreviatedNumber( - i18n.language, - Number(tenantScore.total), - 2 - )} + {localizedAbbreviatedNumber(locale, Number(tenantScore.total), 2)}

-

{t('planet:plantedGlobally')}

+

{tPlanet('plantedGlobally')}

- ) : ( - <> ); } diff --git a/src/tenants/planet/LeaderBoard/components/StatsInfoModal.tsx b/src/tenants/planet/LeaderBoard/components/StatsInfoModal.tsx index 944334a8ac..aa2652cb5c 100644 --- a/src/tenants/planet/LeaderBoard/components/StatsInfoModal.tsx +++ b/src/tenants/planet/LeaderBoard/components/StatsInfoModal.tsx @@ -1,6 +1,6 @@ import React, { ReactElement } from 'react'; import styles from './Stats.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import OpenLink from '../../../../../public/assets/images/icons/OpenLink'; import CancelIcon from '../../../../../public/assets/images/icons/CancelIcon'; @@ -15,41 +15,41 @@ function ExploreInfoModal({ setInfoExpanded, setModalOpen, }: Props): ReactElement { - const { t, ready } = useTranslation(['planet']); + const t = useTranslations('Planet'); - return ready ? ( + return (
{infoExpanded === 'donated' ? (
-
{t('planet:treesDonated')}
+
{t('treesDonated')}
- {t('planet:treesDonatedDescription')} + {t('treesDonatedDescription')}
) : null} {infoExpanded === 'planted' ? (
- {t('planet:plantedByTPO', { projects: 160 })} + {t('plantedByTPO', { projects: 160 })}
- {t('planet:treesPlantedDescription')} + {t('treesPlantedDescription')}
) : null} {infoExpanded === 'global' ? (
-
{t('planet:plantedGlobally')}
+
{t('plantedGlobally')}
- {t('planet:globallySince')} + {t('globallySince')}
) : null} {infoExpanded === 'loss' ? (
-
{t('planet:forestLoss')}
+
{t('forestLoss')}
- ) : ( - <> ); } diff --git a/src/tenants/planet/LeaderBoard/components/Stories.tsx b/src/tenants/planet/LeaderBoard/components/Stories.tsx index 97d0717c8c..d8277e36be 100644 --- a/src/tenants/planet/LeaderBoard/components/Stories.tsx +++ b/src/tenants/planet/LeaderBoard/components/Stories.tsx @@ -1,56 +1,45 @@ import React, { ReactElement } from 'react'; import styles from './Stories.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { lang_path } from '../../../../utils/constants/wpLanguages'; export default function Stories(): ReactElement { - const { i18n, t, ready } = useTranslation(['planet']); + const t = useTranslations('Planet'); + const locale = useLocale(); return ( - <> - {ready ? ( -
- ); } diff --git a/src/tenants/planet/LeaderBoard/components/Video.tsx b/src/tenants/planet/LeaderBoard/components/Video.tsx index 332f2355f7..c07907d423 100644 --- a/src/tenants/planet/LeaderBoard/components/Video.tsx +++ b/src/tenants/planet/LeaderBoard/components/Video.tsx @@ -1,18 +1,18 @@ // Not used currently. Left as a reference. import React, { ReactElement } from 'react'; import styles from './Video.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useTranslations } from 'next-intl'; import ReactPlayer from 'react-player/lazy'; import BackArrow from '../../../../../public/assets/images/icons/headerIcons/BackArrow'; function Video(): ReactElement { - const { t, ready } = useTranslation(['leaderboard', 'common']); + const tLeaderboard = useTranslations('Leaderboard'); const videoUrl = 'Some dummy url (to be replaced)'; - return ready ? ( + return (
-

{t('leaderboard:videoTitle')}

+

{tLeaderboard('videoTitle')}

@@ -38,8 +38,6 @@ function Video(): ReactElement {
- ) : ( - <> ); } diff --git a/src/tenants/salesforce/Home/components/LeaderBoardSection.tsx b/src/tenants/salesforce/Home/components/LeaderBoardSection.tsx index ef30189215..a140fab86b 100644 --- a/src/tenants/salesforce/Home/components/LeaderBoardSection.tsx +++ b/src/tenants/salesforce/Home/components/LeaderBoardSection.tsx @@ -1,6 +1,6 @@ import React from 'react'; import styles from './../styles/LeaderBoardSection.module.scss'; -import { useTranslation } from 'next-i18next'; +import { useLocale, useTranslations } from 'next-intl'; import { getFormattedNumber } from '../../../../utils/getFormattedNumber'; interface Props { @@ -10,9 +10,11 @@ interface Props { export default function LeaderBoardSection(leaderboard: Props) { const [selectedTab, setSelectedTab] = React.useState('recent'); const leaderboardData = leaderboard.leaderboard; - const { t, i18n, ready } = useTranslation(['leaderboard', 'common']); + const tLeaderboard = useTranslations('Leaderboard'); + const tCommon = useTranslations('Common'); + const locale = useLocale(); - return ready ? ( + return (

Tree Donation Tracker

@@ -27,7 +29,7 @@ export default function LeaderBoardSection(leaderboard: Props) { : styles.leaderBoardTableHeaderTitle } > - {t('leaderboard:mostRecent')} + {tLeaderboard('mostRecent')}
{leaderboardData && @@ -53,11 +55,8 @@ export default function LeaderBoardSection(leaderboard: Props) { {leader.donorName}

- {getFormattedNumber( - i18n.language, - Number(leader.treeCount) - )}{' '} - {t('common:tree', { count: Number(leader.treeCount) })} + {getFormattedNumber(locale, Number(leader.treeCount))}{' '} + {tCommon('tree', { count: Number(leader.treeCount) })}

); @@ -72,11 +71,8 @@ export default function LeaderBoardSection(leaderboard: Props) { {leader.donorName}

- {getFormattedNumber( - i18n.language, - Number(leader.treeCount) - )}{' '} - {t('common:tree', { count: Number(leader.treeCount) })} + {getFormattedNumber(locale, Number(leader.treeCount))}{' '} + {tCommon('tree', { count: Number(leader.treeCount) })}

); @@ -89,7 +85,5 @@ export default function LeaderBoardSection(leaderboard: Props) {
- ) : ( - <> ); } From 94111629487e78fe6af412383ac02d88ae3fea72 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Fri, 23 Feb 2024 14:28:41 +0530 Subject: [PATCH 13/70] feat: integrates next-intl with project details page --- pages/sites/[slug]/[locale]/[p].tsx | 115 +++++++++++++++----------- pages/sites/[slug]/[locale]/index.tsx | 4 +- 2 files changed, 67 insertions(+), 52 deletions(-) diff --git a/pages/sites/[slug]/[locale]/[p].tsx b/pages/sites/[slug]/[locale]/[p].tsx index 8d718df264..3af8c14a44 100644 --- a/pages/sites/[slug]/[locale]/[p].tsx +++ b/pages/sites/[slug]/[locale]/[p].tsx @@ -8,8 +8,7 @@ import { getRequest } from '../../../../src/utils/apiRequests/api'; import getStoredCurrency from '../../../../src/utils/countryCurrency/getStoredCurrency'; import GetProjectMeta from '../../../../src/utils/getMetaTags/GetProjectMeta'; import { getAllPlantLocations } from '../../../../src/utils/maps/plantLocations'; -import { useTranslation } from 'next-i18next'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { AbstractIntlMessages, useLocale } from 'next-intl'; import { handleError, APIError, @@ -33,18 +32,15 @@ import { GetStaticPropsResult, } from 'next'; import { defaultTenant } from '../../../../tenant.config'; +import deepmerge from 'deepmerge'; interface Props { - initialized: boolean; currencyCode: string | null | undefined; setCurrencyCode: SetState; - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function Donate({ - initialized, currencyCode, setCurrencyCode, pageProps, @@ -54,7 +50,7 @@ export default function Donate({ string | undefined | null >(undefined); const [internalLanguage, setInternalLanguage] = React.useState(''); - const { i18n } = useTranslation(); + const locale = useLocale(); const { geoJson, project, @@ -87,13 +83,13 @@ export default function Donate({ if ( !internalCurrencyCode || currencyCode !== internalCurrencyCode || - internalLanguage !== i18n.language + internalLanguage !== locale ) { const currency = getStoredCurrency( pageProps.tenantConfig.config.fallbackCurrency! ); setInternalCurrencyCode(currency); - setInternalLanguage(i18n.language); + setInternalLanguage(locale); setCurrencyCode(currency); try { const { p } = router.query; @@ -103,7 +99,7 @@ export default function Donate({ { _scope: 'extended', currency: currency || '', - locale: i18n.language, + locale: locale, } ); if ( @@ -128,7 +124,7 @@ export default function Donate({ if (router.query.p) { loadProject(); } - }, [router.query.p, currencyCode, i18n.language]); + }, [router.query.p, currencyCode, locale]); React.useEffect(() => { async function loadPl( @@ -195,15 +191,13 @@ export default function Donate({ return pageProps.tenantConfig ? ( <> {project ? : null} - {initialized ? ( - project ? ( - <> - - - ) : ( - <> - ) - ) : null} + {project ? ( + <> + + + ) : ( + <> + )} ) : ( @@ -230,43 +224,66 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const userMessages = { + ...( + await import( + `../../../../public/static/locales/${context.params?.locale}/common.json` + ) + ).default, + ...( + await import( + `../../../../public/static/locales/${context.params?.locale}/maps.json` + ) + ).default, + ...( + await import( + `../../../../public/static/locales/${context.params?.locale}/donate.json` + ) + ).default, + ...( + await import( + `../../../../public/static/locales/${context.params?.locale}/country.json` + ) + ).default, + ...( + await import( + `../../../../public/static/locales/${context.params?.locale}/manageProjects.json` + ) + ).default, + }; + + const defaultMessages = { + ...(await import('../../../../public/static/locales/en/common.json')) + .default, + ...(await import('../../../../public/static/locales/en/maps.json')).default, + ...(await import('../../../../public/static/locales/en/donate.json')) + .default, + ...(await import('../../../../public/static/locales/en/country.json')) + .default, + ...( + await import('../../../../public/static/locales/en/manageProjects.json') + ).default, + }; + + const messages: AbstractIntlMessages = deepmerge( + defaultMessages, + userMessages + ); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/index.tsx b/pages/sites/[slug]/[locale]/index.tsx index 0f336aeb87..e4d1bd5ce5 100644 --- a/pages/sites/[slug]/[locale]/index.tsx +++ b/pages/sites/[slug]/[locale]/index.tsx @@ -33,9 +33,7 @@ import deepmerge from 'deepmerge'; interface Props { currencyCode: string; setCurrencyCode: SetState; - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function Donate({ From beb63f22c8b11b4d4ae5ba5c79e368050578aa36 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 4 Mar 2024 10:42:51 +0530 Subject: [PATCH 14/70] feat: integrates next-intl with login page --- middleware.ts | 5 ++- pages/sites/[slug]/[locale]/login.tsx | 58 ++++++++++++--------------- 2 files changed, 30 insertions(+), 33 deletions(-) diff --git a/middleware.ts b/middleware.ts index c08ca14070..dafdebb519 100644 --- a/middleware.ts +++ b/middleware.ts @@ -70,8 +70,11 @@ export default async function middleware(req: NextRequest) { if (isLocaleMissing) { const locale = getLocale(req); const cleanPathname = removeLocaleFromUrl(pathname); + const searchParams = req.nextUrl.search; const newUrl = new URL( - `/${locale}${cleanPathname.startsWith('/') ? '' : '/'}${cleanPathname}`, + `/${locale}${ + cleanPathname.startsWith('/') ? '' : '/' + }${cleanPathname}${searchParams}`, req.url ); return NextResponse.redirect(newUrl); diff --git a/pages/sites/[slug]/[locale]/login.tsx b/pages/sites/[slug]/[locale]/login.tsx index a569442b70..7089662ed7 100644 --- a/pages/sites/[slug]/[locale]/login.tsx +++ b/pages/sites/[slug]/[locale]/login.tsx @@ -2,7 +2,6 @@ import React, { ReactElement } from 'react'; import { UserProfileLoader } from '../../../../src/features/common/ContentLoaders/UserProfile/UserProfile'; import { useRouter } from 'next/router'; import { useUserProps } from '../../../../src/features/common/Layout/UserPropsContext'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { constructPathsForTenantSlug, getTenantConfig, @@ -15,11 +14,11 @@ import { GetStaticPropsResult, } from 'next'; import { defaultTenant } from '../../../../tenant.config'; +import { AbstractIntlMessages } from 'next-intl'; +import deepmerge from 'deepmerge'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function Login({ pageProps }: Props): ReactElement { @@ -102,43 +101,38 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const userMessages = { + ...( + await import( + `../../../../public/static/locales/${context.params?.locale}/common.json` + ) + ).default, + }; + + const defaultMessages = { + ...(await import('../../../../public/static/locales/en/common.json')) + .default, + }; + + const messages: AbstractIntlMessages = deepmerge( + defaultMessages, + userMessages + ); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; From b025ab8c045482a95c70d693b814d579a00af668 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 4 Mar 2024 11:18:43 +0530 Subject: [PATCH 15/70] feat: integrates next-intl with /profile --- pages/sites/[slug]/[locale]/profile/index.tsx | 90 +++++++++++-------- .../microComponents/UserFeatures.tsx | 6 +- 2 files changed, 58 insertions(+), 38 deletions(-) diff --git a/pages/sites/[slug]/[locale]/profile/index.tsx b/pages/sites/[slug]/[locale]/profile/index.tsx index 3aa35b3742..87469d3013 100644 --- a/pages/sites/[slug]/[locale]/profile/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/index.tsx @@ -5,8 +5,7 @@ import Profile from '../../../../../src/features/user/Profile/components/Profile import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; import MyContributions from '../../../../../src/features/user/Profile/components/MyContributions'; import Head from 'next/head'; -import { useTranslation } from 'next-i18next'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { User } from '@planet-sdk/common'; import { GetStaticProps, @@ -22,15 +21,14 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../tenant.config'; import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; import myProfileStyle from '../../../../../src/features/user/Profile/styles/MyProfile.module.scss'; +import deepmerge from 'deepmerge'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } function ProfilePage({ pageProps: { tenantConfig } }: Props): ReactElement { - const { t } = useTranslation('me'); + const t = useTranslations('Me'); // External imports const router = useRouter(); const { user, contextLoaded } = useUserProps(); @@ -94,44 +92,66 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const userMessages = { + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/common.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/me.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/profile.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/country.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/donate.json` + ) + ).default, + }; + + const defaultMessages = { + ...(await import('../../../../../public/static/locales/en/common.json')) + .default, + ...(await import('../../../../../public/static/locales/en/me.json')) + .default, + ...(await import('../../../../../public/static/locales/en/profile.json')) + .default, + ...(await import('../../../../../public/static/locales/en/country.json')) + .default, + ...(await import('../../../../../public/static/locales/en/donate.json')) + .default, + }; + + const messages: AbstractIntlMessages = deepmerge( + defaultMessages, + userMessages + ); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - 'profile', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/src/features/user/Profile/components/ProfileBox/microComponents/UserFeatures.tsx b/src/features/user/Profile/components/ProfileBox/microComponents/UserFeatures.tsx index cf878ce9cd..5313b427a9 100644 --- a/src/features/user/Profile/components/ProfileBox/microComponents/UserFeatures.tsx +++ b/src/features/user/Profile/components/ProfileBox/microComponents/UserFeatures.tsx @@ -22,7 +22,7 @@ const UserFeatures = ({ }: UserFeaturesProps) => { const { light } = theme; const router = useRouter(); - const { t } = useTranslations(['profile']); + const t = useTranslations('Profile'); const { setRefetchUserData, user: verifiedUser } = useUserProps(); const [isRedeemModalOpen, setIsRedeemModalOpen] = useState(false); @@ -55,7 +55,7 @@ const UserFeatures = ({ startIcon={} onClick={handleRedeemModalOpen} > - {t('profile:feature.redeem')} + {t('feature.redeem')} } onClick={handleRegisterTree} > - {t('profile:feature.registerTree')} + {t('feature.registerTree')} )} From 6fbc46d71b3097cb545477b0f1de0d8032e2c6cf Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 4 Mar 2024 14:09:51 +0530 Subject: [PATCH 16/70] feat: sets up next-intl for settings/widget pages --- .../sites/[slug]/[locale]/profile/api-key.tsx | 71 ++++++++------- .../[locale]/profile/delete-account.tsx | 79 ++++++++++------- .../[slug]/[locale]/profile/donation-link.tsx | 88 ++++++++++++------- pages/sites/[slug]/[locale]/profile/edit.tsx | 60 ++++++++++--- .../[locale]/profile/impersonate-user.tsx | 54 +++++++++--- .../sites/[slug]/[locale]/profile/widgets.tsx | 79 ++++++++++------- 6 files changed, 281 insertions(+), 150 deletions(-) diff --git a/pages/sites/[slug]/[locale]/profile/api-key.tsx b/pages/sites/[slug]/[locale]/profile/api-key.tsx index 4cd44f89ec..5b4b5b8acf 100644 --- a/pages/sites/[slug]/[locale]/profile/api-key.tsx +++ b/pages/sites/[slug]/[locale]/profile/api-key.tsx @@ -1,7 +1,7 @@ import Head from 'next/head'; import React, { ReactElement } from 'react'; -import { useTranslation } from 'next-i18next'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; +import deepmerge from 'deepmerge'; import ApiKey from '../../../../../src/features/user/Settings/ApiKey'; import { GetStaticProps, @@ -25,7 +25,7 @@ interface Props { } function EditProfilePage({ pageProps: { tenantConfig } }: Props): ReactElement { - const { t } = useTranslation('me'); + const t = useTranslations('Me'); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -67,43 +67,52 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const userMessages = { + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/common.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/me.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/country.json` + ) + ).default, + }; + + const defaultMessages = { + ...(await import('../../../../../public/static/locales/en/common.json')) + .default, + ...(await import('../../../../../public/static/locales/en/me.json')) + .default, + ...(await import('../../../../../public/static/locales/en/country.json')) + .default, + }; + + const messages: AbstractIntlMessages = deepmerge( + defaultMessages, + userMessages + ); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/delete-account.tsx b/pages/sites/[slug]/[locale]/profile/delete-account.tsx index e057cc40e0..27ae72de1a 100644 --- a/pages/sites/[slug]/[locale]/profile/delete-account.tsx +++ b/pages/sites/[slug]/[locale]/profile/delete-account.tsx @@ -1,8 +1,8 @@ import Head from 'next/head'; import React, { ReactElement } from 'react'; import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; -import { useTranslation } from 'next-i18next'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; +import deepmerge from 'deepmerge'; import DeleteProfile from '../../../../../src/features/user/Settings/DeleteProfile'; import { GetStaticProps, @@ -27,7 +27,7 @@ interface Props { function DeleteProfilePage({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t } = useTranslation('me'); + const t = useTranslations('Me'); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -69,43 +69,60 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const userMessages = { + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/common.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/me.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/country.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/editProfile.json` + ) + ).default, + }; + + const defaultMessages = { + ...(await import('../../../../../public/static/locales/en/common.json')) + .default, + ...(await import('../../../../../public/static/locales/en/me.json')) + .default, + ...(await import('../../../../../public/static/locales/en/country.json')) + .default, + ...( + await import('../../../../../public/static/locales/en/editProfile.json') + ).default, + }; + + const messages: AbstractIntlMessages = deepmerge( + defaultMessages, + userMessages + ); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/donation-link.tsx b/pages/sites/[slug]/[locale]/profile/donation-link.tsx index e7696f5b20..b8b2172867 100644 --- a/pages/sites/[slug]/[locale]/profile/donation-link.tsx +++ b/pages/sites/[slug]/[locale]/profile/donation-link.tsx @@ -2,8 +2,8 @@ import React, { ReactElement } from 'react'; import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; import DonationLink from '../../../../../src/features/user/Widget/DonationLink'; import Head from 'next/head'; -import { useTranslation } from 'next-i18next'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; +import deepmerge from 'deepmerge'; import { GetStaticProps, GetStaticPropsContext, @@ -27,7 +27,7 @@ interface Props { export default function DonationLinkPage({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t, ready } = useTranslation(['me']); + const t = useTranslations('Me'); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -40,7 +40,7 @@ export default function DonationLinkPage({ return tenantConfig ? ( - {ready ? t('donationLinkTitle') : ''} + {t('donationLinkTitle')} @@ -67,43 +67,67 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const userMessages = { + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/common.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/me.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/country.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/donationLink.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/bulkCodes.json` + ) + ).default, + }; + + const defaultMessages = { + ...(await import('../../../../../public/static/locales/en/common.json')) + .default, + ...(await import('../../../../../public/static/locales/en/me.json')) + .default, + ...(await import('../../../../../public/static/locales/en/country.json')) + .default, + ...( + await import('../../../../../public/static/locales/en/donationLink.json') + ).default, + ...(await import('../../../../../public/static/locales/en/bulkCodes.json')) + .default, + }; + + const messages: AbstractIntlMessages = deepmerge( + defaultMessages, + userMessages + ); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/edit.tsx b/pages/sites/[slug]/[locale]/profile/edit.tsx index 2b45699af3..69770ad390 100644 --- a/pages/sites/[slug]/[locale]/profile/edit.tsx +++ b/pages/sites/[slug]/[locale]/profile/edit.tsx @@ -1,8 +1,8 @@ import Head from 'next/head'; import React, { ReactElement } from 'react'; import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { useTranslation } from 'next-i18next'; +import deepmerge from 'deepmerge'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import EditProfile from '../../../../../src/features/user/Settings/EditProfile'; import { GetStaticProps, @@ -25,7 +25,7 @@ interface Props { } function EditProfilePage({ pageProps: { tenantConfig } }: Props): ReactElement { - const { t } = useTranslation('me'); + const t = useTranslations('Me'); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -67,24 +67,60 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const userMessages = { + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/common.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/me.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/country.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/editProfile.json` + ) + ).default, + }; + + const defaultMessages = { + ...(await import('../../../../../public/static/locales/en/common.json')) + .default, + ...(await import('../../../../../public/static/locales/en/me.json')) + .default, + ...(await import('../../../../../public/static/locales/en/country.json')) + .default, + ...( + await import('../../../../../public/static/locales/en/editProfile.json') + ).default, + }; + + const messages: AbstractIntlMessages = deepmerge( + defaultMessages, + userMessages + ); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - ['editProfile', 'me', 'common', 'country'], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx b/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx index b7019929cd..04f635db68 100644 --- a/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx +++ b/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx @@ -1,7 +1,7 @@ import Head from 'next/head'; -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import deepmerge from 'deepmerge'; import ImpersonateUser from '../../../../../src/features/user/Settings/ImpersonateUser'; import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; import { ReactElement, useEffect } from 'react'; @@ -30,7 +30,7 @@ const ImpersonateUserPage = ({ pageProps: { tenantConfig }, }: Props): ReactElement => { const { user, isImpersonationModeOn } = useUserProps(); - const { t } = useTranslation('me'); + const t = useTranslations('Me'); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -43,7 +43,7 @@ const ImpersonateUserPage = ({ return tenantConfig ? ( - {t('me:switchUser')} + {t('switchUser')} {user?.allowedToSwitch && !isImpersonationModeOn ? ( @@ -76,24 +76,52 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const userMessages = { + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/common.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/me.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/country.json` + ) + ).default, + }; + + const defaultMessages = { + ...(await import('../../../../../public/static/locales/en/common.json')) + .default, + ...(await import('../../../../../public/static/locales/en/me.json')) + .default, + ...(await import('../../../../../public/static/locales/en/country.json')) + .default, + }; + + const messages: AbstractIntlMessages = deepmerge( + defaultMessages, + userMessages + ); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - ['me', 'common'], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/widgets.tsx b/pages/sites/[slug]/[locale]/profile/widgets.tsx index f3a2d88e87..09856a525f 100644 --- a/pages/sites/[slug]/[locale]/profile/widgets.tsx +++ b/pages/sites/[slug]/[locale]/profile/widgets.tsx @@ -4,8 +4,7 @@ import UserLayout from '../../../../../src/features/common/Layout/UserLayout/Use import EmbedModal from '../../../../../src/features/user/Widget/EmbedModal'; import styles from '../../../../../src/features/common/Layout/UserLayout/UserLayout.module.scss'; import Head from 'next/head'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { GetStaticProps, GetStaticPropsContext, @@ -19,6 +18,7 @@ import { defaultTenant } from '../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import deepmerge from 'deepmerge'; interface Props { pageProps: { @@ -27,7 +27,7 @@ interface Props { } function ProfilePage({ pageProps: { tenantConfig } }: Props): ReactElement { - const { t } = useTranslation('me'); + const t = useTranslations('Me'); const router = useRouter(); const { setTenantConfig } = useTenant(); const { user } = useUserProps(); @@ -88,43 +88,60 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const userMessages = { + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/common.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/me.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/country.json` + ) + ).default, + ...( + await import( + `../../../../../public/static/locales/${context.params?.locale}/editProfile.json` + ) + ).default, + }; + + const defaultMessages = { + ...(await import('../../../../../public/static/locales/en/common.json')) + .default, + ...(await import('../../../../../public/static/locales/en/me.json')) + .default, + ...(await import('../../../../../public/static/locales/en/country.json')) + .default, + ...( + await import('../../../../../public/static/locales/en/editProfile.json') + ).default, + }; + + const messages: AbstractIntlMessages = deepmerge( + defaultMessages, + userMessages + ); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; From c2c22ce4b3771266d762a66346fda7ac820e900e Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 4 Mar 2024 15:03:33 +0530 Subject: [PATCH 17/70] refactor: introduces getMessagesForPage utility function - removes code to initialize `messages` in each page --- pages/sites/[slug]/[locale]/[p].tsx | 51 ++----------- pages/sites/[slug]/[locale]/index.tsx | 51 ++----------- pages/sites/[slug]/[locale]/login.tsx | 23 ++---- .../sites/[slug]/[locale]/profile/api-key.tsx | 36 ++-------- .../[locale]/profile/delete-account.tsx | 44 ++---------- .../[slug]/[locale]/profile/donation-link.tsx | 52 ++------------ pages/sites/[slug]/[locale]/profile/edit.tsx | 45 ++---------- .../[locale]/profile/impersonate-user.tsx | 37 ++-------- pages/sites/[slug]/[locale]/profile/index.tsx | 51 ++----------- .../sites/[slug]/[locale]/profile/widgets.tsx | 45 ++---------- src/utils/language/getMessagesForPage.ts | 71 +++++++++++++++++++ 11 files changed, 121 insertions(+), 385 deletions(-) create mode 100644 src/utils/language/getMessagesForPage.ts diff --git a/pages/sites/[slug]/[locale]/[p].tsx b/pages/sites/[slug]/[locale]/[p].tsx index 3af8c14a44..b3cd04e4a5 100644 --- a/pages/sites/[slug]/[locale]/[p].tsx +++ b/pages/sites/[slug]/[locale]/[p].tsx @@ -32,7 +32,7 @@ import { GetStaticPropsResult, } from 'next'; import { defaultTenant } from '../../../../tenant.config'; -import deepmerge from 'deepmerge'; +import getMessagesForPage from '../../../../src/utils/language/getMessagesForPage'; interface Props { currencyCode: string | null | undefined; @@ -235,51 +235,10 @@ export const getStaticProps: GetStaticProps = async ( const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; - const userMessages = { - ...( - await import( - `../../../../public/static/locales/${context.params?.locale}/common.json` - ) - ).default, - ...( - await import( - `../../../../public/static/locales/${context.params?.locale}/maps.json` - ) - ).default, - ...( - await import( - `../../../../public/static/locales/${context.params?.locale}/donate.json` - ) - ).default, - ...( - await import( - `../../../../public/static/locales/${context.params?.locale}/country.json` - ) - ).default, - ...( - await import( - `../../../../public/static/locales/${context.params?.locale}/manageProjects.json` - ) - ).default, - }; - - const defaultMessages = { - ...(await import('../../../../public/static/locales/en/common.json')) - .default, - ...(await import('../../../../public/static/locales/en/maps.json')).default, - ...(await import('../../../../public/static/locales/en/donate.json')) - .default, - ...(await import('../../../../public/static/locales/en/country.json')) - .default, - ...( - await import('../../../../public/static/locales/en/manageProjects.json') - ).default, - }; - - const messages: AbstractIntlMessages = deepmerge( - defaultMessages, - userMessages - ); + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'maps', 'donate', 'country', 'manageProjects'], + }); return { props: { diff --git a/pages/sites/[slug]/[locale]/index.tsx b/pages/sites/[slug]/[locale]/index.tsx index e4d1bd5ce5..77c282120b 100644 --- a/pages/sites/[slug]/[locale]/index.tsx +++ b/pages/sites/[slug]/[locale]/index.tsx @@ -28,7 +28,7 @@ import { } from 'next'; import { defaultTenant } from '../../../../tenant.config'; import { AbstractIntlMessages } from 'next-intl'; -import deepmerge from 'deepmerge'; +import getMessagesForPage from '../../../../src/utils/language/getMessagesForPage'; interface Props { currencyCode: string; @@ -204,51 +204,10 @@ export const getStaticProps: GetStaticProps = async ( const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; - const userMessages = { - ...( - await import( - `../../../../public/static/locales/${context.params?.locale}/common.json` - ) - ).default, - ...( - await import( - `../../../../public/static/locales/${context.params?.locale}/maps.json` - ) - ).default, - ...( - await import( - `../../../../public/static/locales/${context.params?.locale}/donate.json` - ) - ).default, - ...( - await import( - `../../../../public/static/locales/${context.params?.locale}/country.json` - ) - ).default, - ...( - await import( - `../../../../public/static/locales/${context.params?.locale}/manageProjects.json` - ) - ).default, - }; - - const defaultMessages = { - ...(await import('../../../../public/static/locales/en/common.json')) - .default, - ...(await import('../../../../public/static/locales/en/maps.json')).default, - ...(await import('../../../../public/static/locales/en/donate.json')) - .default, - ...(await import('../../../../public/static/locales/en/country.json')) - .default, - ...( - await import('../../../../public/static/locales/en/manageProjects.json') - ).default, - }; - - const messages: AbstractIntlMessages = deepmerge( - defaultMessages, - userMessages - ); + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'maps', 'donate', 'country', 'manageProjects'], + }); return { props: { diff --git a/pages/sites/[slug]/[locale]/login.tsx b/pages/sites/[slug]/[locale]/login.tsx index 7089662ed7..33f6cfdccc 100644 --- a/pages/sites/[slug]/[locale]/login.tsx +++ b/pages/sites/[slug]/[locale]/login.tsx @@ -15,7 +15,7 @@ import { } from 'next'; import { defaultTenant } from '../../../../tenant.config'; import { AbstractIntlMessages } from 'next-intl'; -import deepmerge from 'deepmerge'; +import getMessagesForPage from '../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: PageProps; @@ -112,23 +112,10 @@ export const getStaticProps: GetStaticProps = async ( const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; - const userMessages = { - ...( - await import( - `../../../../public/static/locales/${context.params?.locale}/common.json` - ) - ).default, - }; - - const defaultMessages = { - ...(await import('../../../../public/static/locales/en/common.json')) - .default, - }; - - const messages: AbstractIntlMessages = deepmerge( - defaultMessages, - userMessages - ); + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common'], + }); return { props: { diff --git a/pages/sites/[slug]/[locale]/profile/api-key.tsx b/pages/sites/[slug]/[locale]/profile/api-key.tsx index 5b4b5b8acf..8829944872 100644 --- a/pages/sites/[slug]/[locale]/profile/api-key.tsx +++ b/pages/sites/[slug]/[locale]/profile/api-key.tsx @@ -17,6 +17,7 @@ import { defaultTenant } from '../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -78,37 +79,10 @@ export const getStaticProps: GetStaticProps = async ( const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; - const userMessages = { - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/common.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/me.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/country.json` - ) - ).default, - }; - - const defaultMessages = { - ...(await import('../../../../../public/static/locales/en/common.json')) - .default, - ...(await import('../../../../../public/static/locales/en/me.json')) - .default, - ...(await import('../../../../../public/static/locales/en/country.json')) - .default, - }; - - const messages: AbstractIntlMessages = deepmerge( - defaultMessages, - userMessages - ); + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country'], + }); return { props: { diff --git a/pages/sites/[slug]/[locale]/profile/delete-account.tsx b/pages/sites/[slug]/[locale]/profile/delete-account.tsx index 27ae72de1a..73d9396b89 100644 --- a/pages/sites/[slug]/[locale]/profile/delete-account.tsx +++ b/pages/sites/[slug]/[locale]/profile/delete-account.tsx @@ -17,6 +17,7 @@ import { import { defaultTenant } from '../../../../../tenant.config'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -80,45 +81,10 @@ export const getStaticProps: GetStaticProps = async ( const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; - const userMessages = { - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/common.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/me.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/country.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/editProfile.json` - ) - ).default, - }; - - const defaultMessages = { - ...(await import('../../../../../public/static/locales/en/common.json')) - .default, - ...(await import('../../../../../public/static/locales/en/me.json')) - .default, - ...(await import('../../../../../public/static/locales/en/country.json')) - .default, - ...( - await import('../../../../../public/static/locales/en/editProfile.json') - ).default, - }; - - const messages: AbstractIntlMessages = deepmerge( - defaultMessages, - userMessages - ); + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'editProfile'], + }); return { props: { diff --git a/pages/sites/[slug]/[locale]/profile/donation-link.tsx b/pages/sites/[slug]/[locale]/profile/donation-link.tsx index b8b2172867..440dd79e3a 100644 --- a/pages/sites/[slug]/[locale]/profile/donation-link.tsx +++ b/pages/sites/[slug]/[locale]/profile/donation-link.tsx @@ -3,7 +3,6 @@ import UserLayout from '../../../../../src/features/common/Layout/UserLayout/Use import DonationLink from '../../../../../src/features/user/Widget/DonationLink'; import Head from 'next/head'; import { AbstractIntlMessages, useTranslations } from 'next-intl'; -import deepmerge from 'deepmerge'; import { GetStaticProps, GetStaticPropsContext, @@ -17,6 +16,7 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../tenant.config'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -78,52 +78,10 @@ export const getStaticProps: GetStaticProps = async ( const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; - const userMessages = { - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/common.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/me.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/country.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/donationLink.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/bulkCodes.json` - ) - ).default, - }; - - const defaultMessages = { - ...(await import('../../../../../public/static/locales/en/common.json')) - .default, - ...(await import('../../../../../public/static/locales/en/me.json')) - .default, - ...(await import('../../../../../public/static/locales/en/country.json')) - .default, - ...( - await import('../../../../../public/static/locales/en/donationLink.json') - ).default, - ...(await import('../../../../../public/static/locales/en/bulkCodes.json')) - .default, - }; - - const messages: AbstractIntlMessages = deepmerge( - defaultMessages, - userMessages - ); + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'donationLink', 'bulkCodes'], + }); return { props: { diff --git a/pages/sites/[slug]/[locale]/profile/edit.tsx b/pages/sites/[slug]/[locale]/profile/edit.tsx index 69770ad390..f3605eff64 100644 --- a/pages/sites/[slug]/[locale]/profile/edit.tsx +++ b/pages/sites/[slug]/[locale]/profile/edit.tsx @@ -1,7 +1,6 @@ import Head from 'next/head'; import React, { ReactElement } from 'react'; import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; -import deepmerge from 'deepmerge'; import { AbstractIntlMessages, useTranslations } from 'next-intl'; import EditProfile from '../../../../../src/features/user/Settings/EditProfile'; import { @@ -17,6 +16,7 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../tenant.config'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -78,45 +78,10 @@ export const getStaticProps: GetStaticProps = async ( const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; - const userMessages = { - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/common.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/me.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/country.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/editProfile.json` - ) - ).default, - }; - - const defaultMessages = { - ...(await import('../../../../../public/static/locales/en/common.json')) - .default, - ...(await import('../../../../../public/static/locales/en/me.json')) - .default, - ...(await import('../../../../../public/static/locales/en/country.json')) - .default, - ...( - await import('../../../../../public/static/locales/en/editProfile.json') - ).default, - }; - - const messages: AbstractIntlMessages = deepmerge( - defaultMessages, - userMessages - ); + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country'], + }); return { props: { diff --git a/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx b/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx index 04f635db68..4ec962f8cd 100644 --- a/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx +++ b/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx @@ -1,7 +1,6 @@ import Head from 'next/head'; import { AbstractIntlMessages, useTranslations } from 'next-intl'; import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; -import deepmerge from 'deepmerge'; import ImpersonateUser from '../../../../../src/features/user/Settings/ImpersonateUser'; import { useUserProps } from '../../../../../src/features/common/Layout/UserPropsContext'; import { ReactElement, useEffect } from 'react'; @@ -19,6 +18,7 @@ import { defaultTenant } from '../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -87,37 +87,10 @@ export const getStaticProps: GetStaticProps = async ( const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; - const userMessages = { - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/common.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/me.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/country.json` - ) - ).default, - }; - - const defaultMessages = { - ...(await import('../../../../../public/static/locales/en/common.json')) - .default, - ...(await import('../../../../../public/static/locales/en/me.json')) - .default, - ...(await import('../../../../../public/static/locales/en/country.json')) - .default, - }; - - const messages: AbstractIntlMessages = deepmerge( - defaultMessages, - userMessages - ); + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country'], + }); return { props: { diff --git a/pages/sites/[slug]/[locale]/profile/index.tsx b/pages/sites/[slug]/[locale]/profile/index.tsx index 87469d3013..15114d880a 100644 --- a/pages/sites/[slug]/[locale]/profile/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/index.tsx @@ -21,7 +21,7 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../tenant.config'; import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; import myProfileStyle from '../../../../../src/features/user/Profile/styles/MyProfile.module.scss'; -import deepmerge from 'deepmerge'; +import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: PageProps; @@ -103,51 +103,10 @@ export const getStaticProps: GetStaticProps = async ( const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; - const userMessages = { - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/common.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/me.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/profile.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/country.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/donate.json` - ) - ).default, - }; - - const defaultMessages = { - ...(await import('../../../../../public/static/locales/en/common.json')) - .default, - ...(await import('../../../../../public/static/locales/en/me.json')) - .default, - ...(await import('../../../../../public/static/locales/en/profile.json')) - .default, - ...(await import('../../../../../public/static/locales/en/country.json')) - .default, - ...(await import('../../../../../public/static/locales/en/donate.json')) - .default, - }; - - const messages: AbstractIntlMessages = deepmerge( - defaultMessages, - userMessages - ); + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'profile', 'country', 'donate'], + }); return { props: { diff --git a/pages/sites/[slug]/[locale]/profile/widgets.tsx b/pages/sites/[slug]/[locale]/profile/widgets.tsx index 09856a525f..3bf64ee27b 100644 --- a/pages/sites/[slug]/[locale]/profile/widgets.tsx +++ b/pages/sites/[slug]/[locale]/profile/widgets.tsx @@ -18,7 +18,7 @@ import { defaultTenant } from '../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; -import deepmerge from 'deepmerge'; +import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -99,45 +99,10 @@ export const getStaticProps: GetStaticProps = async ( const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; - const userMessages = { - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/common.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/me.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/country.json` - ) - ).default, - ...( - await import( - `../../../../../public/static/locales/${context.params?.locale}/editProfile.json` - ) - ).default, - }; - - const defaultMessages = { - ...(await import('../../../../../public/static/locales/en/common.json')) - .default, - ...(await import('../../../../../public/static/locales/en/me.json')) - .default, - ...(await import('../../../../../public/static/locales/en/country.json')) - .default, - ...( - await import('../../../../../public/static/locales/en/editProfile.json') - ).default, - }; - - const messages: AbstractIntlMessages = deepmerge( - defaultMessages, - userMessages - ); + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'editProfile'], + }); return { props: { diff --git a/src/utils/language/getMessagesForPage.ts b/src/utils/language/getMessagesForPage.ts new file mode 100644 index 0000000000..6e09937581 --- /dev/null +++ b/src/utils/language/getMessagesForPage.ts @@ -0,0 +1,71 @@ +import deepmerge from 'deepmerge'; +import { AbstractIntlMessages } from 'next-intl'; + +// Update this when a new file is added +type TRANSLATION_FILE_NAMES = + | 'bulkCodes' + | 'common' + | 'country' + | 'donate' + | 'donationLink' + | 'editProfile' + | 'giftfunds' + | 'leaderboard' + | 'managePayouts' + | 'manageProjects' + | 'maps' + | 'me' + | 'planet' + | 'planetcash' + | 'profile' + | 'redeem' + | 'registerTrees' + | 'tenants' + | 'treemapper' + | 'treemapperAnalytics'; + +interface MessageConfig { + /** + * Provide 2 letter (ISO) locale. + * If not provided, default locale will be applied + * */ + locale?: string; + /** + * Array of json filenames containing translations. + * Names should be specified without .json extension. + * Files should be located within public/static/locales/{DEFAULT_LOCALE} + * */ + filenames: TRANSLATION_FILE_NAMES[]; +} + +/** Returns default and locale specific messages for the page */ +const getMessagesForPage = async ({ + locale = 'en', + filenames, +}: MessageConfig): Promise => { + const DEFAULT_LOCALE = 'en'; + + if (!filenames || filenames.length === 0) return {}; + + let userMessages = {}; + let defaultMessages = {}; + + for (const filename of filenames) { + userMessages = { + ...userMessages, + ...(await import( + `../../../public/static/locales/${locale}/${filename}.json` + )), + }; + defaultMessages = { + ...defaultMessages, + ...(await import( + `../../../public/static/locales/${DEFAULT_LOCALE}/${filename}.json` + )), + }; + } + + return deepmerge(defaultMessages, userMessages); +}; + +export default getMessagesForPage; From 285eb1c9fd65ffa3b96297db9e44dd2583e08d1c Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 4 Mar 2024 17:02:20 +0530 Subject: [PATCH 18/70] feat: integrates next-intl with pages (part 1) pages updated - /claim/[type]/[code] - all bulk codes pages - /profile/history - /profile/recurrency - /profile/register-trees also updates translation/other files to resolve translation issues in these pages --- .../[slug]/[locale]/claim/[type]/[code].tsx | 55 +++++---------- .../profile/bulk-codes/[method]/[id].tsx | 46 ++++--------- .../profile/bulk-codes/[method]/index.tsx | 46 ++++--------- .../[locale]/profile/bulk-codes/index.tsx | 48 ++++--------- .../sites/[slug]/[locale]/profile/history.tsx | 48 ++++--------- .../[slug]/[locale]/profile/recurrency.tsx | 44 ++++-------- .../[locale]/profile/register-trees.tsx | 44 ++++-------- public/static/locales/en/bulkCodes.json | 20 +++--- public/static/locales/en/me.json | 1 + .../user/Account/components/AccountRecord.tsx | 3 +- .../components/GenericCodesPartial.tsx | 69 +++++++++---------- .../BulkCodes/forms/CreationMethodForm.tsx | 12 +++- 12 files changed, 156 insertions(+), 280 deletions(-) diff --git a/pages/sites/[slug]/[locale]/claim/[type]/[code].tsx b/pages/sites/[slug]/[locale]/claim/[type]/[code].tsx index 107f5c9034..23e37a9cd9 100644 --- a/pages/sites/[slug]/[locale]/claim/[type]/[code].tsx +++ b/pages/sites/[slug]/[locale]/claim/[type]/[code].tsx @@ -1,7 +1,7 @@ import React, { ReactElement } from 'react'; import { useRouter } from 'next/router'; import { postAuthenticatedRequest } from '../../../../../../src/utils/apiRequests/api'; -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import LandingSection from '../../../../../../src/features/common/Layout/LandingSection'; import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; import { ErrorHandlingContext } from '../../../../../../src/features/common/Layout/ErrorHandlingContext'; @@ -10,7 +10,6 @@ import { SuccessfullyRedeemed, } from '../../../../../../src/features/common/RedeemCode'; import { RedeemedCodeData } from '../../../../../../src/features/common/types/redeem'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { handleError, APIError, SerializedError } from '@planet-sdk/common'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; import { @@ -25,6 +24,7 @@ import { GetStaticPropsResult, } from 'next'; import { defaultTenant } from '../../../../../../tenant.config'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -33,7 +33,7 @@ interface Props { } function ClaimDonation({ pageProps }: Props): ReactElement { - const { t, ready } = useTranslation(['redeem']); + const t = useTranslations('Redeem'); const router = useRouter(); const { setTenantConfig } = useTenant(); const { user, contextLoaded, loginWithRedirect, token, logoutUser } = @@ -62,7 +62,7 @@ function ClaimDonation({ pageProps }: Props): ReactElement { setCode(router.query.code); } } - }, [router, router.query.type, ready]); + }, [router, router.query.type]); const redeemAnotherCode = () => { router.push(`/profile/redeem/${code}?inputCode=${true}`); @@ -96,13 +96,13 @@ function ClaimDonation({ pageProps }: Props): ReactElement { switch (error.message) { case 'already_redeemed': _serializedErrors.push({ - message: t('redeem:alreadyRedeemed'), + message: t('alreadyRedeemed'), }); break; case 'invalid_code': _serializedErrors.push({ - message: t('redeem:invalidCode'), + message: t('invalidCode'), }); break; @@ -143,7 +143,6 @@ function ClaimDonation({ pageProps }: Props): ReactElement { //redeem code using route if (user && contextLoaded) { if ( - ready && router.query.type && router.query.code && !Array.isArray(router.query.code) @@ -151,9 +150,9 @@ function ClaimDonation({ pageProps }: Props): ReactElement { redeemingCode(router.query.code); } } - }, [user, contextLoaded, ready, router.query.type, router.query.code]); + }, [user, contextLoaded, router.query.type, router.query.code]); - return pageProps.tenantConfig && ready && user ? ( + return pageProps.tenantConfig && user ? ( <> {redeemedCodeData ? ( @@ -198,43 +197,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['redeem', 'common'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx index 7cdc1891ac..8e94cc2e8c 100644 --- a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx +++ b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx @@ -10,8 +10,7 @@ import { useBulkCode } from '../../../../../../../src/features/common/Layout/Bul import { ErrorHandlingContext } from '../../../../../../../src/features/common/Layout/ErrorHandlingContext'; import { getRequest } from '../../../../../../../src/utils/apiRequests/api'; import { useRouter } from 'next/router'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { handleError, APIError } from '@planet-sdk/common'; import { constructPathsForTenantSlug, @@ -26,6 +25,7 @@ import { GetStaticPropsResult, } from 'next'; import { defaultTenant } from '../../../../../../../tenant.config'; +import getMessagesForPage from '../../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -38,7 +38,7 @@ export default function BulkCodeIssueCodesPage({ }: Props): ReactElement { const router = useRouter(); const { isReady, query } = useRouter(); - const { t, ready } = useTranslation('me'); + const t = useTranslations('Me'); const { setTenantConfig } = useTenant(); const { redirect, setErrors } = useContext(ErrorHandlingContext); @@ -110,7 +110,7 @@ export default function BulkCodeIssueCodesPage({ return pageProps.tenantConfig ? ( - {ready ? t('bulkCodesTitleStep3') : ''} + {t('bulkCodesTitleStep3')} @@ -139,43 +139,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'bulkCodes'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx index ed92aebded..2195bfe470 100644 --- a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx @@ -7,8 +7,7 @@ import Head from 'next/head'; import { useRouter } from 'next/router'; import { useBulkCode } from '../../../../../../../src/features/common/Layout/BulkCodeContext'; import { BulkCodeMethods } from '../../../../../../../src/utils/constants/bulkCodeConstants'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { GetStaticProps, GetStaticPropsContext, @@ -22,6 +21,7 @@ import { v4 } from 'uuid'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useTenant } from '../../../../../../../src/features/common/Layout/TenantContext'; import { defaultTenant } from '../../../../../../../tenant.config'; +import getMessagesForPage from '../../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -32,7 +32,7 @@ interface Props { export default function BulkCodeSelectProjectPage({ pageProps, }: Props): ReactElement { - const { t, ready } = useTranslation('me'); + const t = useTranslations('Me'); const router = useRouter(); const { isReady, query } = useRouter(); const { bulkMethod, setBulkMethod } = useBulkCode(); @@ -64,7 +64,7 @@ export default function BulkCodeSelectProjectPage({ return pageProps.tenantConfig ? ( - {ready ? t('bulkCodesTitleStep2') : ''} + {t('bulkCodesTitleStep2')} @@ -92,43 +92,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'bulkCodes'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx b/pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx index 9c9586a98b..baba4d512b 100644 --- a/pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx @@ -4,8 +4,7 @@ import BulkCodes, { BulkCodeSteps, } from '../../../../../../src/features/user/BulkCodes'; import Head from 'next/head'; -import { useTranslation } from 'next-i18next'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { GetStaticProps, GetStaticPropsContext, @@ -19,6 +18,7 @@ import { import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -27,7 +27,7 @@ interface Props { } export default function BulkCodePage({ pageProps }: Props): ReactElement { - const { t, ready } = useTranslation(['me']); + const t = useTranslations('Me'); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -37,10 +37,10 @@ export default function BulkCodePage({ pageProps }: Props): ReactElement { } }, [router.isReady]); - return pageProps.tenantConfig && ready ? ( + return pageProps.tenantConfig ? ( - {ready ? t('bulkCodesTitle') : ''} + {t('bulkCodesTitle')} @@ -67,43 +67,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'bulkCodes'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/history.tsx b/pages/sites/[slug]/[locale]/profile/history.tsx index 659200ed74..2748c7b298 100644 --- a/pages/sites/[slug]/[locale]/profile/history.tsx +++ b/pages/sites/[slug]/[locale]/profile/history.tsx @@ -1,5 +1,5 @@ import React, { ReactElement } from 'react'; -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { getAuthenticatedRequest } from '../../../../../src/utils/apiRequests/api'; import TopProgressBar from '../../../../../src/features/common/ContentLoaders/TopProgressBar'; import History from '../../../../../src/features/user/Account/History'; @@ -7,7 +7,6 @@ import { useUserProps } from '../../../../../src/features/common/Layout/UserProp import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; import { ErrorHandlingContext } from '../../../../../src/features/common/Layout/ErrorHandlingContext'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { handleError, APIError } from '@planet-sdk/common'; import { Filters, @@ -27,6 +26,7 @@ import { defaultTenant } from '../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -35,7 +35,7 @@ interface Props { } function AccountHistory({ pageProps }: Props): ReactElement { - const { t } = useTranslation(['me']); + const t = useTranslations('Me'); const { token, contextLoaded, logoutUser } = useUserProps(); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -158,8 +158,8 @@ function AccountHistory({ pageProps }: Props): ReactElement { {t('history')} @@ -193,43 +193,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/recurrency.tsx b/pages/sites/[slug]/[locale]/profile/recurrency.tsx index 3ae3b996ce..f14ba4c98f 100644 --- a/pages/sites/[slug]/[locale]/profile/recurrency.tsx +++ b/pages/sites/[slug]/[locale]/profile/recurrency.tsx @@ -5,8 +5,7 @@ import { useUserProps } from '../../../../../src/features/common/Layout/UserProp import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; import { ErrorHandlingContext } from '../../../../../src/features/common/Layout/ErrorHandlingContext'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { handleError, APIError } from '@planet-sdk/common'; import { Subscription } from '../../../../../src/features/common/types/payments'; import RecurrentPayments from '../../../../../src/features/user/Account/RecurrentPayments'; @@ -23,6 +22,7 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../tenant.config'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -33,7 +33,7 @@ interface Props { function RecurrentDonations({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t } = useTranslation(['me']); + const t = useTranslations('Me'); const router = useRouter(); const { setTenantConfig } = useTenant(); const { token, contextLoaded, logoutUser } = useUserProps(); @@ -137,43 +137,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/register-trees.tsx b/pages/sites/[slug]/[locale]/profile/register-trees.tsx index f4f4509375..44110b7759 100644 --- a/pages/sites/[slug]/[locale]/profile/register-trees.tsx +++ b/pages/sites/[slug]/[locale]/profile/register-trees.tsx @@ -2,8 +2,7 @@ import React, { ReactElement } from 'react'; import dynamic from 'next/dynamic'; import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { GetStaticProps, GetStaticPropsContext, @@ -17,6 +16,7 @@ import { import { defaultTenant } from '../../../../../tenant.config'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -27,7 +27,7 @@ interface Props { export default function Register({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t } = useTranslation('me'); + const t = useTranslations('Me'); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -70,43 +70,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'profile', 'donate'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/public/static/locales/en/bulkCodes.json b/public/static/locales/en/bulkCodes.json index 2cbe3c5150..7bc3470aa3 100644 --- a/public/static/locales/en/bulkCodes.json +++ b/public/static/locales/en/bulkCodes.json @@ -12,20 +12,20 @@ "importMethodText": { "title": "Create Custom Tree Certificates", "subtitle": "Use this method (for a maximum of 1000 recipients in one transaction) if one of the following criteria match your use case:", - "details": [ - "I want to provide the Recipient's name or Email for each code.", - "I want Plant-for-the-Planet to automatically email the recipients once it has been generated (optional).", - "I want to issue codes for different tree counts." - ] + "details": { + "line1": "I want to provide the Recipient's name or Email for each code.", + "line2": "I want Plant-for-the-Planet to automatically email the recipients once it has been generated (optional).", + "line3": "I want to issue codes for different tree counts." + } }, "genericMethodText": { "title": "Create Generic Codes", "subtitle": "Use this method if the following criteria matches your use case:", - "details": [ - "All codes will have the same value.", - "I want to generate a number of code for arbitrary recipients.", - "Names and Emails cannot be associated with the code." - ] + "details": { + "line1": "All codes will have the same value.", + "line2": "I want to generate a number of code for arbitrary recipients.", + "line3": "Names and Emails cannot be associated with the code." + } }, "projectName": "Project Name", "costPerUnit": "Cost per Unit", diff --git a/public/static/locales/en/me.json b/public/static/locales/en/me.json index d0fabb7f7c..bce0eeeb36 100644 --- a/public/static/locales/en/me.json +++ b/public/static/locales/en/me.json @@ -211,6 +211,7 @@ "sepa_debit": "SEPA (Stripe)", "offline": "Offline", "offline-offline": "Offline", + "offline-transfer": "Offline", "profile": "Profile", "projects": "Projects", "settings": "Settings", diff --git a/src/features/user/Account/components/AccountRecord.tsx b/src/features/user/Account/components/AccountRecord.tsx index 5dd3433b4b..8c3c1de958 100644 --- a/src/features/user/Account/components/AccountRecord.tsx +++ b/src/features/user/Account/components/AccountRecord.tsx @@ -191,7 +191,8 @@ export function DetailsComponent({ record }: DetailProps): ReactElement {

)} - {record.details?.unitCost ? ( + {(record.unitType === 'tree' || record.unitType === 'm2') && + record.details?.unitCost ? (

{tMe('unitCost', { diff --git a/src/features/user/BulkCodes/components/GenericCodesPartial.tsx b/src/features/user/BulkCodes/components/GenericCodesPartial.tsx index 8c046d9a5e..0ed3feed2b 100644 --- a/src/features/user/BulkCodes/components/GenericCodesPartial.tsx +++ b/src/features/user/BulkCodes/components/GenericCodesPartial.tsx @@ -18,7 +18,7 @@ const GenericCodesPartial = ({ setCodeQuantity, setUnitsPerCode, }: GenericCodesProps): ReactElement | null => { - const { t, ready } = useTranslations(['common', 'bulkCodes']); + const t = useTranslations('BulkCodes'); const [errors, setErrors] = useState({ unitsPerCode: { status: false, errorType: '' }, codeQuantity: { status: false, errorType: '' }, @@ -52,43 +52,36 @@ const GenericCodesPartial = ({ }); }; - if (ready) { - return ( - - handleChange(e.target.value, setUnitsPerCode)} - onBlur={(e) => - validateRequiredField(e, BulkCodeLimits.MAX_UNITS_PER_CODE) - } - label={t('bulkCodes:unitsPerCode')} - name="unitsPerCode" - error={errors.unitsPerCode.status} - helperText={ - errors.unitsPerCode.status - ? t(`bulkCodes:${errors.unitsPerCode.errorType}`) - : '' - } - > - handleChange(e.target.value, setCodeQuantity)} - onBlur={(e) => - validateRequiredField(e, BulkCodeLimits.MAX_CODE_QUANTITY) - } - label={t('bulkCodes:totalNumberOfCodes')} - name="codeQuantity" - error={errors.codeQuantity.status} - helperText={ - errors.codeQuantity.status - ? t(`bulkCodes:${errors.codeQuantity.errorType}`) - : '' - } - > - - ); - } - return null; + return ( + + handleChange(e.target.value, setUnitsPerCode)} + onBlur={(e) => + validateRequiredField(e, BulkCodeLimits.MAX_UNITS_PER_CODE) + } + label={t('unitsPerCode')} + name="unitsPerCode" + error={errors.unitsPerCode.status} + helperText={ + errors.unitsPerCode.status ? t(errors.unitsPerCode.errorType) : '' + } + > + handleChange(e.target.value, setCodeQuantity)} + onBlur={(e) => + validateRequiredField(e, BulkCodeLimits.MAX_CODE_QUANTITY) + } + label={t('totalNumberOfCodes')} + name="codeQuantity" + error={errors.codeQuantity.status} + helperText={ + errors.codeQuantity.status ? t(errors.codeQuantity.errorType) : '' + } + > + + ); }; export default GenericCodesPartial; diff --git a/src/features/user/BulkCodes/forms/CreationMethodForm.tsx b/src/features/user/BulkCodes/forms/CreationMethodForm.tsx index 95c4f359dc..dcc26d6a88 100644 --- a/src/features/user/BulkCodes/forms/CreationMethodForm.tsx +++ b/src/features/user/BulkCodes/forms/CreationMethodForm.tsx @@ -32,13 +32,21 @@ const CreationMethodForm = (): ReactElement | null => { method: BulkCodeMethods.IMPORT, title: tBulkCodes('importMethodText.title'), subtitle: tBulkCodes('importMethodText.subtitle'), - details: tBulkCodes('importMethodText.details'), + details: [ + tBulkCodes('importMethodText.details.line1'), + tBulkCodes('importMethodText.details.line2'), + tBulkCodes('importMethodText.details.line3'), + ], }, { method: BulkCodeMethods.GENERIC, title: tBulkCodes('genericMethodText.title'), subtitle: tBulkCodes('genericMethodText.subtitle'), - details: tBulkCodes('genericMethodText.details'), + details: [ + tBulkCodes('genericMethodText.details.line1'), + tBulkCodes('genericMethodText.details.line2'), + tBulkCodes('genericMethodText.details.line3'), + ], }, ]; From 1f545fcb46cdbb1a9b33095bbc47fdd3a5e561a4 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 4 Mar 2024 18:48:34 +0530 Subject: [PATCH 19/70] feat: integrates next-intl with pages (part 2) pages updated - giftfund page - all Manage Payouts pages - all PlanetCash pages --- .../[locale]/profile/giftfund/index.tsx | 44 ++++++------------ .../profile/payouts/add-bank-details.tsx | 46 ++++++------------- .../payouts/edit-bank-details/[id].tsx | 46 ++++++------------- .../[slug]/[locale]/profile/payouts/index.tsx | 46 ++++++------------- .../[locale]/profile/payouts/schedule.tsx | 46 ++++++------------- .../[locale]/profile/planetcash/index.tsx | 46 ++++++------------- .../[locale]/profile/planetcash/new.tsx | 46 ++++++------------- .../profile/planetcash/transactions.tsx | 46 ++++++------------- 8 files changed, 111 insertions(+), 255 deletions(-) diff --git a/pages/sites/[slug]/[locale]/profile/giftfund/index.tsx b/pages/sites/[slug]/[locale]/profile/giftfund/index.tsx index abeea37c54..0606bac5e6 100644 --- a/pages/sites/[slug]/[locale]/profile/giftfund/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/giftfund/index.tsx @@ -1,9 +1,8 @@ import React, { ReactElement } from 'react'; import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import GiftFunds from '../../../../../../src/features/user/GiftFunds'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { GetStaticProps, GetStaticPropsContext, @@ -17,6 +16,7 @@ import { defaultTenant } from '../../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -27,7 +27,7 @@ interface Props { export default function Register({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t } = useTranslation('me'); + const t = useTranslations('Me'); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -68,43 +68,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'giftfunds'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/payouts/add-bank-details.tsx b/pages/sites/[slug]/[locale]/profile/payouts/add-bank-details.tsx index c25ddb6327..68fefcc454 100644 --- a/pages/sites/[slug]/[locale]/profile/payouts/add-bank-details.tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/add-bank-details.tsx @@ -4,8 +4,7 @@ import Head from 'next/head'; import ManagePayouts, { ManagePayoutTabs, } from '../../../../../../src/features/user/ManagePayouts'; -import { useTranslation } from 'next-i18next'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; import AccessDeniedLoader from '../../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; import { @@ -21,6 +20,7 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -31,7 +31,7 @@ interface Props { export default function AddBankDetailsPage({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t, ready } = useTranslation('me'); + const t = useTranslations('Me'); const { user } = useUserProps(); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -45,7 +45,7 @@ export default function AddBankDetailsPage({ return tenantConfig ? ( - {ready ? t('managePayouts.titleAddBankDetails') : ''} + {t('managePayouts.titleAddBankDetails')} {user?.type === 'tpo' ? ( @@ -76,43 +76,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'managePayouts'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/payouts/edit-bank-details/[id].tsx b/pages/sites/[slug]/[locale]/profile/payouts/edit-bank-details/[id].tsx index 31f87b0a8f..3b830f866b 100644 --- a/pages/sites/[slug]/[locale]/profile/payouts/edit-bank-details/[id].tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/edit-bank-details/[id].tsx @@ -4,8 +4,7 @@ import Head from 'next/head'; import ManagePayouts, { ManagePayoutTabs, } from '../../../../../../../src/features/user/ManagePayouts'; -import { useTranslation } from 'next-i18next'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { GetStaticProps, GetStaticPropsContext, @@ -20,6 +19,7 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../../../tenant.config'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -30,7 +30,7 @@ interface Props { export default function EditBankDetailsPage({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t, ready } = useTranslation('me'); + const t = useTranslations('Me'); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -43,7 +43,7 @@ export default function EditBankDetailsPage({ return tenantConfig ? ( - {ready ? t('managePayouts.titleEditBankDetails') : ''} + {t('managePayouts.titleEditBankDetails')} @@ -71,43 +71,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'managePayouts'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/payouts/index.tsx b/pages/sites/[slug]/[locale]/profile/payouts/index.tsx index 8579dd0275..cd3b62bf31 100644 --- a/pages/sites/[slug]/[locale]/profile/payouts/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/index.tsx @@ -5,8 +5,7 @@ import Head from 'next/head'; import ManagePayouts, { ManagePayoutTabs, } from '../../../../../../src/features/user/ManagePayouts'; -import { useTranslation } from 'next-i18next'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; import AccessDeniedLoader from '../../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; import { @@ -22,6 +21,7 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -32,7 +32,7 @@ interface Props { export default function OverviewPage({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t, ready } = useTranslation('me'); + const t = useTranslations('Me'); const [progress, setProgress] = useState(0); const { user } = useUserProps(); const router = useRouter(); @@ -53,7 +53,7 @@ export default function OverviewPage({ )} - {ready ? t('managePayouts.titleOverview') : ''} + {t('managePayouts.titleOverview')} {user?.type === 'tpo' ? ( { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'managePayouts'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx b/pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx index 77db0d7e65..b3b32565d1 100644 --- a/pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx @@ -4,8 +4,7 @@ import Head from 'next/head'; import ManagePayouts, { ManagePayoutTabs, } from '../../../../../../src/features/user/ManagePayouts'; -import { useTranslation } from 'next-i18next'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; import AccessDeniedLoader from '../../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; import { @@ -21,6 +20,7 @@ import { defaultTenant } from '../../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -31,7 +31,7 @@ interface Props { export default function PayoutSchedulePage({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t, ready } = useTranslation('me'); + const t = useTranslations('Me'); const { user } = useUserProps(); const router = useRouter(); @@ -46,7 +46,7 @@ export default function PayoutSchedulePage({ return tenantConfig ? ( - {ready ? t('managePayouts.titlePayoutSchedule') : ''} + {t('managePayouts.titlePayoutSchedule')} {user?.type === 'tpo' ? ( @@ -77,43 +77,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'managePayouts'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/planetcash/index.tsx b/pages/sites/[slug]/[locale]/profile/planetcash/index.tsx index d2dc35cfb1..93b6f63f58 100644 --- a/pages/sites/[slug]/[locale]/profile/planetcash/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/planetcash/index.tsx @@ -5,8 +5,7 @@ import Head from 'next/head'; import PlanetCash, { PlanetCashTabs, } from '../../../../../../src/features/user/PlanetCash'; -import { useTranslation } from 'next-i18next'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { GetStaticProps, GetStaticPropsContext, @@ -20,6 +19,7 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -30,7 +30,7 @@ interface Props { export default function PlanetCashPage({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t, ready } = useTranslation('me'); + const t = useTranslations('Me'); const [progress, setProgress] = useState(0); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -57,7 +57,7 @@ export default function PlanetCashPage({ )} - {ready ? t('planetcash.titleAccount') : ''} + {t('planetcash.titleAccount')} @@ -85,43 +85,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'planetcash'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/planetcash/new.tsx b/pages/sites/[slug]/[locale]/profile/planetcash/new.tsx index b128362d1a..bf2e9a9b9f 100644 --- a/pages/sites/[slug]/[locale]/profile/planetcash/new.tsx +++ b/pages/sites/[slug]/[locale]/profile/planetcash/new.tsx @@ -5,8 +5,7 @@ import Head from 'next/head'; import PlanetCash, { PlanetCashTabs, } from '../../../../../../src/features/user/PlanetCash'; -import { useTranslation } from 'next-i18next'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { GetStaticProps, GetStaticPropsContext, @@ -20,6 +19,7 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -30,7 +30,7 @@ interface Props { export default function PlanetCashCreatePage({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t, ready } = useTranslation('me'); + const t = useTranslations('Me'); const [progress, setProgress] = useState(0); const router = useRouter(); @@ -58,7 +58,7 @@ export default function PlanetCashCreatePage({ )} - {ready ? t('planetcash.titleCreateAccount') : ''} + {t('planetcash.titleCreateAccount')} { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'planetcash'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/planetcash/transactions.tsx b/pages/sites/[slug]/[locale]/profile/planetcash/transactions.tsx index 0074f9e3d9..e33badadec 100644 --- a/pages/sites/[slug]/[locale]/profile/planetcash/transactions.tsx +++ b/pages/sites/[slug]/[locale]/profile/planetcash/transactions.tsx @@ -5,8 +5,7 @@ import Head from 'next/head'; import PlanetCash, { PlanetCashTabs, } from '../../../../../../src/features/user/PlanetCash'; -import { useTranslation } from 'next-i18next'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { GetStaticProps, GetStaticPropsContext, @@ -20,6 +19,7 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -30,7 +30,7 @@ interface Props { export default function PlanetCashTransactionsPage({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t, ready } = useTranslation('me'); + const t = useTranslations('Me'); const [progress, setProgress] = useState(0); const router = useRouter(); @@ -58,7 +58,7 @@ export default function PlanetCashTransactionsPage({ )} - {ready ? t('planetcash.titleTransactions') : ''} + {t('planetcash.titleTransactions')} { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'planetcash'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; From 5a8d090bbdbe8b5139710ab086213c2c54b8eccf Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Tue, 5 Mar 2024 15:22:31 +0530 Subject: [PATCH 20/70] feat: integrates next-intl with pages (part 3) pages updated - All pages from Manage Projects, Treemapper - Redeem code page - Public profile page (/t) - complete signup - verify email - home page - leaderboard page (/all) - Direct gift page (/s/id) - Also included missing translation file for index and project details page - updated error message popup to handle missing error message key in translation file --- pages/sites/[slug]/[locale]/[p].tsx | 2 +- pages/sites/[slug]/[locale]/all.tsx | 41 +++++---------- .../sites/[slug]/[locale]/complete-signup.tsx | 41 +++++---------- pages/sites/[slug]/[locale]/home.tsx | 41 +++++---------- pages/sites/[slug]/[locale]/index.tsx | 2 +- .../[slug]/[locale]/profile/projects/[id].tsx | 46 ++++++----------- .../[locale]/profile/projects/index.tsx | 44 +++++----------- .../[locale]/profile/projects/new-project.tsx | 46 ++++++----------- .../[slug]/[locale]/profile/redeem/[code].tsx | 50 ++++++------------- .../profile/treemapper/data-explorer.tsx | 27 +++++----- .../[locale]/profile/treemapper/import.tsx | 46 ++++++----------- .../[locale]/profile/treemapper/index.tsx | 44 +++++----------- .../profile/treemapper/my-species.tsx | 44 +++++----------- pages/sites/[slug]/[locale]/s/[id].tsx | 41 +++++---------- pages/sites/[slug]/[locale]/t/[id].tsx | 49 +++++++----------- pages/sites/[slug]/[locale]/verify-email.tsx | 41 +++++---------- .../common/Layout/ErrorPopup/index.tsx | 15 +++++- 17 files changed, 206 insertions(+), 414 deletions(-) diff --git a/pages/sites/[slug]/[locale]/[p].tsx b/pages/sites/[slug]/[locale]/[p].tsx index b3cd04e4a5..866d26e56b 100644 --- a/pages/sites/[slug]/[locale]/[p].tsx +++ b/pages/sites/[slug]/[locale]/[p].tsx @@ -237,7 +237,7 @@ export const getStaticProps: GetStaticProps = async ( const messages = await getMessagesForPage({ locale: context.params?.locale as string, - filenames: ['common', 'maps', 'donate', 'country', 'manageProjects'], + filenames: ['common', 'maps', 'me', 'donate', 'country', 'manageProjects'], }); return { diff --git a/pages/sites/[slug]/[locale]/all.tsx b/pages/sites/[slug]/[locale]/all.tsx index 58cf00e4ea..750a90fbf9 100644 --- a/pages/sites/[slug]/[locale]/all.tsx +++ b/pages/sites/[slug]/[locale]/all.tsx @@ -3,7 +3,6 @@ import LeaderBoard from '../../../../src/tenants/planet/LeaderBoard'; import { getRequest } from '../../../../src/utils/apiRequests/api'; import GetLeaderboardMeta from '../../../../src/utils/getMetaTags/GetLeaderboardMeta'; import { ErrorHandlingContext } from '../../../../src/features/common/Layout/ErrorHandlingContext'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { handleError, APIError } from '@planet-sdk/common'; import { LeaderBoardList, @@ -22,6 +21,8 @@ import { GetStaticPropsResult, } from 'next'; import { defaultTenant } from '../../../../tenant.config'; +import { AbstractIntlMessages } from 'next-intl'; +import getMessagesForPage from '../../../../src/utils/language/getMessagesForPage'; interface Props { initialized: Boolean; @@ -130,43 +131,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'leaderboard', 'planet'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/complete-signup.tsx b/pages/sites/[slug]/[locale]/complete-signup.tsx index e60ac693e1..2033bd9221 100644 --- a/pages/sites/[slug]/[locale]/complete-signup.tsx +++ b/pages/sites/[slug]/[locale]/complete-signup.tsx @@ -1,7 +1,6 @@ import React from 'react'; import CompleteSignup from '../../../../src/features/user/CompleteSignup'; import Head from 'next/head'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { constructPathsForTenantSlug, getTenantConfig, @@ -15,6 +14,8 @@ import { GetStaticPropsResult, } from 'next'; import { defaultTenant } from '../../../../tenant.config'; +import { AbstractIntlMessages } from 'next-intl'; +import getMessagesForPage from '../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -62,43 +63,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'editProfile'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/home.tsx b/pages/sites/[slug]/[locale]/home.tsx index 3c03455bfd..be5c1d057b 100644 --- a/pages/sites/[slug]/[locale]/home.tsx +++ b/pages/sites/[slug]/[locale]/home.tsx @@ -6,7 +6,6 @@ import BasicHome from '../../../../src/tenants/common/Home'; import GetHomeMeta from '../../../../src/utils/getMetaTags/GetHomeMeta'; import { getRequest } from '../../../../src/utils/apiRequests/api'; import { ErrorHandlingContext } from '../../../../src/features/common/Layout/ErrorHandlingContext'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { handleError, APIError } from '@planet-sdk/common'; import { LeaderBoardList, @@ -24,6 +23,8 @@ import { GetStaticPropsResult, } from 'next'; import { defaultTenant } from '../../../../tenant.config'; +import { AbstractIntlMessages } from 'next-intl'; +import getMessagesForPage from '../../../../src/utils/language/getMessagesForPage'; interface Props { initialized: Boolean; @@ -145,43 +146,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'leaderboard', 'planet', 'tenants'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/index.tsx b/pages/sites/[slug]/[locale]/index.tsx index 77c282120b..7dbc2123ee 100644 --- a/pages/sites/[slug]/[locale]/index.tsx +++ b/pages/sites/[slug]/[locale]/index.tsx @@ -206,7 +206,7 @@ export const getStaticProps: GetStaticProps = async ( const messages = await getMessagesForPage({ locale: context.params?.locale as string, - filenames: ['common', 'maps', 'donate', 'country', 'manageProjects'], + filenames: ['common', 'maps', 'me', 'donate', 'country', 'manageProjects'], }); return { diff --git a/pages/sites/[slug]/[locale]/profile/projects/[id].tsx b/pages/sites/[slug]/[locale]/profile/projects/[id].tsx index e71e2e37bf..09a227387b 100644 --- a/pages/sites/[slug]/[locale]/profile/projects/[id].tsx +++ b/pages/sites/[slug]/[locale]/profile/projects/[id].tsx @@ -8,9 +8,8 @@ import Footer from '../../../../../../src/features/common/Layout/Footer'; import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { ErrorHandlingContext } from '../../../../../../src/features/common/Layout/ErrorHandlingContext'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { GetStaticProps, GetStaticPropsContext, @@ -29,6 +28,7 @@ import { v4 } from 'uuid'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../../tenant.config'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -39,7 +39,7 @@ interface Props { function ManageSingleProject({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t } = useTranslation(['manageProjects', 'common']); + const t = useTranslations('Common'); const [projectGUID, setProjectGUID] = React.useState(null); const [ready, setReady] = React.useState(false); const router = useRouter(); @@ -107,7 +107,7 @@ function ManageSingleProject({ ready && token && !accessDenied && projectGUID && project ? ( - {`${t('common:edit')} - ${project?.name}`} + {`${t('edit')} - ${project?.name}`} @@ -145,43 +145,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'manageProjects'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/projects/index.tsx b/pages/sites/[slug]/[locale]/profile/projects/index.tsx index a1e0b3f58a..e733666d1c 100644 --- a/pages/sites/[slug]/[locale]/profile/projects/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/projects/index.tsx @@ -2,8 +2,7 @@ import React, { ReactElement } from 'react'; import ProjectsContainer from '../../../../../../src/features/user/ManageProjects/ProjectsContainer'; import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Head from 'next/head'; -import { useTranslation } from 'next-i18next'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; import AccessDeniedLoader from '../../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; import { @@ -19,6 +18,7 @@ import { defaultTenant } from '../../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -29,7 +29,7 @@ interface Props { export default function Register({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t } = useTranslation('me'); + const t = useTranslations('Me'); const { user } = useUserProps(); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -70,43 +70,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'manageProjects', 'donate'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/projects/new-project.tsx b/pages/sites/[slug]/[locale]/profile/projects/new-project.tsx index 9793906742..fc54785325 100644 --- a/pages/sites/[slug]/[locale]/profile/projects/new-project.tsx +++ b/pages/sites/[slug]/[locale]/profile/projects/new-project.tsx @@ -1,11 +1,10 @@ -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import React, { ReactElement } from 'react'; import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import ManageProjects from '../../../../../../src/features/user/ManageProjects'; import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; import AccessDeniedLoader from '../../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; import Footer from '../../../../../../src/features/common/Layout/Footer'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import Head from 'next/head'; import { GetStaticProps, @@ -20,6 +19,7 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -30,7 +30,7 @@ interface Props { export default function AddProjectType({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t } = useTranslation(['donate', 'manageProjects']); + const t = useTranslations('ManageProjects'); const [accessDenied, setAccessDenied] = React.useState(false); const [setupAccess, setSetupAccess] = React.useState(false); const { user, contextLoaded, token, loginWithRedirect } = useUserProps(); @@ -84,7 +84,7 @@ export default function AddProjectType({ return tenantConfig ? ( - {t('manageProjects:addNewProject')} + {t('addNewProject')} {user?.type === 'tpo' && token !== null ? ( @@ -116,43 +116,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'manageProjects'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx b/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx index 25dc9c62e9..b6897c4012 100644 --- a/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx +++ b/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx @@ -1,7 +1,7 @@ import { useRouter } from 'next/router'; import { useState, useEffect, useContext, FC } from 'react'; import LandingSection from '../../../../../../src/features/common/Layout/LandingSection'; -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; import { ErrorHandlingContext } from '../../../../../../src/features/common/Layout/ErrorHandlingContext'; import { postAuthenticatedRequest } from '../../../../../../src/utils/apiRequests/api'; @@ -11,7 +11,6 @@ import { SuccessfullyRedeemed, EnterRedeemCode, } from '../../../../../../src/features/common/RedeemCode'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { GetStaticProps, GetStaticPropsContext, @@ -26,6 +25,7 @@ import { import { v4 } from 'uuid'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../../tenant.config'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -34,7 +34,7 @@ interface Props { } const ReedemCode = ({ pageProps: { tenantConfig } }: Props) => { - const { t, ready } = useTranslation(['redeem']); + const t = useTranslations('Redeem'); const { user, contextLoaded, token, logoutUser } = useUserProps(); const { setErrors, errors } = useContext(ErrorHandlingContext); const { setTenantConfig } = useTenant(); @@ -94,13 +94,13 @@ const ReedemCode = ({ pageProps: { tenantConfig } }: Props) => { switch (error.message) { case 'already_redeemed': _serializedErrors.push({ - message: t('redeem:alreadyRedeemed'), + message: t('alreadyRedeemed'), }); break; case 'invalid_code': _serializedErrors.push({ - message: t('redeem:invalidCode'), + message: t('invalidCode'), }); break; @@ -150,7 +150,7 @@ const ReedemCode = ({ pageProps: { tenantConfig } }: Props) => { } }; - return tenantConfig && ready && user ? ( + return tenantConfig && user ? ( !errors && !redeemedCodeData ? ( // to input redeem code @@ -209,43 +209,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'redeem'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx index 10299a3054..4260679590 100644 --- a/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx @@ -2,8 +2,7 @@ import Head from 'next/head'; import React, { ReactElement, useEffect } from 'react'; import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import Analytics from '../../../../../../src/features/user/TreeMapper/Analytics'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { useRouter } from 'next/router'; import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; import { @@ -18,6 +17,7 @@ import { import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../../tenant.config'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -28,7 +28,7 @@ interface Props { function TreeMapperAnalytics({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t, ready } = useTranslation('treemapperAnalytics'); + const t = useTranslations('TreemapperAnalytics'); const { user } = useUserProps(); const { push, isReady } = useRouter(); @@ -52,7 +52,7 @@ function TreeMapperAnalytics({ <> - {ready ? t('treemapperAnalytics:title') : ''} + {t('title')} @@ -82,24 +82,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'treemapperAnalytics'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - ['common', 'me', 'country', 'treemapperAnalytics'], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/treemapper/import.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/import.tsx index d80db7dc0f..596906eaac 100644 --- a/pages/sites/[slug]/[locale]/profile/treemapper/import.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/import.tsx @@ -1,9 +1,8 @@ import Head from 'next/head'; import React, { ReactElement } from 'react'; import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import ImportData from '../../../../../../src/features/user/TreeMapper/Import'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; import AccessDeniedLoader from '../../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; import { @@ -19,6 +18,7 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -29,7 +29,7 @@ interface Props { export default function Import({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t } = useTranslation('treemapper'); + const t = useTranslations('Treemapper'); const { user } = useUserProps(); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -43,7 +43,7 @@ export default function Import({ return tenantConfig ? ( - {t('treemapper:importData')} + {t('importData')} {user?.type === 'tpo' ? : } @@ -70,43 +70,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'treemapper', 'maps', 'bulkCodes'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/treemapper/index.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/index.tsx index 7c25073d77..9c8a6d6bc7 100644 --- a/pages/sites/[slug]/[locale]/profile/treemapper/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/index.tsx @@ -2,8 +2,7 @@ import Head from 'next/head'; import React, { ReactElement } from 'react'; import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import TreeMapper from '../../../../../../src/features/user/TreeMapper'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { GetStaticProps, GetStaticPropsContext, @@ -17,6 +16,7 @@ import { defaultTenant } from '../../../../../../tenant.config'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -29,7 +29,7 @@ function TreeMapperPage({ pageProps: { tenantConfig } }: Props): ReactElement { // if (typeof window !== 'undefined') { // router.push('/'); // } - const { t } = useTranslation('me'); + const t = useTranslations('Me'); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -71,43 +71,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'treemapper', 'maps'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx index f13315665d..703b9e1675 100644 --- a/pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx @@ -2,8 +2,7 @@ import Head from 'next/head'; import React, { ReactElement } from 'react'; import UserLayout from '../../../../../../src/features/common/Layout/UserLayout/UserLayout'; import MySpecies from '../../../../../../src/features/user/TreeMapper/MySpecies'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; -import { useTranslation } from 'next-i18next'; +import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; import AccessDeniedLoader from '../../../../../../src/features/common/ContentLoaders/Projects/AccessDeniedLoader'; import { @@ -19,6 +18,7 @@ import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../../tenant.config'; import { useRouter } from 'next/router'; import { useTenant } from '../../../../../../src/features/common/Layout/TenantContext'; +import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -29,7 +29,7 @@ interface Props { export default function MySpeciesPage({ pageProps: { tenantConfig }, }: Props): ReactElement { - const { t } = useTranslation('me'); + const t = useTranslations('Me'); const { user } = useUserProps(); const router = useRouter(); const { setTenantConfig } = useTenant(); @@ -70,43 +70,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'treemapper'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/s/[id].tsx b/pages/sites/[slug]/[locale]/s/[id].tsx index 699a7c5402..5d496298ff 100644 --- a/pages/sites/[slug]/[locale]/s/[id].tsx +++ b/pages/sites/[slug]/[locale]/s/[id].tsx @@ -2,7 +2,6 @@ import React, { ReactElement } from 'react'; import { useRouter } from 'next/router'; import { getRequest } from '../../../../../src/utils/apiRequests/api'; import { ErrorHandlingContext } from '../../../../../src/features/common/Layout/ErrorHandlingContext'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { GetStaticProps, GetStaticPropsContext, @@ -17,6 +16,8 @@ import { v4 } from 'uuid'; import { Tenant } from '@planet-sdk/common/build/types/tenant'; import { defaultTenant } from '../../../../../tenant.config'; import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; +import { AbstractIntlMessages } from 'next-intl'; +import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -91,43 +92,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/t/[id].tsx b/pages/sites/[slug]/[locale]/t/[id].tsx index 4e741b48aa..6d59a36cdb 100644 --- a/pages/sites/[slug]/[locale]/t/[id].tsx +++ b/pages/sites/[slug]/[locale]/t/[id].tsx @@ -8,7 +8,6 @@ import Footer from '../../../../../src/features/common/Layout/Footer'; import Profile from '../../../../../src/features/user/Profile/components/ProfileBox'; import ProjectsContainer from '../../../../../src/features/user/Profile/components/MyContributions/microComponents/ProjectsContainer'; import { ErrorHandlingContext } from '../../../../../src/features/common/Layout/ErrorHandlingContext'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { GetStaticProps, GetStaticPropsContext, @@ -27,6 +26,8 @@ import { v4 } from 'uuid'; import { defaultTenant } from '../../../../../tenant.config'; import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; import myProfileStyle from '../../../../../src/features/user/Profile/styles/MyProfile.module.scss'; +import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; +import { AbstractIntlMessages } from 'next-intl'; interface Props { pageProps: { tenantConfig: Tenant; @@ -121,44 +122,32 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: [ + 'common', + 'me', + 'country', + 'manageProjects', + 'donate', + 'profile', + ], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - 'profile', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/pages/sites/[slug]/[locale]/verify-email.tsx b/pages/sites/[slug]/[locale]/verify-email.tsx index 194827b797..27e2cc56b9 100644 --- a/pages/sites/[slug]/[locale]/verify-email.tsx +++ b/pages/sites/[slug]/[locale]/verify-email.tsx @@ -2,7 +2,6 @@ import React, { ReactElement } from 'react'; import Footer from '../../../../src/features/common/Layout/Footer'; import LandingSection from '../../../../src/features/common/Layout/LandingSection'; import VerifyEmailComponent from '../../../../src/features/common/VerifyEmail/VerifyEmail'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { constructPathsForTenantSlug, getTenantConfig, @@ -16,6 +15,8 @@ import { GetStaticPropsResult, } from 'next'; import { defaultTenant } from '../../../../tenant.config'; +import { AbstractIntlMessages } from 'next-intl'; +import getMessagesForPage from '../../../../src/utils/language/getMessagesForPage'; interface Props { pageProps: { @@ -63,43 +64,25 @@ export const getStaticPaths = async () => { }; }; -interface StaticProps { +interface PageProps { + messages: AbstractIntlMessages; tenantConfig: Tenant; } -export const getStaticProps: GetStaticProps = async ( +export const getStaticProps: GetStaticProps = async ( context: GetStaticPropsContext -): Promise> => { +): Promise> => { const tenantConfig = (await getTenantConfig(context.params?.slug as string)) ?? defaultTenant; + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country', 'profile'], + }); + return { props: { - ...(await serverSideTranslations( - context.locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, tenantConfig, }, }; diff --git a/src/features/common/Layout/ErrorPopup/index.tsx b/src/features/common/Layout/ErrorPopup/index.tsx index dc4f488e40..b338563c77 100644 --- a/src/features/common/Layout/ErrorPopup/index.tsx +++ b/src/features/common/Layout/ErrorPopup/index.tsx @@ -31,6 +31,17 @@ export default function ErrorPopup(): ReactElement { } }; + const processErrorMessage = (errorMessage: string) => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + const translatedError = t(errorMessage); + if (translatedError.startsWith('Common.')) { + return errorMessage; + } else { + return translatedError; + } + }; + return ( <> {errors && @@ -45,7 +56,9 @@ export default function ErrorPopup(): ReactElement { > -

{t(err.message)}
+
+ {processErrorMessage(err.message)} +
); })} From 7358a596c995ae81ba01030e4d84e657d5f6b928 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Tue, 5 Mar 2024 15:23:27 +0530 Subject: [PATCH 21/70] refactor: updates getMessagesForPage to import JSON files correctly --- src/utils/language/getMessagesForPage.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/utils/language/getMessagesForPage.ts b/src/utils/language/getMessagesForPage.ts index 6e09937581..7d6796bd30 100644 --- a/src/utils/language/getMessagesForPage.ts +++ b/src/utils/language/getMessagesForPage.ts @@ -53,18 +53,21 @@ const getMessagesForPage = async ({ for (const filename of filenames) { userMessages = { ...userMessages, - ...(await import( - `../../../public/static/locales/${locale}/${filename}.json` - )), + ...( + await import( + `../../../public/static/locales/${locale}/${filename}.json` + ) + ).default, }; defaultMessages = { ...defaultMessages, - ...(await import( - `../../../public/static/locales/${DEFAULT_LOCALE}/${filename}.json` - )), + ...( + await import( + `../../../public/static/locales/${DEFAULT_LOCALE}/${filename}.json` + ) + ).default, }; } - return deepmerge(defaultMessages, userMessages); }; From 5565f1fd01edb9efdbe574731a63489b94774c29 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Tue, 5 Mar 2024 15:39:52 +0530 Subject: [PATCH 22/70] fix: remove unused deepmerge imports --- pages/sites/[slug]/[locale]/profile/api-key.tsx | 1 - pages/sites/[slug]/[locale]/profile/delete-account.tsx | 1 - 2 files changed, 2 deletions(-) diff --git a/pages/sites/[slug]/[locale]/profile/api-key.tsx b/pages/sites/[slug]/[locale]/profile/api-key.tsx index 8829944872..a4ea315ed9 100644 --- a/pages/sites/[slug]/[locale]/profile/api-key.tsx +++ b/pages/sites/[slug]/[locale]/profile/api-key.tsx @@ -1,7 +1,6 @@ import Head from 'next/head'; import React, { ReactElement } from 'react'; import { AbstractIntlMessages, useTranslations } from 'next-intl'; -import deepmerge from 'deepmerge'; import ApiKey from '../../../../../src/features/user/Settings/ApiKey'; import { GetStaticProps, diff --git a/pages/sites/[slug]/[locale]/profile/delete-account.tsx b/pages/sites/[slug]/[locale]/profile/delete-account.tsx index 73d9396b89..7d03578e0b 100644 --- a/pages/sites/[slug]/[locale]/profile/delete-account.tsx +++ b/pages/sites/[slug]/[locale]/profile/delete-account.tsx @@ -2,7 +2,6 @@ import Head from 'next/head'; import React, { ReactElement } from 'react'; import UserLayout from '../../../../../src/features/common/Layout/UserLayout/UserLayout'; import { AbstractIntlMessages, useTranslations } from 'next-intl'; -import deepmerge from 'deepmerge'; import DeleteProfile from '../../../../../src/features/user/Settings/DeleteProfile'; import { GetStaticProps, From 47b70489a3e88ccfceef63c09ee52dc2105c1063 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Tue, 5 Mar 2024 15:47:48 +0530 Subject: [PATCH 23/70] refactor: refactor Props interface for pages to include PageProps --- pages/sites/[slug]/[locale]/all.tsx | 4 +--- pages/sites/[slug]/[locale]/claim/[type]/[code].tsx | 4 +--- pages/sites/[slug]/[locale]/complete-signup.tsx | 4 +--- pages/sites/[slug]/[locale]/home.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/api-key.tsx | 4 +--- .../[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx | 4 +--- .../[slug]/[locale]/profile/bulk-codes/[method]/index.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/delete-account.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/donation-link.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/edit.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/giftfund/index.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/history.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/impersonate-user.tsx | 4 +--- .../[slug]/[locale]/profile/payouts/add-bank-details.tsx | 4 +--- .../[locale]/profile/payouts/edit-bank-details/[id].tsx | 4 +--- pages/sites/[slug]/[locale]/profile/payouts/index.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/planetcash/index.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/planetcash/new.tsx | 4 +--- .../sites/[slug]/[locale]/profile/planetcash/transactions.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/projects/[id].tsx | 4 +--- pages/sites/[slug]/[locale]/profile/projects/index.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/projects/new-project.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/recurrency.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/redeem/[code].tsx | 4 +--- pages/sites/[slug]/[locale]/profile/register-trees.tsx | 4 +--- .../[slug]/[locale]/profile/treemapper/data-explorer.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/treemapper/import.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/treemapper/index.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx | 4 +--- pages/sites/[slug]/[locale]/profile/widgets.tsx | 4 +--- pages/sites/[slug]/[locale]/s/[id].tsx | 4 +--- pages/sites/[slug]/[locale]/t/[id].tsx | 4 +--- pages/sites/[slug]/[locale]/verify-email.tsx | 4 +--- 35 files changed, 35 insertions(+), 105 deletions(-) diff --git a/pages/sites/[slug]/[locale]/all.tsx b/pages/sites/[slug]/[locale]/all.tsx index 750a90fbf9..5ffc4b998b 100644 --- a/pages/sites/[slug]/[locale]/all.tsx +++ b/pages/sites/[slug]/[locale]/all.tsx @@ -26,9 +26,7 @@ import getMessagesForPage from '../../../../src/utils/language/getMessagesForPag interface Props { initialized: Boolean; - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function Home({ initialized, pageProps }: Props) { diff --git a/pages/sites/[slug]/[locale]/claim/[type]/[code].tsx b/pages/sites/[slug]/[locale]/claim/[type]/[code].tsx index 23e37a9cd9..f5c6f7762a 100644 --- a/pages/sites/[slug]/[locale]/claim/[type]/[code].tsx +++ b/pages/sites/[slug]/[locale]/claim/[type]/[code].tsx @@ -27,9 +27,7 @@ import { defaultTenant } from '../../../../../../tenant.config'; import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } function ClaimDonation({ pageProps }: Props): ReactElement { diff --git a/pages/sites/[slug]/[locale]/complete-signup.tsx b/pages/sites/[slug]/[locale]/complete-signup.tsx index 2033bd9221..b7a67a0895 100644 --- a/pages/sites/[slug]/[locale]/complete-signup.tsx +++ b/pages/sites/[slug]/[locale]/complete-signup.tsx @@ -18,9 +18,7 @@ import { AbstractIntlMessages } from 'next-intl'; import getMessagesForPage from '../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function UserProfile({ pageProps }: Props) { diff --git a/pages/sites/[slug]/[locale]/home.tsx b/pages/sites/[slug]/[locale]/home.tsx index be5c1d057b..c15d10c29d 100644 --- a/pages/sites/[slug]/[locale]/home.tsx +++ b/pages/sites/[slug]/[locale]/home.tsx @@ -28,9 +28,7 @@ import getMessagesForPage from '../../../../src/utils/language/getMessagesForPag interface Props { initialized: Boolean; - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function Home({ initialized, pageProps }: Props) { diff --git a/pages/sites/[slug]/[locale]/profile/api-key.tsx b/pages/sites/[slug]/[locale]/profile/api-key.tsx index a4ea315ed9..7d7b60e8d1 100644 --- a/pages/sites/[slug]/[locale]/profile/api-key.tsx +++ b/pages/sites/[slug]/[locale]/profile/api-key.tsx @@ -19,9 +19,7 @@ import { useTenant } from '../../../../../src/features/common/Layout/TenantConte import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } function EditProfilePage({ pageProps: { tenantConfig } }: Props): ReactElement { diff --git a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx index 8e94cc2e8c..c8aa27f057 100644 --- a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx +++ b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx @@ -28,9 +28,7 @@ import { defaultTenant } from '../../../../../../../tenant.config'; import getMessagesForPage from '../../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function BulkCodeIssueCodesPage({ diff --git a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx index 2195bfe470..c4e58f3e4d 100644 --- a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx @@ -24,9 +24,7 @@ import { defaultTenant } from '../../../../../../../tenant.config'; import getMessagesForPage from '../../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function BulkCodeSelectProjectPage({ diff --git a/pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx b/pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx index baba4d512b..4ff4467fba 100644 --- a/pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/bulk-codes/index.tsx @@ -21,9 +21,7 @@ import { useTenant } from '../../../../../../src/features/common/Layout/TenantCo import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function BulkCodePage({ pageProps }: Props): ReactElement { diff --git a/pages/sites/[slug]/[locale]/profile/delete-account.tsx b/pages/sites/[slug]/[locale]/profile/delete-account.tsx index 7d03578e0b..81592bd5a9 100644 --- a/pages/sites/[slug]/[locale]/profile/delete-account.tsx +++ b/pages/sites/[slug]/[locale]/profile/delete-account.tsx @@ -19,9 +19,7 @@ import { useTenant } from '../../../../../src/features/common/Layout/TenantConte import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } function DeleteProfilePage({ diff --git a/pages/sites/[slug]/[locale]/profile/donation-link.tsx b/pages/sites/[slug]/[locale]/profile/donation-link.tsx index 440dd79e3a..67c129c838 100644 --- a/pages/sites/[slug]/[locale]/profile/donation-link.tsx +++ b/pages/sites/[slug]/[locale]/profile/donation-link.tsx @@ -19,9 +19,7 @@ import { useTenant } from '../../../../../src/features/common/Layout/TenantConte import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function DonationLinkPage({ diff --git a/pages/sites/[slug]/[locale]/profile/edit.tsx b/pages/sites/[slug]/[locale]/profile/edit.tsx index f3605eff64..3002df6813 100644 --- a/pages/sites/[slug]/[locale]/profile/edit.tsx +++ b/pages/sites/[slug]/[locale]/profile/edit.tsx @@ -19,9 +19,7 @@ import { useTenant } from '../../../../../src/features/common/Layout/TenantConte import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } function EditProfilePage({ pageProps: { tenantConfig } }: Props): ReactElement { diff --git a/pages/sites/[slug]/[locale]/profile/giftfund/index.tsx b/pages/sites/[slug]/[locale]/profile/giftfund/index.tsx index 0606bac5e6..44b786a4bc 100644 --- a/pages/sites/[slug]/[locale]/profile/giftfund/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/giftfund/index.tsx @@ -19,9 +19,7 @@ import { useTenant } from '../../../../../../src/features/common/Layout/TenantCo import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function Register({ diff --git a/pages/sites/[slug]/[locale]/profile/history.tsx b/pages/sites/[slug]/[locale]/profile/history.tsx index 2748c7b298..e0761e225a 100644 --- a/pages/sites/[slug]/[locale]/profile/history.tsx +++ b/pages/sites/[slug]/[locale]/profile/history.tsx @@ -29,9 +29,7 @@ import { useTenant } from '../../../../../src/features/common/Layout/TenantConte import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } function AccountHistory({ pageProps }: Props): ReactElement { diff --git a/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx b/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx index 4ec962f8cd..f30ff590c4 100644 --- a/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx +++ b/pages/sites/[slug]/[locale]/profile/impersonate-user.tsx @@ -21,9 +21,7 @@ import { useTenant } from '../../../../../src/features/common/Layout/TenantConte import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } const ImpersonateUserPage = ({ diff --git a/pages/sites/[slug]/[locale]/profile/payouts/add-bank-details.tsx b/pages/sites/[slug]/[locale]/profile/payouts/add-bank-details.tsx index 68fefcc454..ebdb249759 100644 --- a/pages/sites/[slug]/[locale]/profile/payouts/add-bank-details.tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/add-bank-details.tsx @@ -23,9 +23,7 @@ import { useTenant } from '../../../../../../src/features/common/Layout/TenantCo import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function AddBankDetailsPage({ diff --git a/pages/sites/[slug]/[locale]/profile/payouts/edit-bank-details/[id].tsx b/pages/sites/[slug]/[locale]/profile/payouts/edit-bank-details/[id].tsx index 3b830f866b..8e20b5f00c 100644 --- a/pages/sites/[slug]/[locale]/profile/payouts/edit-bank-details/[id].tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/edit-bank-details/[id].tsx @@ -22,9 +22,7 @@ import { useTenant } from '../../../../../../../src/features/common/Layout/Tenan import getMessagesForPage from '../../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function EditBankDetailsPage({ diff --git a/pages/sites/[slug]/[locale]/profile/payouts/index.tsx b/pages/sites/[slug]/[locale]/profile/payouts/index.tsx index cd3b62bf31..a4471eac26 100644 --- a/pages/sites/[slug]/[locale]/profile/payouts/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/index.tsx @@ -24,9 +24,7 @@ import { useTenant } from '../../../../../../src/features/common/Layout/TenantCo import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function OverviewPage({ diff --git a/pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx b/pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx index b3b32565d1..ea2df81f04 100644 --- a/pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx +++ b/pages/sites/[slug]/[locale]/profile/payouts/schedule.tsx @@ -23,9 +23,7 @@ import { useTenant } from '../../../../../../src/features/common/Layout/TenantCo import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function PayoutSchedulePage({ diff --git a/pages/sites/[slug]/[locale]/profile/planetcash/index.tsx b/pages/sites/[slug]/[locale]/profile/planetcash/index.tsx index 93b6f63f58..dc33744dfd 100644 --- a/pages/sites/[slug]/[locale]/profile/planetcash/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/planetcash/index.tsx @@ -22,9 +22,7 @@ import { useTenant } from '../../../../../../src/features/common/Layout/TenantCo import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function PlanetCashPage({ diff --git a/pages/sites/[slug]/[locale]/profile/planetcash/new.tsx b/pages/sites/[slug]/[locale]/profile/planetcash/new.tsx index bf2e9a9b9f..9550ca2812 100644 --- a/pages/sites/[slug]/[locale]/profile/planetcash/new.tsx +++ b/pages/sites/[slug]/[locale]/profile/planetcash/new.tsx @@ -22,9 +22,7 @@ import { useTenant } from '../../../../../../src/features/common/Layout/TenantCo import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function PlanetCashCreatePage({ diff --git a/pages/sites/[slug]/[locale]/profile/planetcash/transactions.tsx b/pages/sites/[slug]/[locale]/profile/planetcash/transactions.tsx index e33badadec..53216e0870 100644 --- a/pages/sites/[slug]/[locale]/profile/planetcash/transactions.tsx +++ b/pages/sites/[slug]/[locale]/profile/planetcash/transactions.tsx @@ -22,9 +22,7 @@ import { useTenant } from '../../../../../../src/features/common/Layout/TenantCo import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function PlanetCashTransactionsPage({ diff --git a/pages/sites/[slug]/[locale]/profile/projects/[id].tsx b/pages/sites/[slug]/[locale]/profile/projects/[id].tsx index 09a227387b..f464cd340f 100644 --- a/pages/sites/[slug]/[locale]/profile/projects/[id].tsx +++ b/pages/sites/[slug]/[locale]/profile/projects/[id].tsx @@ -31,9 +31,7 @@ import { useTenant } from '../../../../../../src/features/common/Layout/TenantCo import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } function ManageSingleProject({ diff --git a/pages/sites/[slug]/[locale]/profile/projects/index.tsx b/pages/sites/[slug]/[locale]/profile/projects/index.tsx index e733666d1c..18021ff2d9 100644 --- a/pages/sites/[slug]/[locale]/profile/projects/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/projects/index.tsx @@ -21,9 +21,7 @@ import { useTenant } from '../../../../../../src/features/common/Layout/TenantCo import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function Register({ diff --git a/pages/sites/[slug]/[locale]/profile/projects/new-project.tsx b/pages/sites/[slug]/[locale]/profile/projects/new-project.tsx index fc54785325..86bd4af623 100644 --- a/pages/sites/[slug]/[locale]/profile/projects/new-project.tsx +++ b/pages/sites/[slug]/[locale]/profile/projects/new-project.tsx @@ -22,9 +22,7 @@ import { useTenant } from '../../../../../../src/features/common/Layout/TenantCo import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function AddProjectType({ diff --git a/pages/sites/[slug]/[locale]/profile/recurrency.tsx b/pages/sites/[slug]/[locale]/profile/recurrency.tsx index f14ba4c98f..417c5e1567 100644 --- a/pages/sites/[slug]/[locale]/profile/recurrency.tsx +++ b/pages/sites/[slug]/[locale]/profile/recurrency.tsx @@ -25,9 +25,7 @@ import { useTenant } from '../../../../../src/features/common/Layout/TenantConte import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } function RecurrentDonations({ diff --git a/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx b/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx index b6897c4012..a90cd49e8f 100644 --- a/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx +++ b/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx @@ -28,9 +28,7 @@ import { defaultTenant } from '../../../../../../tenant.config'; import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } const ReedemCode = ({ pageProps: { tenantConfig } }: Props) => { diff --git a/pages/sites/[slug]/[locale]/profile/register-trees.tsx b/pages/sites/[slug]/[locale]/profile/register-trees.tsx index 44110b7759..987ce912c7 100644 --- a/pages/sites/[slug]/[locale]/profile/register-trees.tsx +++ b/pages/sites/[slug]/[locale]/profile/register-trees.tsx @@ -19,9 +19,7 @@ import { useTenant } from '../../../../../src/features/common/Layout/TenantConte import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function Register({ diff --git a/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx index 4260679590..19c44d4650 100644 --- a/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx @@ -20,9 +20,7 @@ import { useTenant } from '../../../../../../src/features/common/Layout/TenantCo import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } function TreeMapperAnalytics({ diff --git a/pages/sites/[slug]/[locale]/profile/treemapper/import.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/import.tsx index 596906eaac..8461a5fd88 100644 --- a/pages/sites/[slug]/[locale]/profile/treemapper/import.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/import.tsx @@ -21,9 +21,7 @@ import { useTenant } from '../../../../../../src/features/common/Layout/TenantCo import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function Import({ diff --git a/pages/sites/[slug]/[locale]/profile/treemapper/index.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/index.tsx index 9c8a6d6bc7..e76bfb8a24 100644 --- a/pages/sites/[slug]/[locale]/profile/treemapper/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/index.tsx @@ -19,9 +19,7 @@ import { useTenant } from '../../../../../../src/features/common/Layout/TenantCo import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } function TreeMapperPage({ pageProps: { tenantConfig } }: Props): ReactElement { diff --git a/pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx index 703b9e1675..abe853a458 100644 --- a/pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/my-species.tsx @@ -21,9 +21,7 @@ import { useTenant } from '../../../../../../src/features/common/Layout/TenantCo import getMessagesForPage from '../../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function MySpeciesPage({ diff --git a/pages/sites/[slug]/[locale]/profile/widgets.tsx b/pages/sites/[slug]/[locale]/profile/widgets.tsx index 3bf64ee27b..88e88b72b1 100644 --- a/pages/sites/[slug]/[locale]/profile/widgets.tsx +++ b/pages/sites/[slug]/[locale]/profile/widgets.tsx @@ -21,9 +21,7 @@ import { useTenant } from '../../../../../src/features/common/Layout/TenantConte import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } function ProfilePage({ pageProps: { tenantConfig } }: Props): ReactElement { diff --git a/pages/sites/[slug]/[locale]/s/[id].tsx b/pages/sites/[slug]/[locale]/s/[id].tsx index 5d496298ff..d92da349d4 100644 --- a/pages/sites/[slug]/[locale]/s/[id].tsx +++ b/pages/sites/[slug]/[locale]/s/[id].tsx @@ -20,9 +20,7 @@ import { AbstractIntlMessages } from 'next-intl'; import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function DirectGift({ diff --git a/pages/sites/[slug]/[locale]/t/[id].tsx b/pages/sites/[slug]/[locale]/t/[id].tsx index 6d59a36cdb..81291c59ba 100644 --- a/pages/sites/[slug]/[locale]/t/[id].tsx +++ b/pages/sites/[slug]/[locale]/t/[id].tsx @@ -29,9 +29,7 @@ import myProfileStyle from '../../../../../src/features/user/Profile/styles/MyPr import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; import { AbstractIntlMessages } from 'next-intl'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } function PublicProfile({ pageProps: { tenantConfig } }: Props): ReactElement { diff --git a/pages/sites/[slug]/[locale]/verify-email.tsx b/pages/sites/[slug]/[locale]/verify-email.tsx index 27e2cc56b9..96ee87c173 100644 --- a/pages/sites/[slug]/[locale]/verify-email.tsx +++ b/pages/sites/[slug]/[locale]/verify-email.tsx @@ -19,9 +19,7 @@ import { AbstractIntlMessages } from 'next-intl'; import getMessagesForPage from '../../../../src/utils/language/getMessagesForPage'; interface Props { - pageProps: { - tenantConfig: Tenant; - }; + pageProps: PageProps; } export default function VerifyEmail({ pageProps }: Props): ReactElement { From 32fcac3259471c911e0867273ee96c3e838631cc Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Fri, 8 Mar 2024 15:12:48 +0530 Subject: [PATCH 24/70] feat: integrates next-intl on 404 page --- pages/404.tsx | 69 ++++++++++++++++++++++----------------------------- 1 file changed, 29 insertions(+), 40 deletions(-) diff --git a/pages/404.tsx b/pages/404.tsx index 2a27c4adba..f72aada798 100644 --- a/pages/404.tsx +++ b/pages/404.tsx @@ -1,14 +1,20 @@ import Custom404Image from '../public/assets/images/Custom404Image'; import { useRouter } from 'next/router'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import Footer from '../src/features/common/Layout/Footer'; -import { GetStaticPropsContext } from 'next'; +import { + GetStaticProps, + GetStaticPropsContext, + GetStaticPropsResult, +} from 'next'; +import { AbstractIntlMessages } from 'next-intl'; +import getMessagesForPage from '../src/utils/language/getMessagesForPage'; interface Props { - initialized: Boolean; + pageProps: PageProps; } -export default function Custom404(initialized: Props) { +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export default function Custom404({ pageProps }: Props) { const styles = { width: '100vw', height: '100vh', @@ -21,49 +27,32 @@ export default function Custom404(initialized: Props) { return ( <> - {initialized ? ( -
-

{router.query.error}

-
- -
+
+

{router.query.error}

+
+
- ) : ( - <> - )} +
); } -export async function getStaticProps({ locale }: GetStaticPropsContext) { +interface PageProps { + messages: AbstractIntlMessages; +} + +export const getStaticProps: GetStaticProps = async ( + context: GetStaticPropsContext +): Promise> => { + const messages = await getMessagesForPage({ + locale: context.params?.locale as string, + filenames: ['common', 'me', 'country'], + }); + return { props: { - ...(await serverSideTranslations( - locale || 'en', - [ - 'bulkCodes', - 'common', - 'country', - 'donate', - 'donationLink', - 'editProfile', - 'giftfunds', - 'leaderboard', - 'managePayouts', - 'manageProjects', - 'maps', - 'me', - 'planet', - 'planetcash', - 'redeem', - 'registerTrees', - 'tenants', - 'treemapper', - ], - null, - ['en', 'de', 'fr', 'es', 'it', 'pt-BR', 'cs'] - )), + messages, }, }; -} +}; From c3aaa4f3e26afe0f26ecbd907fde5035f913b73d Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Fri, 8 Mar 2024 15:49:48 +0530 Subject: [PATCH 25/70] feat: migrates existing translation files from i18next to next-intl format - `modifyJson.js` contains a script to bulk transform the files - enables translations for all locales by updating `i18nConfig` and `middleware` --- i18n-config.ts | 2 +- middleware.ts | 4 +- modifyJson.js | 33 ++ public/static/locales/cs/bulkCodes.json | 174 +++--- public/static/locales/cs/common.json | 256 ++++----- public/static/locales/cs/country.json | 522 ++++++++--------- public/static/locales/cs/donate.json | 218 +++---- public/static/locales/cs/donationLink.json | 44 +- public/static/locales/cs/editProfile.json | 72 +-- public/static/locales/cs/giftfunds.json | 12 +- public/static/locales/cs/leaderboard.json | 12 +- public/static/locales/cs/managePayouts.json | 146 ++--- public/static/locales/cs/manageProjects.json | 376 +++++++------ public/static/locales/cs/maps.json | 96 ++-- public/static/locales/cs/me.json | 530 +++++++++--------- public/static/locales/cs/planet.json | 26 +- public/static/locales/cs/planetcash.json | 62 +- public/static/locales/cs/redeem.json | 30 +- public/static/locales/cs/registerTrees.json | 20 +- public/static/locales/cs/tenants.json | 98 ++-- public/static/locales/cs/treemapper.json | 130 ++--- .../locales/cs/treemapperAnalytics.json | 112 ++-- public/static/locales/es/bulkCodes.json | 4 +- public/static/locales/es/common.json | 162 +++--- public/static/locales/es/country.json | 520 ++++++++--------- public/static/locales/es/donate.json | 226 ++++---- public/static/locales/es/donationLink.json | 4 +- public/static/locales/es/editProfile.json | 66 +-- public/static/locales/es/giftfunds.json | 4 +- public/static/locales/es/leaderboard.json | 12 +- public/static/locales/es/login.json | 14 +- public/static/locales/es/managePayouts.json | 4 +- public/static/locales/es/manageProjects.json | 236 ++++---- public/static/locales/es/maps.json | 86 +-- public/static/locales/es/me.json | 174 +++--- public/static/locales/es/planet.json | 26 +- public/static/locales/es/planetcash.json | 4 +- public/static/locales/es/redeem.json | 16 +- public/static/locales/es/registerTrees.json | 20 +- public/static/locales/es/tenants.json | 90 +-- public/static/locales/es/treemapper.json | 4 +- .../locales/es/treemapperAnalytics.json | 4 +- public/static/locales/fr/bulkCodes.json | 4 +- public/static/locales/fr/common.json | 162 +++--- public/static/locales/fr/country.json | 520 ++++++++--------- public/static/locales/fr/donate.json | 226 ++++---- public/static/locales/fr/donationLink.json | 4 +- public/static/locales/fr/editProfile.json | 66 +-- public/static/locales/fr/giftfunds.json | 4 +- public/static/locales/fr/leaderboard.json | 12 +- public/static/locales/fr/login.json | 28 +- public/static/locales/fr/managePayouts.json | 4 +- public/static/locales/fr/manageProjects.json | 242 ++++---- public/static/locales/fr/maps.json | 88 +-- public/static/locales/fr/me.json | 286 +++++----- public/static/locales/fr/planet.json | 26 +- public/static/locales/fr/planetcash.json | 4 +- public/static/locales/fr/redeem.json | 20 +- public/static/locales/fr/registerTrees.json | 20 +- public/static/locales/fr/tenants.json | 90 +-- public/static/locales/fr/treemapper.json | 46 +- .../locales/fr/treemapperAnalytics.json | 4 +- public/static/locales/it/bulkCodes.json | 4 +- public/static/locales/it/common.json | 148 ++--- public/static/locales/it/country.json | 520 ++++++++--------- public/static/locales/it/donate.json | 196 +++---- public/static/locales/it/donationLink.json | 4 +- public/static/locales/it/editProfile.json | 66 +-- public/static/locales/it/giftfunds.json | 4 +- public/static/locales/it/leaderboard.json | 12 +- public/static/locales/it/login.json | 4 +- public/static/locales/it/managePayouts.json | 4 +- public/static/locales/it/manageProjects.json | 236 ++++---- public/static/locales/it/maps.json | 86 +-- public/static/locales/it/me.json | 152 ++--- public/static/locales/it/planet.json | 26 +- public/static/locales/it/planetcash.json | 4 +- public/static/locales/it/redeem.json | 16 +- public/static/locales/it/registerTrees.json | 20 +- public/static/locales/it/tenants.json | 90 +-- public/static/locales/it/treemapper.json | 4 +- .../locales/it/treemapperAnalytics.json | 4 +- public/static/locales/pt-BR/bulkCodes.json | 4 +- public/static/locales/pt-BR/common.json | 188 ++++--- public/static/locales/pt-BR/country.json | 520 ++++++++--------- public/static/locales/pt-BR/donate.json | 228 ++++---- public/static/locales/pt-BR/donationLink.json | 4 +- public/static/locales/pt-BR/editProfile.json | 72 +-- public/static/locales/pt-BR/giftfunds.json | 4 +- public/static/locales/pt-BR/leaderboard.json | 12 +- public/static/locales/pt-BR/login.json | 28 +- .../static/locales/pt-BR/managePayouts.json | 4 +- .../static/locales/pt-BR/manageProjects.json | 360 ++++++------ public/static/locales/pt-BR/maps.json | 88 +-- public/static/locales/pt-BR/me.json | 444 +++++++-------- public/static/locales/pt-BR/planet.json | 26 +- public/static/locales/pt-BR/planetcash.json | 4 +- public/static/locales/pt-BR/redeem.json | 16 +- .../static/locales/pt-BR/registerTrees.json | 20 +- public/static/locales/pt-BR/tenants.json | 98 ++-- public/static/locales/pt-BR/treemapper.json | 122 ++-- .../locales/pt-BR/treemapperAnalytics.json | 4 +- tsconfig.json | 3 +- 103 files changed, 5294 insertions(+), 5062 deletions(-) create mode 100644 modifyJson.js diff --git a/i18n-config.ts b/i18n-config.ts index 4868979efa..94485a80e7 100644 --- a/i18n-config.ts +++ b/i18n-config.ts @@ -1,6 +1,6 @@ export const i18nConfig = { defaultLocale: 'en', - locales: ['en', 'de'], + locales: ['en', 'de', 'cs', 'es', 'fr', 'it', 'pt-BR'], } as const; export type Locale = (typeof i18nConfig)['locales'][number]; diff --git a/middleware.ts b/middleware.ts index dafdebb519..04acd8f7a8 100644 --- a/middleware.ts +++ b/middleware.ts @@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server'; import { getTenantSlug } from './src/utils/multiTenancy/helpers'; import { match as matchLocale } from '@formatjs/intl-localematcher'; import Negotiator from 'negotiator'; -import { i18nConfig } from './i18n-config'; +import { i18nConfig, Locale } from './i18n-config'; // import createIntlMiddleware from 'next-intl/middleware'; // TODO - update function to consider cookie @@ -11,7 +11,7 @@ function getLocale(request: NextRequest): string | undefined { const negotiatorHeaders: Record = {}; request.headers.forEach((value, key) => (negotiatorHeaders[key] = value)); - const locales = i18nConfig.locales as unknown as string[]; + const locales = i18nConfig.locales as unknown as Locale[]; // Use negotiator and intl-localematcher to get best locale const languages = new Negotiator({ headers: negotiatorHeaders }).languages( diff --git a/modifyJson.js b/modifyJson.js new file mode 100644 index 0000000000..aa5ea9d2d9 --- /dev/null +++ b/modifyJson.js @@ -0,0 +1,33 @@ +/** + * Modifies JSON files in a specified directory by converting the file names to PascalCase + * and updating the file contents with the modified JSON data. + * @param {string} directoryPath - The path to the directory containing the JSON files. + */ +const fs = require('fs'); +const path = require('path'); + +const directoryPath = path.join(__dirname, 'public/static/locales/pt-BR'); + +fs.readdir(directoryPath, (err, files) => { + if (err) { + return console.log('Unable to scan directory: ' + err); + } + + files.forEach((file) => { + const filePath = path.join(directoryPath, file); + const rawData = fs.readFileSync(filePath); + const jsonData = JSON.parse(rawData); + + const fileNameWithoutExtension = path.basename(file, '.json'); + const pascalCaseFileName = fileNameWithoutExtension + .split(/[-_]/) + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) + .join(''); + + const newData = { + [pascalCaseFileName]: jsonData, + }; + + fs.writeFileSync(filePath, JSON.stringify(newData, null, 2)); + }); +}); diff --git a/public/static/locales/cs/bulkCodes.json b/public/static/locales/cs/bulkCodes.json index a885151e19..24bbc35ea5 100644 --- a/public/static/locales/cs/bulkCodes.json +++ b/public/static/locales/cs/bulkCodes.json @@ -1,88 +1,90 @@ { - "bulkCodesTitle": "Vydání hromadných kódů", - "partnerSignupInfo": "Použití této funkce společnostmi podléhá partnerství se společností Plant-for-the-Planet. Kontaktujte prosím partner@plant-for-the-planet.org pro podrobnosti.", - "bulkCodesDescription1": "Pomocí PlanetCash můžete generovat tisíce kódů v jedné operaci.", - "bulkCodesDescription2": "Tuto funkci můžete použít k vytvoření kódů pro vlastní certifikáty, dárkové karty, dary jménem uživatelů a uplatnitelné kódy, které můžete přiřadit k vašim produktům.", - "tabCreationMethod": "Metoda tvorby", - "tabSelectProject": "Zvolte projekt", - "tabIssueCodes": "Kódy vydání", - "issueCodes": "Kódy vydání", - "issuingCodes": "Vydávání kódů...", - "importMethodText": { - "title": "Importovat soubor", - "subtitle": "Tuto metodu použijte, pokud jedno z následujících kritérií odpovídá vašemu případu použití:", - "details": [ - "Chci uvést jméno příjemce nebo e-mail pro každý kód.", - "Chci, aby Plant-for-the-Planet po vygenerování automaticky odeslal příjemcům e-mail (volitelné).", - "Chci vydat kódy pro různé počty stromů." - ] - }, - "genericMethodText": { - "title": "Vytvoření obecných kódů", - "subtitle": "Tuto metodu použijte, pokud následující kritéria odpovídají vašemu případu použití:", - "details": [ - "Všechny kódy budou mít stejnou hodnotu.", - "Chci vygenerovat řadu kódů pro libovolné příjemce.", - "Jména a e-maily nelze s kódem asociovat." - ] - }, - "projectName": "Název projektu", - "costPerUnit": "Cena za jednotku", - "labelComment": "Komentář [Soukromé]", - "unitOfMeasurement": "Měrná jednotka", - "units": { - "ha": "ha", - "tree": " strom", - "m2": "m²" - }, - "unitsPerCode": "Jednotky za kód*", - "totalNumberOfCodes": "Celkový počet kódů*", - "occasion": "Příležitost", - "total": "Celkem", - "chargeConsentText": "Kliknutím na Kódy vydání, souhlasíte s tím, že výše uvedená částka bude naúčtována na váš účet.", - "invalidEmailWarningText": "Ujistěte se, že příjemce_email je platný e-mail. Používání fiktivních nebo neplatných e-mailů povede k pozastavení účtu v souladu s podmínkami Platformy.", - "projectRequired": "Není vybrán žádný projekt.", - "unitsPerCodeRequired": "Každý kód by měl obsahovat alespoň 1 jednotku.", - "codeQuantityRequired": "Musíte vytvořit alespoň 1 kód.", - "unitsPerCodeInvalidRange": "Jeden kód může obsahovat maximálně 1000 jednotek.", - "codeQuantityInvalidRange": "Maximálně lze vytvořit 5000 kódů.", - "featureAvailability": "Tato funkce je k dispozici pouze pro partnerské projekty.", - "planetCashDisabled": "PlanetCash není aktivován. Chcete-li tuto funkci používat, aktivujte PlanetCash.", - "insufficientPCashBalance": "Nedostatečný balanc.", - "addBalanceGeneric": "Kliknutím sem přidáte finanční prostředky.", - "instructionsUploadCSV": { - "empty": "Přetáhněte /kliknutím vyberte soubor.xslx/.csv pro nahrání.", - "error": "Zkontrolujte prosím problémy a přetáhněte sem soubor .xslx / .csv, který chcete nahrát.", - "processing": "Počkejte prosím, než analyzujeme váš soubor...", - "success": "Pokračujte nebo přetáhněte soubor .xlsx nebo .csv sem, abyste nahradili aktuální soubor." - }, - "statusUploadCSV": { - "error": "Chyba", - "success": "Analýza souborů dokončena" - }, - "errorUploadCSV": { - "fileInvalidType": "Povoleny jsou pouze soubory.csv a .xslx.", - "tooManyFiles": "Nahrajte prosím pouze jeden soubor.", - "fileTooSmall": "Nahraný soubor se zdá být prázdný.", - "fileTooLarge": "Nahraný soubor musí být 5 MB nebo méně.", - "missingColumns": "Nahraný soubor neobsahuje následující sloupce: ", - "noRecipientData": "Nebyla nalezena žádná data příjemce.", - "tooManyRecipients": "V jedné transakci lze zpracovat maximálně 1000 příjemců.", - "unitsNotProvided": "Jednotky chybí/neplatné pro některé příjemce.", - "notifyNotPossible": "U některých příjemců, kteří mají být upozorněni, chybí e-mail a jméno.", - "instructionRowError": "Došlo k chybě v prvním řádku. Zkontrolujte, zda jste pokyny smazali, nebo zda existují další údaje.", - "invalidEmails": "recipient_email obsahuje figuríny/neplatné e-maily v následujících řádcích: {{rowList}}. Odstraňte prosím neplatné e-maily nebo přidejte platné e-maily.", - "generalError": "Něco se pokazilo. Zkuste to prosím o chvíli." - }, - "successUploadCSV": { - "ignoredColumns": "Další sloupce byly ignorovány" - }, - "importInstructions": "Přečtěte si dokumentaci zde, stáhněte si šablonu aplikace Excel zde, a šablonu CSV zde.", - "donationSuccess": "Váš dar byl úspěšný. Přesměrování na zobrazení podrobností o darování brzy...", - "donationError": { - "planet_cash_insufficient_credit": "Dostupný kredit = {{availableBalance}}. Chcete-li provést tento dar, nahrajte zůstatek na svém účtu PlanetCash.", - "default": "Něco se pokazilo. Zkuste to prosím po chvíli.", - "planet_cash_payment_failure": "Transakce selhala. {{reason}}", - "planet_cash_invalid_project": "Nelze darovat vybranému projektu." + "BulkCodes": { + "bulkCodesTitle": "Vydání hromadných kódů", + "partnerSignupInfo": "Použití této funkce společnostmi podléhá partnerství se společností Plant-for-the-Planet. Kontaktujte prosím partner@plant-for-the-planet.org pro podrobnosti.", + "bulkCodesDescription1": "Pomocí PlanetCash můžete generovat tisíce kódů v jedné operaci.", + "bulkCodesDescription2": "Tuto funkci můžete použít k vytvoření kódů pro vlastní certifikáty, dárkové karty, dary jménem uživatelů a uplatnitelné kódy, které můžete přiřadit k vašim produktům.", + "tabCreationMethod": "Metoda tvorby", + "tabSelectProject": "Zvolte projekt", + "tabIssueCodes": "Kódy vydání", + "issueCodes": "Kódy vydání", + "issuingCodes": "Vydávání kódů...", + "importMethodText": { + "title": "Importovat soubor", + "subtitle": "Tuto metodu použijte, pokud jedno z následujících kritérií odpovídá vašemu případu použití:", + "details": [ + "Chci uvést jméno příjemce nebo e-mail pro každý kód.", + "Chci, aby Plant-for-the-Planet po vygenerování automaticky odeslal příjemcům e-mail (volitelné).", + "Chci vydat kódy pro různé počty stromů." + ] + }, + "genericMethodText": { + "title": "Vytvoření obecných kódů", + "subtitle": "Tuto metodu použijte, pokud následující kritéria odpovídají vašemu případu použití:", + "details": [ + "Všechny kódy budou mít stejnou hodnotu.", + "Chci vygenerovat řadu kódů pro libovolné příjemce.", + "Jména a e-maily nelze s kódem asociovat." + ] + }, + "projectName": "Název projektu", + "costPerUnit": "Cena za jednotku", + "labelComment": "Komentář [Soukromé]", + "unitOfMeasurement": "Měrná jednotka", + "units": { + "ha": "ha", + "tree": " strom", + "m2": "m²" + }, + "unitsPerCode": "Jednotky za kód*", + "totalNumberOfCodes": "Celkový počet kódů*", + "occasion": "Příležitost", + "total": "Celkem", + "chargeConsentText": "Kliknutím na Kódy vydání, souhlasíte s tím, že výše uvedená částka bude naúčtována na váš účet.", + "invalidEmailWarningText": "Ujistěte se, že příjemce_email je platný e-mail. Používání fiktivních nebo neplatných e-mailů povede k pozastavení účtu v souladu s podmínkami Platformy.", + "projectRequired": "Není vybrán žádný projekt.", + "unitsPerCodeRequired": "Každý kód by měl obsahovat alespoň 1 jednotku.", + "codeQuantityRequired": "Musíte vytvořit alespoň 1 kód.", + "unitsPerCodeInvalidRange": "Jeden kód může obsahovat maximálně 1000 jednotek.", + "codeQuantityInvalidRange": "Maximálně lze vytvořit 5000 kódů.", + "featureAvailability": "Tato funkce je k dispozici pouze pro partnerské projekty.", + "planetCashDisabled": "PlanetCash není aktivován. Chcete-li tuto funkci používat, aktivujte PlanetCash.", + "insufficientPCashBalance": "Nedostatečný balanc.", + "addBalanceGeneric": "Kliknutím sem přidáte finanční prostředky.", + "instructionsUploadCSV": { + "empty": "Přetáhněte /kliknutím vyberte soubor.xslx/.csv pro nahrání.", + "error": "Zkontrolujte prosím problémy a přetáhněte sem soubor .xslx / .csv, který chcete nahrát.", + "processing": "Počkejte prosím, než analyzujeme váš soubor...", + "success": "Pokračujte nebo přetáhněte soubor .xlsx nebo .csv sem, abyste nahradili aktuální soubor." + }, + "statusUploadCSV": { + "error": "Chyba", + "success": "Analýza souborů dokončena" + }, + "errorUploadCSV": { + "fileInvalidType": "Povoleny jsou pouze soubory.csv a .xslx.", + "tooManyFiles": "Nahrajte prosím pouze jeden soubor.", + "fileTooSmall": "Nahraný soubor se zdá být prázdný.", + "fileTooLarge": "Nahraný soubor musí být 5 MB nebo méně.", + "missingColumns": "Nahraný soubor neobsahuje následující sloupce: ", + "noRecipientData": "Nebyla nalezena žádná data příjemce.", + "tooManyRecipients": "V jedné transakci lze zpracovat maximálně 1000 příjemců.", + "unitsNotProvided": "Jednotky chybí/neplatné pro některé příjemce.", + "notifyNotPossible": "U některých příjemců, kteří mají být upozorněni, chybí e-mail a jméno.", + "instructionRowError": "Došlo k chybě v prvním řádku. Zkontrolujte, zda jste pokyny smazali, nebo zda existují další údaje.", + "invalidEmails": "recipient_email obsahuje figuríny/neplatné e-maily v následujících řádcích: {{rowList}}. Odstraňte prosím neplatné e-maily nebo přidejte platné e-maily.", + "generalError": "Něco se pokazilo. Zkuste to prosím o chvíli." + }, + "successUploadCSV": { + "ignoredColumns": "Další sloupce byly ignorovány" + }, + "importInstructions": "Přečtěte si dokumentaci zde, stáhněte si šablonu aplikace Excel zde, a šablonu CSV zde.", + "donationSuccess": "Váš dar byl úspěšný. Přesměrování na zobrazení podrobností o darování brzy...", + "donationError": { + "planet_cash_insufficient_credit": "Dostupný kredit = {{availableBalance}}. Chcete-li provést tento dar, nahrajte zůstatek na svém účtu PlanetCash.", + "default": "Něco se pokazilo. Zkuste to prosím po chvíli.", + "planet_cash_payment_failure": "Transakce selhala. {{reason}}", + "planet_cash_invalid_project": "Nelze darovat vybranému projektu." + } } -} +} \ No newline at end of file diff --git a/public/static/locales/cs/common.json b/public/static/locales/cs/common.json index 69534e52d1..b58d0c2d33 100644 --- a/public/static/locales/cs/common.json +++ b/public/static/locales/cs/common.json @@ -1,128 +1,130 @@ { - "tree_one": " strom", - "tree_other": "stromů", - "by": "Od {{tpoName}}", - "to_project_by_tpo": "Pro {{projectName}} od {{tpoName}}", - "for": "pro", - "trees": "stromů", - "planted": "Zasazeno", - "privacy": "Soukromí", - "terms": "Podmínky", - "imprint": "Imprint ", - "status": "Stav", - "contact": "Kontakt", - "supportUs": "Podpořte nás", - "leaders": "Stromvedoucí", - "leaderboard": "Stromvedoucí", - "me": "Já", - "signIn": "Přihlásit se", - "home": "Domů", - "donate_gift": "Darovat", - "plant": "Zasadit", - "donate": "Darovat", - "gift": "Dar", - "continue": "Pokračovat", - "selectLanguage": "Výběr jazyka", - "selectCountry": "Výběr země", - "ok": "OK", - "cancel": "Zrušit", - "delete": "Vymazat", - "deleteAccount": "Odstranit účet", - "thankYou": "Děkujeme", - "privacyPolicyNotice": "Používáním webových stránek Plant-for-the-Planet souhlasíte se", - "privacyPolicy": "Soukromí a zásady používání souborů cookie", - "about_pftp": "O Plant-for-the-Planet", - "january": "Leden", - "february": "Únor", - "march": "Březen", - "april": "Duben", - "may": "Květen", - "june": "Červen", - "july": "Červenec", - "august": "Srpen", - "september": "Září", - "october": "Říjen", - "november": "Listopad", - "december": "Prosinec", - "approx": "Přibližně", - "view": "Zobrazit", - "verifyEmailHeader": "Potvrďte prosím svůj e-mail.", - "verifyEmailText": "Abychom mohli váš účet zabezpečit, musíme ověřit váš e-mail. Zkontrolujte, zda vám přišel potvrzovací e-mail a pokračujte v přihlašování.", - "verifyEmailInfo": "Pokud jste e-mail neobdrželi, zkuste se znovu přihlásit a my vám pošleme další e-mail.", - "continueToLogin": "Pokračovat v přihlašení", - "supportsUNEP": "Podporuje UNEP", - "plantedBy": "Zasazeno", - "redeemPopup": "Obdrželi jste stromový dárek ? Přihlaste se, abyste mohli získat své stromky.", - "login": "Přihlášení/registrace", - "shop": "Obchod (DEU)", - "downloads": "Stažené", - "team": "Tým", - "jobs": "Pracovní nabídky ", - "blogs": "Blogy", - "faqs": "Často kladené otázky", - "annualReports": "Výroční zprávy", - "skipIntroVideo": "Přeskočit úvod", - "mapInfo": "Zdroje a autoři map", - "aboutUs": "O nás", - "alternativelyEditProfile": "Případně můžete svůj profil označit jako soukromý v části Upravit profil.", - "deleteAccountConsent": "Kliknutím na tlačítko \"Smazat\" žádám společnost Plant-for-the-Planet o smazání všech dat spojených s mým účtem Plant-for-the-Planet. Údaje o darech mohou být uchovávány po dobu osmi let. Stromy, které jsem zaregistroval, nebudou odstraněny, budou však anonymizovány a nebude možné o ně znovu požádat. ", - "deleteIrreversible": "Rovněž beru na vědomí, že smazání účtu {{email}} je nevratné.", - "goBack": "Zpět", - "deleteAccountMessage": "Chcete-li pokračovat v odstranění, zadejte `{{delete}}`", - "deleteAccountLabel": "Zadejte: {{delete}}", - "edit": "Upravit", - "howDoesThisWork": "Jak to funguje?", - "copiedToClipboard": "Zkopírováno do schránky!", - "close": "Zavřít", - "logout": "Odhlásit se", - "featured": "Vybrané projekty", - "treeMapper": "TreeMapper", - "overview": "Přehled", - "childrenAndYouth": "Děti a mládež", - "trillionTrees": "Bilion stromů", - "yucatan": "Yucatán Restoration", - "partners": "Partneři", - "changeChocolate": "The Change Chocolate", - "stopTalkingStartPlanting": "Stop talking. Start planting.", - "underMaintenance": "Probíhá údržba", - "forbidden": "Nemáte oprávnění prohlížet tuto stránku!", - "connectionError": "Se serverem se nelze spojit . Zkontrolujte prosím své internetové připojení.", - "validationFailed": "Ověření selhalo!", - "add": "Přidat", - "modalTitle": "Pro pokračování zrušte všechny odběry", - "modalSubtitle": "Prosím, nejprve zrušte své předplatné", - "deleteCondition": "Před pokračováním se ujistěte, že jste zrušili všechny odběry.", - "showSubscriptions": "Zobrazit mé odběry", - "notFound": "Požadovaná stránka nebyla nalezena.", - "unauthorized": "Něco se pokazilo. Zkuste se odhlásit a znovu přihlásit.", - "validationError": "Chyba ověření", - "internalServerError": "Interní chyba serveru - zkuste to prosím později!", - "serviceUnavailable": "Aplikace prochází údržbou, podrobnosti najdete na status.plant-for-the-planet.org", - "account_duplicate": "Účet již existuje", - "line_item_amount_deviation": "Odchylka částky", - "line_item_amount_invalid": "Neplatná částka", - "line_item_amount_prohibited": "Zakázaná částka", - "idempotency_key_missing": "Chybějící klíč Idempotence v záhlaví", - "line_item_invalid_donor_data": "Neplatné údaje o dárci", - "line_item_invalid_planet_cash_account": "Neplatný PlanetCash účet ", - "line_item_invalid_project": "Neplatný projekt", - "line_item_missing_amount": "Chybějící částka", - "line_item_missing_currency": "Chybějící měna", - "line_item_missing_quantity": "Chybějící množství", - "line_item_project_not_allowing_donations": "Projekt neumožňující dary", - "line_item_quantity_prohibited": "Zakázané množství", - "generic_error": "Něco se pokazilo. Zkontrolujte prosím své internetové připojení nebo to zkuste později.", - "missing_profile": "Chybějící profil", - "some_error": "Něco se pokazilo.", - "planet_cash_payment_failure": "Selhání platby", - "planet_cash_insufficient_credit": "Nedostatečný kredit", - "planet_cash_invalid_project": "Neplatný projekt", - "active_account_exists": "Aktivní účet PlanetCash již existuje", - "duplicate_account": "Účet již existuje", - "token_expired": "Platnost tokenu vypršela. Přihlaste se znovu.", - "topProject": "Top projekt", - "viewReport": "Zobrazit zprávu", - "reviewInfo": " Projekt byl zkontrolován v rámci vícedenního terénního přezkumu v <2>měsíci a splňuje naše <5>standardy.", - "standardsLink": "https://www.plant-for-the-planet.org/standards/", - "project": "Projekt" -} + "Common": { + "tree_one": " strom", + "tree_other": "stromů", + "by": "Od {{tpoName}}", + "to_project_by_tpo": "Pro {{projectName}} od {{tpoName}}", + "for": "pro", + "trees": "stromů", + "planted": "Zasazeno", + "privacy": "Soukromí", + "terms": "Podmínky", + "imprint": "Imprint ", + "status": "Stav", + "contact": "Kontakt", + "supportUs": "Podpořte nás", + "leaders": "Stromvedoucí", + "leaderboard": "Stromvedoucí", + "me": "Já", + "signIn": "Přihlásit se", + "home": "Domů", + "donate_gift": "Darovat", + "plant": "Zasadit", + "donate": "Darovat", + "gift": "Dar", + "continue": "Pokračovat", + "selectLanguage": "Výběr jazyka", + "selectCountry": "Výběr země", + "ok": "OK", + "cancel": "Zrušit", + "delete": "Vymazat", + "deleteAccount": "Odstranit účet", + "thankYou": "Děkujeme", + "privacyPolicyNotice": "Používáním webových stránek Plant-for-the-Planet souhlasíte se", + "privacyPolicy": "Soukromí a zásady používání souborů cookie", + "about_pftp": "O Plant-for-the-Planet", + "january": "Leden", + "february": "Únor", + "march": "Březen", + "april": "Duben", + "may": "Květen", + "june": "Červen", + "july": "Červenec", + "august": "Srpen", + "september": "Září", + "october": "Říjen", + "november": "Listopad", + "december": "Prosinec", + "approx": "Přibližně", + "view": "Zobrazit", + "verifyEmailHeader": "Potvrďte prosím svůj e-mail.", + "verifyEmailText": "Abychom mohli váš účet zabezpečit, musíme ověřit váš e-mail. Zkontrolujte, zda vám přišel potvrzovací e-mail a pokračujte v přihlašování.", + "verifyEmailInfo": "Pokud jste e-mail neobdrželi, zkuste se znovu přihlásit a my vám pošleme další e-mail.", + "continueToLogin": "Pokračovat v přihlašení", + "supportsUNEP": "Podporuje UNEP", + "plantedBy": "Zasazeno", + "redeemPopup": "Obdrželi jste stromový dárek ? Přihlaste se, abyste mohli získat své stromky.", + "login": "Přihlášení/registrace", + "shop": "Obchod (DEU)", + "downloads": "Stažené", + "team": "Tým", + "jobs": "Pracovní nabídky ", + "blogs": "Blogy", + "faqs": "Často kladené otázky", + "annualReports": "Výroční zprávy", + "skipIntroVideo": "Přeskočit úvod", + "mapInfo": "Zdroje a autoři map", + "aboutUs": "O nás", + "alternativelyEditProfile": "Případně můžete svůj profil označit jako soukromý v části Upravit profil.", + "deleteAccountConsent": "Kliknutím na tlačítko \"Smazat\" žádám společnost Plant-for-the-Planet o smazání všech dat spojených s mým účtem Plant-for-the-Planet. Údaje o darech mohou být uchovávány po dobu osmi let. Stromy, které jsem zaregistroval, nebudou odstraněny, budou však anonymizovány a nebude možné o ně znovu požádat. ", + "deleteIrreversible": "Rovněž beru na vědomí, že smazání účtu {{email}} je nevratné.", + "goBack": "Zpět", + "deleteAccountMessage": "Chcete-li pokračovat v odstranění, zadejte `{{delete}}`", + "deleteAccountLabel": "Zadejte: {{delete}}", + "edit": "Upravit", + "howDoesThisWork": "Jak to funguje?", + "copiedToClipboard": "Zkopírováno do schránky!", + "close": "Zavřít", + "logout": "Odhlásit se", + "featured": "Vybrané projekty", + "treeMapper": "TreeMapper", + "overview": "Přehled", + "childrenAndYouth": "Děti a mládež", + "trillionTrees": "Bilion stromů", + "yucatan": "Yucatán Restoration", + "partners": "Partneři", + "changeChocolate": "The Change Chocolate", + "stopTalkingStartPlanting": "Stop talking. Start planting.", + "underMaintenance": "Probíhá údržba", + "forbidden": "Nemáte oprávnění prohlížet tuto stránku!", + "connectionError": "Se serverem se nelze spojit . Zkontrolujte prosím své internetové připojení.", + "validationFailed": "Ověření selhalo!", + "add": "Přidat", + "modalTitle": "Pro pokračování zrušte všechny odběry", + "modalSubtitle": "Prosím, nejprve zrušte své předplatné", + "deleteCondition": "Před pokračováním se ujistěte, že jste zrušili všechny odběry.", + "showSubscriptions": "Zobrazit mé odběry", + "notFound": "Požadovaná stránka nebyla nalezena.", + "unauthorized": "Něco se pokazilo. Zkuste se odhlásit a znovu přihlásit.", + "validationError": "Chyba ověření", + "internalServerError": "Interní chyba serveru - zkuste to prosím později!", + "serviceUnavailable": "Aplikace prochází údržbou, podrobnosti najdete na status.plant-for-the-planet.org", + "account_duplicate": "Účet již existuje", + "line_item_amount_deviation": "Odchylka částky", + "line_item_amount_invalid": "Neplatná částka", + "line_item_amount_prohibited": "Zakázaná částka", + "idempotency_key_missing": "Chybějící klíč Idempotence v záhlaví", + "line_item_invalid_donor_data": "Neplatné údaje o dárci", + "line_item_invalid_planet_cash_account": "Neplatný PlanetCash účet ", + "line_item_invalid_project": "Neplatný projekt", + "line_item_missing_amount": "Chybějící částka", + "line_item_missing_currency": "Chybějící měna", + "line_item_missing_quantity": "Chybějící množství", + "line_item_project_not_allowing_donations": "Projekt neumožňující dary", + "line_item_quantity_prohibited": "Zakázané množství", + "generic_error": "Něco se pokazilo. Zkontrolujte prosím své internetové připojení nebo to zkuste později.", + "missing_profile": "Chybějící profil", + "some_error": "Něco se pokazilo.", + "planet_cash_payment_failure": "Selhání platby", + "planet_cash_insufficient_credit": "Nedostatečný kredit", + "planet_cash_invalid_project": "Neplatný projekt", + "active_account_exists": "Aktivní účet PlanetCash již existuje", + "duplicate_account": "Účet již existuje", + "token_expired": "Platnost tokenu vypršela. Přihlaste se znovu.", + "topProject": "Top projekt", + "viewReport": "Zobrazit zprávu", + "reviewInfo": " Projekt byl zkontrolován v rámci vícedenního terénního přezkumu v <2>měsíci a splňuje naše <5>standardy.", + "standardsLink": "https://www.plant-for-the-planet.org/standards/", + "project": "Projekt" + } +} \ No newline at end of file diff --git a/public/static/locales/cs/country.json b/public/static/locales/cs/country.json index 774814a96b..72d98b54de 100644 --- a/public/static/locales/cs/country.json +++ b/public/static/locales/cs/country.json @@ -1,262 +1,264 @@ { - "auto": "Automatický výběr", - "ac": "Ascension Island", - "af": "Afghánistán", - "ax": "Faerské ostrovy", - "al": "Albánie", - "dz": "Alžírsko", - "as": "Americká Samoa", - "ad": "Andorra", - "ao": "Angola", - "ai": "Anguilla", - "aq": "Antarctica", - "ag": "Antigua a Barbuda", - "ar": "Argentina", - "am": "Arménie", - "aw": "Aruba", - "au": "Austrálie", - "at": "Rakousko", - "az": "Ázerbajdžán", - "bs": "Bahamské ostrovy", - "bh": "Bahrajn", - "bd": "Bangladéš", - "bb": "Barbados", - "by": "Bělorusko", - "be": "Belgie", - "bz": "Belize", - "bj": "Benin", - "bm": "Bermudy", - "bt": "Bhútán", - "bo": "Bolívie", - "bq": "Bonaire, Sint Eustatius a Saba", - "ba": "Bosna a Hercegovina", - "bw": "Botswana", - "bv": "Bouvetův ostrov", - "br": "Brazílie", - "io": "Britské indickooceánské území", - "bn": "Brunej", - "bg": "Bulharsko", - "bf": "Burkina Faso", - "bi": "Burundi", - "cv": "Cabo Verde", - "kh": "Kambodža", - "cm": "Kamerun", - "ca": "Kanada", - "ic": "Kanárské ostrovy", - "ky": "Kajmanské ostrovy", - "cf": "Středoafrická republika", - "ea": "Ceuta a Melilla", - "td": "Chad", - "cl": "Chile", - "cn": "Čína", - "cx": "Vánoční ostrov", - "cc": "Kokosové ostrovy (Keeling)", - "co": "Kolumbie", - "km": "Komory", - "cg": "Kongo", - "cd": "Konžská demokratická republika", - "ck": "Cookovy ostrovy", - "cr": "Kostarika", - "ci": "Pobřeží slonoviny", - "hr": "Chorvatsko", - "cu": "Kuba", - "cw": "Curaçao", - "cy": "Kypr", - "cz": "Česko", - "dk": "Dánsko", - "dg": "Diego Garcia", - "dj": "Džibutsko", - "dm": "Dominika", - "do": "Dominikánská republika", - "tp": "Východní Timor", - "ec": "Ekvádor", - "eg": "Egypt", - "sv": "El Salvador", - "gq": "Rovníková Guinea", - "er": "Eritrea", - "ee": "Estonsko", - "sz": "Eswatini", - "et": "Etiopie", - "ez": "Eurozóna", - "fk": "Falklandy (Malvíny)", - "fo": "Faerské ostrovy", - "fj": "Fidži", - "fi": "Finsko", - "fr": "Francie", - "gf": "Francouzsky Guyana", - "pf": "Francouzská Polynésie", - "tf": "Francouzská jižní teritoria", - "ga": "Gabon", - "gm": "Gambie", - "ge": "Georgia", - "de": "Německo", - "gh": "Ghana", - "gi": "Gibraltar", - "gr": "Řecko", - "gl": "Grónsko", - "gd": "Grenada", - "gp": "Guadeloupe", - "gu": "Guam", - "gt": "Guatemala", - "gg": "Guernsey", - "gn": "Guinea", - "gw": "Guinea-Bissau", - "gy": "Guyana", - "ht": "Haiti", - "hm": "Heardův ostrov a McDonaldovy ostrovy", - "va": "Svatý stolec", - "hn": "Honduras", - "hk": "Hongkong", - "hu": "Maďarsko", - "is": "Island", - "in": "Indie", - "id": "Indonésie", - "ir": "Írán", - "iq": "Irák", - "ie": "Irsko", - "im": "Isle of Man", - "il": "Izrael", - "it": "Itálie", - "jm": "Jamaica", - "jp": "Japonsko", - "je": "Trikot", - "jo": "Jordán", - "kz": "Kazachstán", - "ke": "Keňa", - "ki": "Kiribati", - "xk": "Kosovo", - "kp": "Korea (Demokratická lidová republika)", - "kr": "Korejská republika", - "kw": "Kuvajt", - "kg": "Kyrgyzstán", - "la": "Laoská lidově demokratická republika", - "lv": "Lotyšsko", - "lb": "Libanon", - "ls": "Lesotho", - "lr": "Libérie", - "ly": "Libye", - "li": "Lichtenštejnsko", - "lt": "Litva", - "lu": "Lucembursko", - "mo": "Macao", - "mg": "Madagaskar", - "mw": "Malawi", - "my": "Malajsie", - "mv": "Maledivy", - "ml": "Mali", - "mt": "Malta", - "mh": "Marshallovy ostrovy", - "mq": "Martinik", - "mr": "Mauritánie", - "mu": "Mauritius", - "yt": "Mayotte", - "mx": "Mexiko", - "fm": "Mikronésie", - "md": "Moldavsko", - "mc": "Monako", - "mn": "Mongolsko", - "me": "Černá Hora", - "ms": "Montserrat", - "ma": "Maroko", - "mz": "Mosambik", - "mm": "Myanmar", - "na": "Namibie", - "nr": "Nauru", - "np": "Nepál", - "nl": "Holandsko", - "an": "Nizozemské Antily", - "nc": "Nová Kaledonie", - "nz": "Nový Zéland", - "ni": "Nikaragua", - "ne": "Niger", - "ng": "Nigérie", - "nu": "Niue", - "nf": "Norfolk Island", - "mk": "Severní Makedonie", - "mp": "Severní Mariany", - "no": "Norsko", - "om": "Omán", - "pk": "Pákistán", - "pw": "Palau", - "ps": "Palestina, stát", - "pa": "Panama", - "pg": "Papua-Nová Guinea", - "py": "Paraguay", - "pe": "Peru", - "ph": "Filipíny", - "pn": "Pitcairn", - "pl": "Polsko", - "pt": "Portugalsko", - "pr": "Portoriko", - "qa": "Katar", - "re": "Réunion", - "ro": "Rumunsko", - "ru": "Ruská Federace", - "rw": "Rwanda", - "bl": "Svatý Bartolomej", - "sh": "Svatá Helena, Nanebevstoupení a Tristan da Cunha", - "kn": "Svatý Kryštof a Nevis", - "lc": "Svatá Lucie", - "mf": "Svatý Martin (francouzská část)", - "pm": "Saint-Pierre a Miquelon", - "vc": "Svatý Vincenc a Grenadiny", - "ws": "Samoa", - "sm": "San Marino", - "st": "Svatý Tomáš a Princův", - "sa": "Saudská arábie", - "sn": "Senegal", - "rs": "Srbsko", - "sc": "Seychely", - "sl": "Sierra Leone", - "sg": "Singapur", - "sx": "Sint Maarten (nizozemská část)", - "sk": "Slovensko", - "si": "Slovinsko", - "sb": "Šalamounovy ostrovy", - "so": "Somálsko", - "za": "Jižní Afrika", - "gs": "Jižní Georgie a Jižní Sandwichovy ostrovy", - "ss": "jižní Súdán", - "es": "Španělsko", - "lk": "Srí Lanka", - "sd": "Súdán", - "sr": "Surinam", - "sj": "Svalbard a Jan Mayen", - "se": "Švédsko", - "ch": "Švýcarsko", - "sy": "Syrská Arabská republika", - "tw": "Taiwan", - "tj": "Tádžikistán", - "tz": "Tanzanie", - "th": "Thajsko", - "tl": "Timor-Leste", - "tg": "Togo", - "tk": "Tokelau", - "to": "Tonga", - "tt": "Trinidad a Tobago", - "ta": "Tristan da Cunha", - "tn": "Tunisko", - "tr": "Turecko", - "tm": "Turkmenistán", - "tc": "Turks a Caicos", - "tv": "Tuvalu", - "ug": "Uganda", - "ua": "Ukrajina", - "ae": "Spojené arabské emiráty", - "gb": "UK", - "un": "Organizace spojených národů", - "us": "USA", - "um": "Malé odlehlé ostrovy Spojených států", - "uy": "Uruguay", - "uz": "Uzbekistán", - "vu": "Vanuatu", - "ve": "Venezuela", - "vn": "Vietnam", - "vg": "Panenské ostrovy (britské)", - "vi": "Panenské ostrovy (USA)", - "wf": "Wallis a Futuna", - "eh": "Západní Sahara", - "ye": "Jemen", - "zm": "Zambie", - "zw": "Zimbabwe" + "Country": { + "auto": "Automatický výběr", + "ac": "Ascension Island", + "af": "Afghánistán", + "ax": "Faerské ostrovy", + "al": "Albánie", + "dz": "Alžírsko", + "as": "Americká Samoa", + "ad": "Andorra", + "ao": "Angola", + "ai": "Anguilla", + "aq": "Antarctica", + "ag": "Antigua a Barbuda", + "ar": "Argentina", + "am": "Arménie", + "aw": "Aruba", + "au": "Austrálie", + "at": "Rakousko", + "az": "Ázerbajdžán", + "bs": "Bahamské ostrovy", + "bh": "Bahrajn", + "bd": "Bangladéš", + "bb": "Barbados", + "by": "Bělorusko", + "be": "Belgie", + "bz": "Belize", + "bj": "Benin", + "bm": "Bermudy", + "bt": "Bhútán", + "bo": "Bolívie", + "bq": "Bonaire, Sint Eustatius a Saba", + "ba": "Bosna a Hercegovina", + "bw": "Botswana", + "bv": "Bouvetův ostrov", + "br": "Brazílie", + "io": "Britské indickooceánské území", + "bn": "Brunej", + "bg": "Bulharsko", + "bf": "Burkina Faso", + "bi": "Burundi", + "cv": "Cabo Verde", + "kh": "Kambodža", + "cm": "Kamerun", + "ca": "Kanada", + "ic": "Kanárské ostrovy", + "ky": "Kajmanské ostrovy", + "cf": "Středoafrická republika", + "ea": "Ceuta a Melilla", + "td": "Chad", + "cl": "Chile", + "cn": "Čína", + "cx": "Vánoční ostrov", + "cc": "Kokosové ostrovy (Keeling)", + "co": "Kolumbie", + "km": "Komory", + "cg": "Kongo", + "cd": "Konžská demokratická republika", + "ck": "Cookovy ostrovy", + "cr": "Kostarika", + "ci": "Pobřeží slonoviny", + "hr": "Chorvatsko", + "cu": "Kuba", + "cw": "Curaçao", + "cy": "Kypr", + "cz": "Česko", + "dk": "Dánsko", + "dg": "Diego Garcia", + "dj": "Džibutsko", + "dm": "Dominika", + "do": "Dominikánská republika", + "tp": "Východní Timor", + "ec": "Ekvádor", + "eg": "Egypt", + "sv": "El Salvador", + "gq": "Rovníková Guinea", + "er": "Eritrea", + "ee": "Estonsko", + "sz": "Eswatini", + "et": "Etiopie", + "ez": "Eurozóna", + "fk": "Falklandy (Malvíny)", + "fo": "Faerské ostrovy", + "fj": "Fidži", + "fi": "Finsko", + "fr": "Francie", + "gf": "Francouzsky Guyana", + "pf": "Francouzská Polynésie", + "tf": "Francouzská jižní teritoria", + "ga": "Gabon", + "gm": "Gambie", + "ge": "Georgia", + "de": "Německo", + "gh": "Ghana", + "gi": "Gibraltar", + "gr": "Řecko", + "gl": "Grónsko", + "gd": "Grenada", + "gp": "Guadeloupe", + "gu": "Guam", + "gt": "Guatemala", + "gg": "Guernsey", + "gn": "Guinea", + "gw": "Guinea-Bissau", + "gy": "Guyana", + "ht": "Haiti", + "hm": "Heardův ostrov a McDonaldovy ostrovy", + "va": "Svatý stolec", + "hn": "Honduras", + "hk": "Hongkong", + "hu": "Maďarsko", + "is": "Island", + "in": "Indie", + "id": "Indonésie", + "ir": "Írán", + "iq": "Irák", + "ie": "Irsko", + "im": "Isle of Man", + "il": "Izrael", + "it": "Itálie", + "jm": "Jamaica", + "jp": "Japonsko", + "je": "Trikot", + "jo": "Jordán", + "kz": "Kazachstán", + "ke": "Keňa", + "ki": "Kiribati", + "xk": "Kosovo", + "kp": "Korea (Demokratická lidová republika)", + "kr": "Korejská republika", + "kw": "Kuvajt", + "kg": "Kyrgyzstán", + "la": "Laoská lidově demokratická republika", + "lv": "Lotyšsko", + "lb": "Libanon", + "ls": "Lesotho", + "lr": "Libérie", + "ly": "Libye", + "li": "Lichtenštejnsko", + "lt": "Litva", + "lu": "Lucembursko", + "mo": "Macao", + "mg": "Madagaskar", + "mw": "Malawi", + "my": "Malajsie", + "mv": "Maledivy", + "ml": "Mali", + "mt": "Malta", + "mh": "Marshallovy ostrovy", + "mq": "Martinik", + "mr": "Mauritánie", + "mu": "Mauritius", + "yt": "Mayotte", + "mx": "Mexiko", + "fm": "Mikronésie", + "md": "Moldavsko", + "mc": "Monako", + "mn": "Mongolsko", + "me": "Černá Hora", + "ms": "Montserrat", + "ma": "Maroko", + "mz": "Mosambik", + "mm": "Myanmar", + "na": "Namibie", + "nr": "Nauru", + "np": "Nepál", + "nl": "Holandsko", + "an": "Nizozemské Antily", + "nc": "Nová Kaledonie", + "nz": "Nový Zéland", + "ni": "Nikaragua", + "ne": "Niger", + "ng": "Nigérie", + "nu": "Niue", + "nf": "Norfolk Island", + "mk": "Severní Makedonie", + "mp": "Severní Mariany", + "no": "Norsko", + "om": "Omán", + "pk": "Pákistán", + "pw": "Palau", + "ps": "Palestina, stát", + "pa": "Panama", + "pg": "Papua-Nová Guinea", + "py": "Paraguay", + "pe": "Peru", + "ph": "Filipíny", + "pn": "Pitcairn", + "pl": "Polsko", + "pt": "Portugalsko", + "pr": "Portoriko", + "qa": "Katar", + "re": "Réunion", + "ro": "Rumunsko", + "ru": "Ruská Federace", + "rw": "Rwanda", + "bl": "Svatý Bartolomej", + "sh": "Svatá Helena, Nanebevstoupení a Tristan da Cunha", + "kn": "Svatý Kryštof a Nevis", + "lc": "Svatá Lucie", + "mf": "Svatý Martin (francouzská část)", + "pm": "Saint-Pierre a Miquelon", + "vc": "Svatý Vincenc a Grenadiny", + "ws": "Samoa", + "sm": "San Marino", + "st": "Svatý Tomáš a Princův", + "sa": "Saudská arábie", + "sn": "Senegal", + "rs": "Srbsko", + "sc": "Seychely", + "sl": "Sierra Leone", + "sg": "Singapur", + "sx": "Sint Maarten (nizozemská část)", + "sk": "Slovensko", + "si": "Slovinsko", + "sb": "Šalamounovy ostrovy", + "so": "Somálsko", + "za": "Jižní Afrika", + "gs": "Jižní Georgie a Jižní Sandwichovy ostrovy", + "ss": "jižní Súdán", + "es": "Španělsko", + "lk": "Srí Lanka", + "sd": "Súdán", + "sr": "Surinam", + "sj": "Svalbard a Jan Mayen", + "se": "Švédsko", + "ch": "Švýcarsko", + "sy": "Syrská Arabská republika", + "tw": "Taiwan", + "tj": "Tádžikistán", + "tz": "Tanzanie", + "th": "Thajsko", + "tl": "Timor-Leste", + "tg": "Togo", + "tk": "Tokelau", + "to": "Tonga", + "tt": "Trinidad a Tobago", + "ta": "Tristan da Cunha", + "tn": "Tunisko", + "tr": "Turecko", + "tm": "Turkmenistán", + "tc": "Turks a Caicos", + "tv": "Tuvalu", + "ug": "Uganda", + "ua": "Ukrajina", + "ae": "Spojené arabské emiráty", + "gb": "UK", + "un": "Organizace spojených národů", + "us": "USA", + "um": "Malé odlehlé ostrovy Spojených států", + "uy": "Uruguay", + "uz": "Uzbekistán", + "vu": "Vanuatu", + "ve": "Venezuela", + "vn": "Vietnam", + "vg": "Panenské ostrovy (britské)", + "vi": "Panenské ostrovy (USA)", + "wf": "Wallis a Futuna", + "eh": "Západní Sahara", + "ye": "Jemen", + "zm": "Zambie", + "zw": "Zimbabwe" + } } \ No newline at end of file diff --git a/public/static/locales/cs/donate.json b/public/static/locales/cs/donate.json index 9081508084..415495cff2 100644 --- a/public/static/locales/cs/donate.json +++ b/public/static/locales/cs/donate.json @@ -1,110 +1,112 @@ { - "myTreesPlantedByOnLocation_0": "Můj {{treeCount}} strom se sází v {{location}}.", - "topProjects": "Nejlepší projekty", - "allCountProjects": "Všech [{{projectCount}}] projektů", - "searchProjects": "Prohledat projekty ...", - "viewProfile": "Prohlédnout profil", - "contactDetails": "Kontaktní údaje", - "readMore": "Přečtěte si více", - "readLess": "Přečtěte si méně", - "treeDonation": "Darování stromů", - "myDonationGiftToSomeone": "Můj příspěvek je někomu věnován ", - "taxDeductionNotYetAvailable": "Daňový odpočet zatím není k dispozici pro ", - "taxDeductionNotAvailableForProject": "Daňový odpočet pro tento projekt zatím není k dispozici", - "youWillReceiveTaxDeduction": "Obdržíte potvrzení o daňovém odpočtu za ", - "toProjectByOrganization": "Do {{projectName}} od {{organizationName}}", - "firstName": "Jméno", - "lastName": "Příjmení", - "email": "Email", - "address": "Adresa", - "city": "Město", - "zipCode": "PSČ", - "zipCodeAlphaNumValidation": "PSČ je neplatné", - "country": "Země", - "isACompanyDonation": "Tento dar poskytuje firma", - "companyName": "Název společnosti", - "giftRecipient": "Příjemce dárku", - "directGiftRecipient": "Tento dar podporuje", - "recipientName": "Jméno příjemce", - "recipientNameRequired": "Jméno příjemce je povinné", - "removeRecipient": "Odstranit", - "giftMessage": "Zpráva k dárku", - "firstNameRequired": "Jméno je povinné", - "lastNameRequired": "Příjmení je povinné", - "emailRequired": "Email je povinný", - "addressRequired": "Adresa je povinná", - "cityRequired": "Město je povinno", - "countryRequired": "Země je povinná", - "companyRequired": "Název společnosti je povinný", - "paymentDetails": "Podrobnosti o platbě", - "validationFailed": "Ověření selhalo", - "seedingYourDonation": "Odeslání vašeho daru", - "pleaseDoNotCloseThisTab": "lNezavírejte prosím tuto kartu!", - "perTree": "na strom", - "stopTalkingStartPlanting": "Stop talking. Start planting.", - "creditDebitCard": "Kreditní/debetní karta", - "cardNumber": "Číslo karty", - "expDate": "Exp. Datum (MM/RR)", - "selectCurrency": "Vyberte měnu", - "treeDonationWithPFP": "Darování stromů s Plant-for-the-Planet", - "unavailable": "nedostupné", - "donationSuccessfulWith": "Váš dar {{currency}} {{totalAmount}} byl úspěšně uhrazen pomocí {{paymentTypeUsed}}.", - "donationSuccessful": "Váš dar {{currency}} {{totalAmount}} byl úspěšný.", - "giftSentMessage": "Odeslali jsme e-mail ohledně tohoto daru pro {{recipientName}}.", - "contributionMessage": "Možná je jednoho dne navštívíš? Mezitím možná spojíte své přátele s nějakými vlastními stromy tím, že jim řeknete o svých?", - "plantTreesAtURL": "Sázejte stromy na {{url}}", - "copiedToClipboard": "Text zkopírovaný do schránky!", - "noProjectsFound": "Nebyly nalezeny žádné projekty", - "inTimeOfTaxReturns": "včas pro daňové přiznání.", - "titleToShare": "Sázením stromů proti klimatické krizi!", - "giftToName": "Dárek pro", - "thisDonationSupports": "Tento dar podporuje", - "plantTreesWith": "Zasaďte stromy s", - "textToShare": "Připojte se k {{name}} a tisícům dalších, abyste zasadili bilion stromů a řešili tak klimatickou krizi #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "thankyouHeaderText": "Jsme na cestě k \n

Trillion Trees

", - "shareTextTitle": "Stop Talking. Start Plant", - "textToShareLinkedin": "Přidejte se k {{name}} a tisícům dalších, aby jsme zasadili bilion stromů, aby jsme se vypořádali s klimatickou krizí", - "textToShareForMe": "Připojte se ke mně a tisícům dalších ak cíli zasazení bilionu stromů, abychom se vypořádali s klimatickou krizí", - "donationTokenInvalid": "Zadaný darovací token je neplatný.", - "giftTo": "Dárek pro", - "supporting": "Podporuje ", - "selectProject": "Vyberte projekt", - "giftValidation": "Zadejte prosím údaje o dárku", - "minDonate": "Minimální výše daru je", - "noPaymentMethodError": "Platbu se nepodařilo zpracovat, zkuste to prosím znovu.", - "somethingWentWrong": "Něco se pokazilo, zkuste to prosím znovu!", - "underMaintenance": "Aplikace prochází údržbou, podrobnosti najdete na status.plant-for-the-planet.org", - "waitingConfirmation": "V současné době čekáme na potvrzení z vaší banky a brzy vám zašleme e-mail. Klidně tuto stránku můžete zavřít.", - "yourDonationRef": "Vaše darovací číslo je {{donationID}}", - "payWithGiroPay": "Darujte pomocí GiroPay", - "payWithSofort": "Darujte pomocí SOFORT", - "donationFailed": "Darování selhalo", - "donationFailedMessage": "Při dokončování platby se něco pokazilo. Pokud budete mít i nadále problémy, kontaktujte nás prosím na adrese support@plant-for-the-planet.org", - "donationPending": "Dokončení darování", - "donationPendingMessage": "V současné době čekáme na potvrzení od vaší banky. To může nějakou dobu trvat, proto tuto stránku neváhejte zavřít. Potvrzení vám brzy zašleme e-mailem.", - "sepaMessage": "Zadáním svého IBAN a potvrzením této platby opravňujete Plant-for-the-Planet a Stripe, našeho poskytovatele platebních služeb, k zaslání pokynů vaší bance k odepsání částky z vašeho účtu. Máte nárok na vrácení peněz od vaší banky podle podmínek smlouvy s vaší bankou. Pokud máte jakékoli problémy týkající se vašeho daru, pošlete nám prosím e-mail na adresu support@plant-for-the-planet.org", - "donationRef": "Odkaz na dar", - "sepaDisclaimer": "Spracování SEPA platby trvá 2-14 pracovních dnů (obvykle 3-5 dnů). Jakmile dorazí, zašleme vám potvrzovací e-mail s certifikátem stromu a zvýšíme počítadlo stromů.", - "sofortDisclaimer": "Platby SOFORT trvají 2-14 pracovních dnů (obvykle 2-3 dny). Jakmile dorazí, zašleme vám potvrzovací e-mail s certifikátem stromu a zvýšíme počítadlo stromů.", - "askPublishName": "Zobrazte mé celé jména v aplikaci Plant-for-the-Planet a v žebříčcích.", - "nameAlreadyPublished": "V žebříčku se zobrazí vaše celé jméno, protože váš profil Plant-for-the-Planet je v současné době veřejný.", - "orgNamePublishedTax": "Název společnosti je viditelný na našem žebříčku a v aplikaci. Na stejný název budou vystaveny účtenky pro daňový odpočet.", - "orgNamePublished": "Název společnosti je viditelný na našem žebříčku a v aplikaci.", - "aboutProject": "O projektu", - "acceptingDonations": "Přijímání darů", - "natural-regeneration": "Přirozená regenerace", - "managed-regeneration": "Řízená regenerace", - "large-scale-planting": "Velkoplošná obnova krajiny", - "agroforestry": "Agrolesnictví", - "urban-planting": "Obnova ve městech", - "other-planting": "Obnova", - "mangroves": "Mangrovy", - "purpose": "Účel", - "projectPurpose": "Účel projektu", - "type": "Typ", - "projectType": "Typ projektu", - "conservation": "Ochrana přírody", - "restoration": "Restorace", - "filters": "Filtry", - "perM2": "na m²" + "Donate": { + "myTreesPlantedByOnLocation_0": "Můj {{treeCount}} strom se sází v {{location}}.", + "topProjects": "Nejlepší projekty", + "allCountProjects": "Všech [{{projectCount}}] projektů", + "searchProjects": "Prohledat projekty ...", + "viewProfile": "Prohlédnout profil", + "contactDetails": "Kontaktní údaje", + "readMore": "Přečtěte si více", + "readLess": "Přečtěte si méně", + "treeDonation": "Darování stromů", + "myDonationGiftToSomeone": "Můj příspěvek je někomu věnován ", + "taxDeductionNotYetAvailable": "Daňový odpočet zatím není k dispozici pro ", + "taxDeductionNotAvailableForProject": "Daňový odpočet pro tento projekt zatím není k dispozici", + "youWillReceiveTaxDeduction": "Obdržíte potvrzení o daňovém odpočtu za ", + "toProjectByOrganization": "Do {{projectName}} od {{organizationName}}", + "firstName": "Jméno", + "lastName": "Příjmení", + "email": "Email", + "address": "Adresa", + "city": "Město", + "zipCode": "PSČ", + "zipCodeAlphaNumValidation": "PSČ je neplatné", + "country": "Země", + "isACompanyDonation": "Tento dar poskytuje firma", + "companyName": "Název společnosti", + "giftRecipient": "Příjemce dárku", + "directGiftRecipient": "Tento dar podporuje", + "recipientName": "Jméno příjemce", + "recipientNameRequired": "Jméno příjemce je povinné", + "removeRecipient": "Odstranit", + "giftMessage": "Zpráva k dárku", + "firstNameRequired": "Jméno je povinné", + "lastNameRequired": "Příjmení je povinné", + "emailRequired": "Email je povinný", + "addressRequired": "Adresa je povinná", + "cityRequired": "Město je povinno", + "countryRequired": "Země je povinná", + "companyRequired": "Název společnosti je povinný", + "paymentDetails": "Podrobnosti o platbě", + "validationFailed": "Ověření selhalo", + "seedingYourDonation": "Odeslání vašeho daru", + "pleaseDoNotCloseThisTab": "lNezavírejte prosím tuto kartu!", + "perTree": "na strom", + "stopTalkingStartPlanting": "Stop talking. Start planting.", + "creditDebitCard": "Kreditní/debetní karta", + "cardNumber": "Číslo karty", + "expDate": "Exp. Datum (MM/RR)", + "selectCurrency": "Vyberte měnu", + "treeDonationWithPFP": "Darování stromů s Plant-for-the-Planet", + "unavailable": "nedostupné", + "donationSuccessfulWith": "Váš dar {{currency}} {{totalAmount}} byl úspěšně uhrazen pomocí {{paymentTypeUsed}}.", + "donationSuccessful": "Váš dar {{currency}} {{totalAmount}} byl úspěšný.", + "giftSentMessage": "Odeslali jsme e-mail ohledně tohoto daru pro {{recipientName}}.", + "contributionMessage": "Možná je jednoho dne navštívíš? Mezitím možná spojíte své přátele s nějakými vlastními stromy tím, že jim řeknete o svých?", + "plantTreesAtURL": "Sázejte stromy na {{url}}", + "copiedToClipboard": "Text zkopírovaný do schránky!", + "noProjectsFound": "Nebyly nalezeny žádné projekty", + "inTimeOfTaxReturns": "včas pro daňové přiznání.", + "titleToShare": "Sázením stromů proti klimatické krizi!", + "giftToName": "Dárek pro", + "thisDonationSupports": "Tento dar podporuje", + "plantTreesWith": "Zasaďte stromy s", + "textToShare": "Připojte se k {{name}} a tisícům dalších, abyste zasadili bilion stromů a řešili tak klimatickou krizi #StopTalkingStartPlanting #TrillionTrees @trilliontrees", + "thankyouHeaderText": "Jsme na cestě k \n

Trillion Trees

", + "shareTextTitle": "Stop Talking. Start Plant", + "textToShareLinkedin": "Přidejte se k {{name}} a tisícům dalších, aby jsme zasadili bilion stromů, aby jsme se vypořádali s klimatickou krizí", + "textToShareForMe": "Připojte se ke mně a tisícům dalších ak cíli zasazení bilionu stromů, abychom se vypořádali s klimatickou krizí", + "donationTokenInvalid": "Zadaný darovací token je neplatný.", + "giftTo": "Dárek pro", + "supporting": "Podporuje ", + "selectProject": "Vyberte projekt", + "giftValidation": "Zadejte prosím údaje o dárku", + "minDonate": "Minimální výše daru je", + "noPaymentMethodError": "Platbu se nepodařilo zpracovat, zkuste to prosím znovu.", + "somethingWentWrong": "Něco se pokazilo, zkuste to prosím znovu!", + "underMaintenance": "Aplikace prochází údržbou, podrobnosti najdete na status.plant-for-the-planet.org", + "waitingConfirmation": "V současné době čekáme na potvrzení z vaší banky a brzy vám zašleme e-mail. Klidně tuto stránku můžete zavřít.", + "yourDonationRef": "Vaše darovací číslo je {{donationID}}", + "payWithGiroPay": "Darujte pomocí GiroPay", + "payWithSofort": "Darujte pomocí SOFORT", + "donationFailed": "Darování selhalo", + "donationFailedMessage": "Při dokončování platby se něco pokazilo. Pokud budete mít i nadále problémy, kontaktujte nás prosím na adrese support@plant-for-the-planet.org", + "donationPending": "Dokončení darování", + "donationPendingMessage": "V současné době čekáme na potvrzení od vaší banky. To může nějakou dobu trvat, proto tuto stránku neváhejte zavřít. Potvrzení vám brzy zašleme e-mailem.", + "sepaMessage": "Zadáním svého IBAN a potvrzením této platby opravňujete Plant-for-the-Planet a Stripe, našeho poskytovatele platebních služeb, k zaslání pokynů vaší bance k odepsání částky z vašeho účtu. Máte nárok na vrácení peněz od vaší banky podle podmínek smlouvy s vaší bankou. Pokud máte jakékoli problémy týkající se vašeho daru, pošlete nám prosím e-mail na adresu support@plant-for-the-planet.org", + "donationRef": "Odkaz na dar", + "sepaDisclaimer": "Spracování SEPA platby trvá 2-14 pracovních dnů (obvykle 3-5 dnů). Jakmile dorazí, zašleme vám potvrzovací e-mail s certifikátem stromu a zvýšíme počítadlo stromů.", + "sofortDisclaimer": "Platby SOFORT trvají 2-14 pracovních dnů (obvykle 2-3 dny). Jakmile dorazí, zašleme vám potvrzovací e-mail s certifikátem stromu a zvýšíme počítadlo stromů.", + "askPublishName": "Zobrazte mé celé jména v aplikaci Plant-for-the-Planet a v žebříčcích.", + "nameAlreadyPublished": "V žebříčku se zobrazí vaše celé jméno, protože váš profil Plant-for-the-Planet je v současné době veřejný.", + "orgNamePublishedTax": "Název společnosti je viditelný na našem žebříčku a v aplikaci. Na stejný název budou vystaveny účtenky pro daňový odpočet.", + "orgNamePublished": "Název společnosti je viditelný na našem žebříčku a v aplikaci.", + "aboutProject": "O projektu", + "acceptingDonations": "Přijímání darů", + "natural-regeneration": "Přirozená regenerace", + "managed-regeneration": "Řízená regenerace", + "large-scale-planting": "Velkoplošná obnova krajiny", + "agroforestry": "Agrolesnictví", + "urban-planting": "Obnova ve městech", + "other-planting": "Obnova", + "mangroves": "Mangrovy", + "purpose": "Účel", + "projectPurpose": "Účel projektu", + "type": "Typ", + "projectType": "Typ projektu", + "conservation": "Ochrana přírody", + "restoration": "Restorace", + "filters": "Filtry", + "perM2": "na m²" + } } \ No newline at end of file diff --git a/public/static/locales/cs/donationLink.json b/public/static/locales/cs/donationLink.json index 53de800738..102f1161c3 100644 --- a/public/static/locales/cs/donationLink.json +++ b/public/static/locales/cs/donationLink.json @@ -1,23 +1,25 @@ { - "donationLinkTitle": "Vytvořte si darovací odkaz", - "donationLinkDescription": "Vytvořte darovací odkaz tak, aby fungoval podle vašich potřeb, abyste svým dárcům zajistili hladký průběh. Pomocí Náhled uvidíte, jak bude konečný výsledek fungovat.", - "qrCodeDiscription": "Namísto odkazu můžete také poskytnout QR-kód, abyste dosáhli zamýšleného projektu.", - "labelCountry": "Země", - "labelLanguages": "Jazyk", - "countryLanguageTitle": "Nastavení země a jazyka", - "projectTitle": "Nastavte svůj projekt", - "treeCounterTitle": "Podpořte můj TreeCounter", - "testingTitle": "Testovací režim", - "urlTitle": "Adresa URL vašeho darovacího odkazu", - "qrCodeTitle": "QR kód vašeho darovacího odkazu", - "languages": "Jazyky", - "preview": "Náhled", - "copy": "Kopírovat", - "treeCounterSubtitle": "Darování stromů přes tento odkaz přímo podporuje můj profil", - "testingModeSubtitle1": "K otestování použijte odkaz, který se nyní zobrazuje. Toto je pouze pro testování, pro správný odkaz ke sdílení je potřeba vypnout testovací režim.", - "testingModeSubtitle2": "Tok dárcovství můžete otestovat pomocí karet na", - "linkAndQRCodeUpdatedMessage": "Link a QR kód byly aktualizovány", - "treeCounterPrivateAccountSubtitle": "Aby byl váš profil podporován, musíte jej v nastavení účtu nastavit jako veřejný.", - "automaticSelection": "Automatický výběr", - "qrCodeFileName": "Darovací-link-QR-kód" + "DonationLink": { + "donationLinkTitle": "Vytvořte si darovací odkaz", + "donationLinkDescription": "Vytvořte darovací odkaz tak, aby fungoval podle vašich potřeb, abyste svým dárcům zajistili hladký průběh. Pomocí Náhled uvidíte, jak bude konečný výsledek fungovat.", + "qrCodeDiscription": "Namísto odkazu můžete také poskytnout QR-kód, abyste dosáhli zamýšleného projektu.", + "labelCountry": "Země", + "labelLanguages": "Jazyk", + "countryLanguageTitle": "Nastavení země a jazyka", + "projectTitle": "Nastavte svůj projekt", + "treeCounterTitle": "Podpořte můj TreeCounter", + "testingTitle": "Testovací režim", + "urlTitle": "Adresa URL vašeho darovacího odkazu", + "qrCodeTitle": "QR kód vašeho darovacího odkazu", + "languages": "Jazyky", + "preview": "Náhled", + "copy": "Kopírovat", + "treeCounterSubtitle": "Darování stromů přes tento odkaz přímo podporuje můj profil", + "testingModeSubtitle1": "K otestování použijte odkaz, který se nyní zobrazuje. Toto je pouze pro testování, pro správný odkaz ke sdílení je potřeba vypnout testovací režim.", + "testingModeSubtitle2": "Tok dárcovství můžete otestovat pomocí karet na", + "linkAndQRCodeUpdatedMessage": "Link a QR kód byly aktualizovány", + "treeCounterPrivateAccountSubtitle": "Aby byl váš profil podporován, musíte jej v nastavení účtu nastavit jako veřejný.", + "automaticSelection": "Automatický výběr", + "qrCodeFileName": "Darovací-link-QR-kód" + } } \ No newline at end of file diff --git a/public/static/locales/cs/editProfile.json b/public/static/locales/cs/editProfile.json index 2be378bfc8..b7013d063f 100644 --- a/public/static/locales/cs/editProfile.json +++ b/public/static/locales/cs/editProfile.json @@ -1,37 +1,39 @@ { - "loginTitle": "{{log}} - Přihlášení", - "signUpText": "Dokončení registrace", - "profileTypes": "{{item.title}}", - "createAccount": "Vytvořit účet", - "individual": "Osoba", - "tpo": "Organizace pro obnovu lesů", - "education": "Škola", - "organization": "Společnost", - "profileCreated": "Profil úspěšně vytvořen!", - "profileCreationFailed": "Chyba při vytváření profilu. Zkuste to prosím znovu.", - "profileCreationError": "Chyba při vytváření profilu.", - "edit": "Editovat profil", - "privateAccountTxt": "Váš profil je skrytý a v žebříčku se zobrazuje pouze vaše křestní jméno", - "save": "Uložit", - "profilePicUpdated": "Profilový obrázek se aktualizuje...", - "profileSaved": "Úspěšně uloženo!", - "profileSaveFailed": "Chyba při aktualizaci profilu.", - "changeAccountToPublic": "Přechod na veřejný účet", - "publicAccount": "Veřejný účet", - "accountPrivacyChangeText": "Abyste mohli vytvořit widget profilu, musíte mít veřejný účet. Kliknutím na tlačítko pokračovat změníte nastavení soukromí na veřejné.", - "continue": "Pokračovat", - "cancel": "Zrušit", - "termAndCondition": "Souhlasím s podmínkami platformy Plant-for-the-Planet.", - "termAndConditionError": "Přijměte prosím Smluvní podmínky", - "fieldLabels": { - "profileType": "Já jsem", - "name": "Název {{type}}", - "website": "Webstránka", - "privateAccount": "Soukromý účet", - "subscribe": "Přihlášení k odběru novinek e-mailem" - }, - "validationErrors": { - "nameRequired": "Zadejte prosím jméno", - "websiteInvalid": "Zadejte prosím platnou adresu URL" + "EditProfile": { + "loginTitle": "{{log}} - Přihlášení", + "signUpText": "Dokončení registrace", + "profileTypes": "{{item.title}}", + "createAccount": "Vytvořit účet", + "individual": "Osoba", + "tpo": "Organizace pro obnovu lesů", + "education": "Škola", + "organization": "Společnost", + "profileCreated": "Profil úspěšně vytvořen!", + "profileCreationFailed": "Chyba při vytváření profilu. Zkuste to prosím znovu.", + "profileCreationError": "Chyba při vytváření profilu.", + "edit": "Editovat profil", + "privateAccountTxt": "Váš profil je skrytý a v žebříčku se zobrazuje pouze vaše křestní jméno", + "save": "Uložit", + "profilePicUpdated": "Profilový obrázek se aktualizuje...", + "profileSaved": "Úspěšně uloženo!", + "profileSaveFailed": "Chyba při aktualizaci profilu.", + "changeAccountToPublic": "Přechod na veřejný účet", + "publicAccount": "Veřejný účet", + "accountPrivacyChangeText": "Abyste mohli vytvořit widget profilu, musíte mít veřejný účet. Kliknutím na tlačítko pokračovat změníte nastavení soukromí na veřejné.", + "continue": "Pokračovat", + "cancel": "Zrušit", + "termAndCondition": "Souhlasím s podmínkami platformy Plant-for-the-Planet.", + "termAndConditionError": "Přijměte prosím Smluvní podmínky", + "fieldLabels": { + "profileType": "Já jsem", + "name": "Název {{type}}", + "website": "Webstránka", + "privateAccount": "Soukromý účet", + "subscribe": "Přihlášení k odběru novinek e-mailem" + }, + "validationErrors": { + "nameRequired": "Zadejte prosím jméno", + "websiteInvalid": "Zadejte prosím platnou adresu URL" + } } -} +} \ No newline at end of file diff --git a/public/static/locales/cs/giftfunds.json b/public/static/locales/cs/giftfunds.json index 89b8bbec16..c59f5b5ac4 100644 --- a/public/static/locales/cs/giftfunds.json +++ b/public/static/locales/cs/giftfunds.json @@ -1,7 +1,9 @@ { - "title": "GiftFund", - "description1": "Pokud vidíte tuto stránku, pak máte zůstatek ve vašem GiftFund pro váš aktivní účet PlanetCash vlevo. Zkontrolujte níže uvedené informace.", - "description2": "V případě dotazů kontaktujte svého Key Account Managera.", - "project": "Projekt", - "units": "Dostupné jednotky" + "Giftfunds": { + "title": "GiftFund", + "description1": "Pokud vidíte tuto stránku, pak máte zůstatek ve vašem GiftFund pro váš aktivní účet PlanetCash vlevo. Zkontrolujte níže uvedené informace.", + "description2": "V případě dotazů kontaktujte svého Key Account Managera.", + "project": "Projekt", + "units": "Dostupné jednotky" + } } \ No newline at end of file diff --git a/public/static/locales/cs/leaderboard.json b/public/static/locales/cs/leaderboard.json index 00bb0f9a4e..fc95f900d7 100644 --- a/public/static/locales/cs/leaderboard.json +++ b/public/static/locales/cs/leaderboard.json @@ -1,7 +1,9 @@ { - "forestFrontrunners": "Lesní stromvedoucí", - "mostRecent": "Nejnovější", - "mostTrees": "Nejvíc stromů", - "videoTitle": "A nakonec toto", - "searchUser": "Vyhledat uživatele" + "Leaderboard": { + "forestFrontrunners": "Lesní stromvedoucí", + "mostRecent": "Nejnovější", + "mostTrees": "Nejvíc stromů", + "videoTitle": "A nakonec toto", + "searchUser": "Vyhledat uživatele" + } } \ No newline at end of file diff --git a/public/static/locales/cs/managePayouts.json b/public/static/locales/cs/managePayouts.json index ea77385355..462bd30cdd 100644 --- a/public/static/locales/cs/managePayouts.json +++ b/public/static/locales/cs/managePayouts.json @@ -1,73 +1,75 @@ { - "title": "Správa plateb", - "description": "Udržujte své platební údaje aktualizované (např. rozvrh, bankovní údaje), abyste usnadnili hladký průběh plateb", - "tabPayoutSchedule": "Plán plateb", - "tabAddBankDetails": "Přidat bankovní údaje", - "tabOverview": "Přehled", - "payoutInformation1": "Výplaty jsou zpracovávány automaticky každý rok, nebo když organizace sbírá 30 000 EUR nebo ekvivalent v jiné měně.", - "payoutInformation2": "Výplaty vydává Nadace Plant-for-the-Planet Foundation a její sesterské organizace, např.: Plant-for-the-Planet USA, Plant-for-the-Planet Švýcarsko atd.", - "payoutInformation3": "Pokud splňujete kritéria minimální částky 1 500 EUR, můžete upravit výplatní plán a přijímat časté výplaty.", - "supportInformation": "Pokud máte výjimečný případ, kontaktujte prosím support@plant-for-the-planet.org.", - "scheduleFrequencies": { - "monthly": "Měsíčně", - "quarterly": "Čtvrtletně", - "semiannually": "Půlročně", - "annually": "Ročně", - "manual": "Ruční" - }, - "defaultCurrency": "Výchozí", - "labels": { - "currency": "Měna", - "scheduleFrequency": "Frekvence plateb", - "payoutMinAmount": "Minimální částka výplaty", - "bankName": "Název banky", - "bankAddress": "Adresa banky", - "holderName": "Jméno majitele účtu", - "holderAddress": "Adresa majitele účtu", - "remarks": "Další podrobnosti", - "accountNumber": "IBAN /Číslo účtu", - "routingNumber": "ABA/Směrovací číslo (pouze USA)", - "bic": "BIC/SWIFT", - "branchCode": "Kód pobočky" - }, - "errors": { - "scheduleFrequencyRequired": "Frekvence plateb je povinná", - "payoutMinAmountRequired": "Minimální částka výplaty je povinná", - "payoutMinAmountTooLow": "Minimální částka výplaty by měla být alespoň {{currency}} {{minAmount}}", - "bankNameRequired": "Název banky je povinný.", - "bankAddressRequired": "Adresa banky je povinná.", - "holderNameRequired": "Jméno držitele je povinné.", - "holderAddressRequired": "Adresa držitele je povinná.", - "accountNumberRequired": "Číslo účtu je povinné.", - "bicRequired": "BIC / SWIFT kód je povinný.", - "noAccountFound": "Nebyl načten žádný účet" - }, - "placeholders": { - "payoutMinAmount": "Mělo by být alespoň {{currency}} {{minAmount}}", - "bankName": "např. Century Bank LLC", - "bankAddress": "např. 1 West St, Hamington Way, MA, 10311, USA", - "holderName": "např. John Doe", - "holderAddress": "např. 21 Penn Avenue, MA 10317 USA", - "remarks": "např. Při převodu uveďte ref acct=1237." - }, - "helperText": { - "currency": "Pokud se jedná o standardní bankovní účet, vyberte možnost „Výchozí“. Pokud potřebujete poskytnout zvláštní údaje o měně, vyberte ji zde a uveďte podrobnosti. Pro výplatu použijeme také standardní minimální částky.", - "remarks": "Zde uveďte další podrobnosti, například bankovní údaje zprostředkovatele, počítače (kódy účelu) nebo jiné reference." - }, - "saveButton": "Uložit", - "accountError": { - "min_amount_range": "Minimální částka výplaty musí být alespoň {{currency}} {{min}}.", - "min_amount_forbidden": "Pro výchozí účet nemůžete zadat minimální výši výplaty.", - "account_duplicate": "Již existuje {{currency}} účet.", - "default": "Při vytváření účtu se něco pokazilo. Zkuste to prosím po chvíli." - }, - "accountCreationSuccess": "Údaje o vašem účtu byly úspěšně uloženy.", - "accountUpdationSuccess": "Údaje o vašem účtu byly úspěšně aktualizovány.", - "scheduleSaveSuccess": "Váš plán výplaty byl úspěšně uložen.", - "editAccountButton": "Upravit účet", - "accountTitleText": "Převod pro {{currency}}", - "addBankDetailsButton": "Přidat bankovní údaje", - "noBankAccountText": "Zatím jste nepřidali žádné bankovní údaje.", - "editBankAccountTitle": "Upravit účet", - "minPayoutText": "Min. Výplata: {{amount}}" -} + "ManagePayouts": { + "title": "Správa plateb", + "description": "Udržujte své platební údaje aktualizované (např. rozvrh, bankovní údaje), abyste usnadnili hladký průběh plateb", + "tabPayoutSchedule": "Plán plateb", + "tabAddBankDetails": "Přidat bankovní údaje", + "tabOverview": "Přehled", + "payoutInformation1": "Výplaty jsou zpracovávány automaticky každý rok, nebo když organizace sbírá 30 000 EUR nebo ekvivalent v jiné měně.", + "payoutInformation2": "Výplaty vydává Nadace Plant-for-the-Planet Foundation a její sesterské organizace, např.: Plant-for-the-Planet USA, Plant-for-the-Planet Švýcarsko atd.", + "payoutInformation3": "Pokud splňujete kritéria minimální částky 1 500 EUR, můžete upravit výplatní plán a přijímat časté výplaty.", + "supportInformation": "Pokud máte výjimečný případ, kontaktujte prosím support@plant-for-the-planet.org.", + "scheduleFrequencies": { + "monthly": "Měsíčně", + "quarterly": "Čtvrtletně", + "semiannually": "Půlročně", + "annually": "Ročně", + "manual": "Ruční" + }, + "defaultCurrency": "Výchozí", + "labels": { + "currency": "Měna", + "scheduleFrequency": "Frekvence plateb", + "payoutMinAmount": "Minimální částka výplaty", + "bankName": "Název banky", + "bankAddress": "Adresa banky", + "holderName": "Jméno majitele účtu", + "holderAddress": "Adresa majitele účtu", + "remarks": "Další podrobnosti", + "accountNumber": "IBAN /Číslo účtu", + "routingNumber": "ABA/Směrovací číslo (pouze USA)", + "bic": "BIC/SWIFT", + "branchCode": "Kód pobočky" + }, + "errors": { + "scheduleFrequencyRequired": "Frekvence plateb je povinná", + "payoutMinAmountRequired": "Minimální částka výplaty je povinná", + "payoutMinAmountTooLow": "Minimální částka výplaty by měla být alespoň {{currency}} {{minAmount}}", + "bankNameRequired": "Název banky je povinný.", + "bankAddressRequired": "Adresa banky je povinná.", + "holderNameRequired": "Jméno držitele je povinné.", + "holderAddressRequired": "Adresa držitele je povinná.", + "accountNumberRequired": "Číslo účtu je povinné.", + "bicRequired": "BIC / SWIFT kód je povinný.", + "noAccountFound": "Nebyl načten žádný účet" + }, + "placeholders": { + "payoutMinAmount": "Mělo by být alespoň {{currency}} {{minAmount}}", + "bankName": "např. Century Bank LLC", + "bankAddress": "např. 1 West St, Hamington Way, MA, 10311, USA", + "holderName": "např. John Doe", + "holderAddress": "např. 21 Penn Avenue, MA 10317 USA", + "remarks": "např. Při převodu uveďte ref acct=1237." + }, + "helperText": { + "currency": "Pokud se jedná o standardní bankovní účet, vyberte možnost „Výchozí“. Pokud potřebujete poskytnout zvláštní údaje o měně, vyberte ji zde a uveďte podrobnosti. Pro výplatu použijeme také standardní minimální částky.", + "remarks": "Zde uveďte další podrobnosti, například bankovní údaje zprostředkovatele, počítače (kódy účelu) nebo jiné reference." + }, + "saveButton": "Uložit", + "accountError": { + "min_amount_range": "Minimální částka výplaty musí být alespoň {{currency}} {{min}}.", + "min_amount_forbidden": "Pro výchozí účet nemůžete zadat minimální výši výplaty.", + "account_duplicate": "Již existuje {{currency}} účet.", + "default": "Při vytváření účtu se něco pokazilo. Zkuste to prosím po chvíli." + }, + "accountCreationSuccess": "Údaje o vašem účtu byly úspěšně uloženy.", + "accountUpdationSuccess": "Údaje o vašem účtu byly úspěšně aktualizovány.", + "scheduleSaveSuccess": "Váš plán výplaty byl úspěšně uložen.", + "editAccountButton": "Upravit účet", + "accountTitleText": "Převod pro {{currency}}", + "addBankDetailsButton": "Přidat bankovní údaje", + "noBankAccountText": "Zatím jste nepřidali žádné bankovní údaje.", + "editBankAccountTitle": "Upravit účet", + "minPayoutText": "Min. Výplata: {{amount}}" + } +} \ No newline at end of file diff --git a/public/static/locales/cs/manageProjects.json b/public/static/locales/cs/manageProjects.json index 60be54f3c8..e76bc9b4bc 100644 --- a/public/static/locales/cs/manageProjects.json +++ b/public/static/locales/cs/manageProjects.json @@ -1,189 +1,191 @@ { - "basicDetails": "Základní údaje", - "projectMedia": "Projektová média", - "detailedAnalysis": "Podrobná analýza", - "projectSites": "Projektové stránky", - "projectSpending": "Projektové výdaje", - "protectionStartedIN": "Ochrana začala v", - "review": "Recenze", - "name": "Název projektu", - "nameValidation": "Zadejte prosím název projektu", - "slug": "URL adresa projektu", - "slugValidation": "Zadejte prosím URL adresu projektu", - "classification": "Typ projektu", - "classificationValidation": "Vyberte typ projektu", - "countTarget": "Stromový cíl", - "countTargetValidation": "Zadejte prosím stromový cíl", - "countTargetValidation2": "Stromový cíl by měl být vyšší než 1", - "conservationImpacts": "Dopady na ochranu přírody", - "website": "Webové stránky", - "websiteValidationRequired": "Zadejte prosím URL adresu webové stránky", - "websiteValidationInvalid": "Neplatná URL adresa webové stránky", - "aboutProject": "O projektu", - "aboutProjectValidation": "Zadejte prosím O projektu", - "receiveDonations": "Přijímání darů", - "receiveDonationsInfo": "Po dokončení profilu projektu jej aktivujte. Společnost Plant-for-the-Planet poté profil zkontroluje a bude vás informovat, zda jste způsobilí k získání daru prostřednictvím této platformy. To může trvat několik týdnů.", - "unitCost": "Náklady na jeden strom (v EUR)", - "exit": "Konec na Projekty", - "projectLocation": "Lokace projektu", - "visitorAssistanceLabel": "V případě vyslání recenzenta organizací Plant-for-the-Planet zajistím ubytování, přístup na místo a místní dopravu.", - "publishProject": "Publikovat projekt", - "saveAndContinue": "Uložit a pokračovat", - "skip": "Přeskočit", - "youtubeURL": "Odkaz na video na Youtube", - "youtubeURLValidation": "Neplatný odkaz na Youtube video", - "addCaption": "Přidat titulek", - "yearOfAbandonment": "Přibližný rok opuštění", - "plantingDensity": "Hustota výsadby", - "maxPlantingDensity": "Maximální hustota výsadby (volitelné)", - "employeeCount": "Počet zaměstnanců", - "endangeredSpeciesValidation": "Neplatný input", - "endangeredSpecies": "Ohrožené druhy", - "mainChallenge": "Hlavní výzva", - "whyThisSite": "Proč právě tahle lokace?", - "siteOwner": "Vlastník lokace", - "ownerName": "Jméno vlastníka", - "acquisitionDate": "Datum pořízení", - "yearOfDegradation": "Rok degradace", - "causeOfDegradation": "Příčina degradace", - "longTermPlan": "Dlouhodobý plán pro lokalitu", - "isCertified": "Tento projekt byl certifikován", - "certifierName": "Název certifikátora", - "siteName": "Název lokality", - "spendingYear": "Rok", - "spendingAmount": "Výdaje (v EUR)", - "resetMessage": "Nejprve vyplňte základní údaje", - "uploadPhotos": "Nahrát fotografie", - "dragIn": "nebo je přetáhnete", - "backToBasic": "Zpět na základní údaje", - "projectNotFound": "Projekt nebyl nalezen", - "siteOwnerPrivate": "Soukromé", - "siteOwnerPublic": "Veřejný majetek", - "siteOwnerSmallHolding": "Malý holding", - "siteOwnerCommunal": "Obecní pozemek", - "siteOwnerOwned": "Ve vlastnictví majitele", - "siteOwnerOther": "jiný", - "yearAbandonedInfo": "Kdy došlo k poslednímu významnému zásahu člověka do lokality? Včetně těžby dřeva, zemědělství, pastvy dobytka, vypalování způsobené člověkem.", - "treePerHa": "Stromy na hektar", - "employeesCountInfo": "Ekvivalent 40hodinového pracovního týdne. Tj. dva zaměstnanci na poloviční úvazek se počítají jako jeden.", - "timePeriod": "Časový úsek", - "max300Chars": "Povoleno maximálně 300 znaků", - "longTermPlanInfo": "Jaká opatření jsou zavedena, aby se les dlouhodobě prosperoval? Jak je to financováno? Jaké zdroje budou z webu získány?", - "backToMedia": "Zpět na Projektová média", - "siteStatusPlanting": "Výsadba", - "siteStatusPlanted": "Zasazeno", - "siteStatusBarren": "Neplodný", - "siteStatusReforestation": "Reforestace", - "siteStatusNotYetprotected": "Zatím není chráněno", - "siteStatusPartiallyprotected": "Částečně chráněno", - "siteStatusFullyprotected": "Plně chráněno", - "siteStatus": "Stav lokace", - "selectProjectStatus": "Vyberte Stav lokace", - "saveAndAddSite": "Uložit a přidat další lokaci", - "addSite": "Přidat další lokaci", - "backToAnalysis": "Zpět na podrobnou analýzu", - "spendingYearValidation": "Přidejte prosím rok výdajů", - "spendingAmountValidation": "Zadejte prosím utracenou částku", - "uploadReport": "Nahrát a uložit zprávu", - "dragInPdf": "nebo přetáhněte PDF", - "addAnotherYear": "Přidat další rok", - "backToSites": "Zpět na Projektová lokace", - "certifiedBy": "Certifikováno", - "certificationDateValidation": "Zadejte prosím datum certifikace", - "uploadCertificate": "Nahrát certifikát", - "addCertificate": "Přidat další certifikaci", - "dropGeoJson": "Drop .geojson nebo .kml", - "projectUnderReview": "Váš projekt je v procesu kontroly, prosím počkejte.", - "projectForReview": "Nyní můžete projekt odeslat ke kontrole.", - "backToSpending": "Zpět na výdaje na projekt", - "pendingReview": "Čeká na kontrolu", - "submitForReview": "Odeslat ke kontrole", - "addProject": "Přidat projekt", - "addNewProject": "Přidat nový projekt", - "conservationProject": "Projekt ochrany přírody", - "abandonment": "Spuštění", - "survivalRate": "Míra přežití", - "survivalRateInfo": "Procento stromů, které přežijí první rok výsadby", - "employees": "Zaměstnanci", - "siteOwnership": "Vlastnictví lokace", - "longTermProtection": "Dlouhodobá ochrana", - "externalCertifications": "Externí certifikace", - "projectSpendingFinancial": "Výdaje na finanční projekty", - "issueDate": "Výdaje na finanční projekty", - "acquisitionYear": "Rok akvizice", - "largeScalePlanting": "Výsadba ve velkém měřítku", - "agroforestry": "Agrolesnictví", - "naturalRegeneration": "Přirozená regenerace", - "managedRegeneration": "Řízená regenerace", - "urbanPlanting": "Městská výsadba", - "otherPlanting": "Ostatní výsadba", - "projectType": "Typ projektu", - "protectionSeasons": "Období ochrany", - "polygonRequired": "Polygon je vyžadován", - "fileSizeLimit": "Soubor je větší než 10 mb", - "fileImageOnly": "Typ souboru musí být obrázek", - "filePDFOnly": "Typ souboru musí být PDF", - "acceptedReview": "Změny ve vašem projektu jsou aktivní", - "deniedReview": "Vaše kontrola je zamítnuta", - "saveSite": "Uložit Lokaci", - "latitude": "Zeměpisná šířka", - "longitude": "Zeměpisná délka", - "latitudeRequired": "Zeměpisná šířka je povinná", - "longitudeRequired": "Zeměpisná délka je povinná", - "manageProject": "Správa projektů", - "descriptionForManageProjects": "Předveďte svou restaurátorskou práci za účelem monitorování a získávání darů.", - "manageProjects": "Správa projektů", - "addConservationProjects": "Přidat projekty ochrany", - "areaProtected": "Chráněná oblast (v ha)", - "areaProtectedInfo": "Chcete-li zadat desetinná místa, oddělte je pomocí „.“", - "protectionStartedIn": "Ochrana byla spuštěna v", - "actions": "Akce", - "activitySeasons": "Aktivní sezóny", - "addAnotherSpecies": "Přidat další druhy", - "add": "Přidat", - "forestProtectionType": "Druh/opatření ochrany lesů", - "ecologicalBenefits": "Ekologické přínosy", - "socialBenefits": "Sociální přínosy", - "coBenefits": "Co-Přínosy", - "benefits": "Přínosy", - "tropicalMoistForest": "Tropický vlhký les", - "dry": "Suchý", - "ecosystemType": "Vyberte typ ekosystému", - "tropicalDryForests": "Tropické suché lesy", - "tropicalConiferousForests": "Tropické jehličnaté lesy", - "tropicalGrasslandsForests": "Lesy tropických travních porostů", - "temperateBroadleafForests": "Mírné listnaté lesy", - "temperate-coniferous-forests": "Mírné jehličnaté lesy", - "temperateGrasslandsForests": "Lesy mírného pásma", - "mediterraneanForests": "Středomořské lesy", - "mangroves": "Mangrovy", - "deserts": "Pouště", - "floodedGrasslands": "Zaplavené travní porosty", - "montaneGrasslands": "Horské travní porosty", - "borealForests": "Boreální lesy", - "tundra": "Tundra", - "temperateConiferousForests": "Mírné jehličnaté lesy", - "tenure": "Držení", - "rent": "Nájemné", - "ownershipType": "Typ vlastnictví", - "landOwnershipType": "Typ vlastnictví půdy", - "restorationProject": "Projekt obnovy", - "addProjetDescription": "Od předvedení své práce na platformě Plant-for-the-planet vás dělí jen pár kroků. Důležité: Vytvářejte projekty pouze v angličtině", - "addProjetContact": "Pokud potřebujete pomoc, kontaktujte nás na adrese ", - "supportLink": "support@plant-for-the-planet.org", - "wrongCoordinates": "Špatné souřadnice", - "actionInfo": "Akce, které vaše organizace podniká k ochraně ekosystému.", - "mainChallengeInfo": "Největší výzvou, které tento projekt čelí.", - "motivationInfo": "Motivace k ochraně tohoto specifického ekosystému.", - "hectar": "hektar", - "validation": "{{fieldName}} je neplatný", - "date": "Datum", - "plantingDensityValidation": "Zadejte prosím hustotu výsadby", - "maxPlantingDensityValidation": "Zadejte maximální hustotu výsadby", - "onlyEnglish": "Prosím vytvořte/upravujte projekty pouze v angličtině. Překlady projektů jsou řízeny automaticky společností Plant-for-the-Planet.", - "since": "od", - "Since": "Od", - "and": "a", - "errorForMaxPlantingDensity": "Tato hodnota by měla být větší než hustota výsadby", - "managePayoutsButton": "Správa plateb" + "ManageProjects": { + "basicDetails": "Základní údaje", + "projectMedia": "Projektová média", + "detailedAnalysis": "Podrobná analýza", + "projectSites": "Projektové stránky", + "projectSpending": "Projektové výdaje", + "protectionStartedIN": "Ochrana začala v", + "review": "Recenze", + "name": "Název projektu", + "nameValidation": "Zadejte prosím název projektu", + "slug": "URL adresa projektu", + "slugValidation": "Zadejte prosím URL adresu projektu", + "classification": "Typ projektu", + "classificationValidation": "Vyberte typ projektu", + "countTarget": "Stromový cíl", + "countTargetValidation": "Zadejte prosím stromový cíl", + "countTargetValidation2": "Stromový cíl by měl být vyšší než 1", + "conservationImpacts": "Dopady na ochranu přírody", + "website": "Webové stránky", + "websiteValidationRequired": "Zadejte prosím URL adresu webové stránky", + "websiteValidationInvalid": "Neplatná URL adresa webové stránky", + "aboutProject": "O projektu", + "aboutProjectValidation": "Zadejte prosím O projektu", + "receiveDonations": "Přijímání darů", + "receiveDonationsInfo": "Po dokončení profilu projektu jej aktivujte. Společnost Plant-for-the-Planet poté profil zkontroluje a bude vás informovat, zda jste způsobilí k získání daru prostřednictvím této platformy. To může trvat několik týdnů.", + "unitCost": "Náklady na jeden strom (v EUR)", + "exit": "Konec na Projekty", + "projectLocation": "Lokace projektu", + "visitorAssistanceLabel": "V případě vyslání recenzenta organizací Plant-for-the-Planet zajistím ubytování, přístup na místo a místní dopravu.", + "publishProject": "Publikovat projekt", + "saveAndContinue": "Uložit a pokračovat", + "skip": "Přeskočit", + "youtubeURL": "Odkaz na video na Youtube", + "youtubeURLValidation": "Neplatný odkaz na Youtube video", + "addCaption": "Přidat titulek", + "yearOfAbandonment": "Přibližný rok opuštění", + "plantingDensity": "Hustota výsadby", + "maxPlantingDensity": "Maximální hustota výsadby (volitelné)", + "employeeCount": "Počet zaměstnanců", + "endangeredSpeciesValidation": "Neplatný input", + "endangeredSpecies": "Ohrožené druhy", + "mainChallenge": "Hlavní výzva", + "whyThisSite": "Proč právě tahle lokace?", + "siteOwner": "Vlastník lokace", + "ownerName": "Jméno vlastníka", + "acquisitionDate": "Datum pořízení", + "yearOfDegradation": "Rok degradace", + "causeOfDegradation": "Příčina degradace", + "longTermPlan": "Dlouhodobý plán pro lokalitu", + "isCertified": "Tento projekt byl certifikován", + "certifierName": "Název certifikátora", + "siteName": "Název lokality", + "spendingYear": "Rok", + "spendingAmount": "Výdaje (v EUR)", + "resetMessage": "Nejprve vyplňte základní údaje", + "uploadPhotos": "Nahrát fotografie", + "dragIn": "nebo je přetáhnete", + "backToBasic": "Zpět na základní údaje", + "projectNotFound": "Projekt nebyl nalezen", + "siteOwnerPrivate": "Soukromé", + "siteOwnerPublic": "Veřejný majetek", + "siteOwnerSmallHolding": "Malý holding", + "siteOwnerCommunal": "Obecní pozemek", + "siteOwnerOwned": "Ve vlastnictví majitele", + "siteOwnerOther": "jiný", + "yearAbandonedInfo": "Kdy došlo k poslednímu významnému zásahu člověka do lokality? Včetně těžby dřeva, zemědělství, pastvy dobytka, vypalování způsobené člověkem.", + "treePerHa": "Stromy na hektar", + "employeesCountInfo": "Ekvivalent 40hodinového pracovního týdne. Tj. dva zaměstnanci na poloviční úvazek se počítají jako jeden.", + "timePeriod": "Časový úsek", + "max300Chars": "Povoleno maximálně 300 znaků", + "longTermPlanInfo": "Jaká opatření jsou zavedena, aby se les dlouhodobě prosperoval? Jak je to financováno? Jaké zdroje budou z webu získány?", + "backToMedia": "Zpět na Projektová média", + "siteStatusPlanting": "Výsadba", + "siteStatusPlanted": "Zasazeno", + "siteStatusBarren": "Neplodný", + "siteStatusReforestation": "Reforestace", + "siteStatusNotYetprotected": "Zatím není chráněno", + "siteStatusPartiallyprotected": "Částečně chráněno", + "siteStatusFullyprotected": "Plně chráněno", + "siteStatus": "Stav lokace", + "selectProjectStatus": "Vyberte Stav lokace", + "saveAndAddSite": "Uložit a přidat další lokaci", + "addSite": "Přidat další lokaci", + "backToAnalysis": "Zpět na podrobnou analýzu", + "spendingYearValidation": "Přidejte prosím rok výdajů", + "spendingAmountValidation": "Zadejte prosím utracenou částku", + "uploadReport": "Nahrát a uložit zprávu", + "dragInPdf": "nebo přetáhněte PDF", + "addAnotherYear": "Přidat další rok", + "backToSites": "Zpět na Projektová lokace", + "certifiedBy": "Certifikováno", + "certificationDateValidation": "Zadejte prosím datum certifikace", + "uploadCertificate": "Nahrát certifikát", + "addCertificate": "Přidat další certifikaci", + "dropGeoJson": "Drop .geojson nebo .kml", + "projectUnderReview": "Váš projekt je v procesu kontroly, prosím počkejte.", + "projectForReview": "Nyní můžete projekt odeslat ke kontrole.", + "backToSpending": "Zpět na výdaje na projekt", + "pendingReview": "Čeká na kontrolu", + "submitForReview": "Odeslat ke kontrole", + "addProject": "Přidat projekt", + "addNewProject": "Přidat nový projekt", + "conservationProject": "Projekt ochrany přírody", + "abandonment": "Spuštění", + "survivalRate": "Míra přežití", + "survivalRateInfo": "Procento stromů, které přežijí první rok výsadby", + "employees": "Zaměstnanci", + "siteOwnership": "Vlastnictví lokace", + "longTermProtection": "Dlouhodobá ochrana", + "externalCertifications": "Externí certifikace", + "projectSpendingFinancial": "Výdaje na finanční projekty", + "issueDate": "Výdaje na finanční projekty", + "acquisitionYear": "Rok akvizice", + "largeScalePlanting": "Výsadba ve velkém měřítku", + "agroforestry": "Agrolesnictví", + "naturalRegeneration": "Přirozená regenerace", + "managedRegeneration": "Řízená regenerace", + "urbanPlanting": "Městská výsadba", + "otherPlanting": "Ostatní výsadba", + "projectType": "Typ projektu", + "protectionSeasons": "Období ochrany", + "polygonRequired": "Polygon je vyžadován", + "fileSizeLimit": "Soubor je větší než 10 mb", + "fileImageOnly": "Typ souboru musí být obrázek", + "filePDFOnly": "Typ souboru musí být PDF", + "acceptedReview": "Změny ve vašem projektu jsou aktivní", + "deniedReview": "Vaše kontrola je zamítnuta", + "saveSite": "Uložit Lokaci", + "latitude": "Zeměpisná šířka", + "longitude": "Zeměpisná délka", + "latitudeRequired": "Zeměpisná šířka je povinná", + "longitudeRequired": "Zeměpisná délka je povinná", + "manageProject": "Správa projektů", + "descriptionForManageProjects": "Předveďte svou restaurátorskou práci za účelem monitorování a získávání darů.", + "manageProjects": "Správa projektů", + "addConservationProjects": "Přidat projekty ochrany", + "areaProtected": "Chráněná oblast (v ha)", + "areaProtectedInfo": "Chcete-li zadat desetinná místa, oddělte je pomocí „.“", + "protectionStartedIn": "Ochrana byla spuštěna v", + "actions": "Akce", + "activitySeasons": "Aktivní sezóny", + "addAnotherSpecies": "Přidat další druhy", + "add": "Přidat", + "forestProtectionType": "Druh/opatření ochrany lesů", + "ecologicalBenefits": "Ekologické přínosy", + "socialBenefits": "Sociální přínosy", + "coBenefits": "Co-Přínosy", + "benefits": "Přínosy", + "tropicalMoistForest": "Tropický vlhký les", + "dry": "Suchý", + "ecosystemType": "Vyberte typ ekosystému", + "tropicalDryForests": "Tropické suché lesy", + "tropicalConiferousForests": "Tropické jehličnaté lesy", + "tropicalGrasslandsForests": "Lesy tropických travních porostů", + "temperateBroadleafForests": "Mírné listnaté lesy", + "temperate-coniferous-forests": "Mírné jehličnaté lesy", + "temperateGrasslandsForests": "Lesy mírného pásma", + "mediterraneanForests": "Středomořské lesy", + "mangroves": "Mangrovy", + "deserts": "Pouště", + "floodedGrasslands": "Zaplavené travní porosty", + "montaneGrasslands": "Horské travní porosty", + "borealForests": "Boreální lesy", + "tundra": "Tundra", + "temperateConiferousForests": "Mírné jehličnaté lesy", + "tenure": "Držení", + "rent": "Nájemné", + "ownershipType": "Typ vlastnictví", + "landOwnershipType": "Typ vlastnictví půdy", + "restorationProject": "Projekt obnovy", + "addProjetDescription": "Od předvedení své práce na platformě Plant-for-the-planet vás dělí jen pár kroků. Důležité: Vytvářejte projekty pouze v angličtině", + "addProjetContact": "Pokud potřebujete pomoc, kontaktujte nás na adrese ", + "supportLink": "support@plant-for-the-planet.org", + "wrongCoordinates": "Špatné souřadnice", + "actionInfo": "Akce, které vaše organizace podniká k ochraně ekosystému.", + "mainChallengeInfo": "Největší výzvou, které tento projekt čelí.", + "motivationInfo": "Motivace k ochraně tohoto specifického ekosystému.", + "hectar": "hektar", + "validation": "{{fieldName}} je neplatný", + "date": "Datum", + "plantingDensityValidation": "Zadejte prosím hustotu výsadby", + "maxPlantingDensityValidation": "Zadejte maximální hustotu výsadby", + "onlyEnglish": "Prosím vytvořte/upravujte projekty pouze v angličtině. Překlady projektů jsou řízeny automaticky společností Plant-for-the-Planet.", + "since": "od", + "Since": "Od", + "and": "a", + "errorForMaxPlantingDensity": "Tato hodnota by měla být větší než hustota výsadby", + "managePayoutsButton": "Správa plateb" + } } \ No newline at end of file diff --git a/public/static/locales/cs/maps.json b/public/static/locales/cs/maps.json index fb8444574c..209b27ecb5 100644 --- a/public/static/locales/cs/maps.json +++ b/public/static/locales/cs/maps.json @@ -1,49 +1,51 @@ { - "explore": "Prozkoumat", - "forests": "Aktuální lesy", - "restoration": "Potenciál obnovy", - "deforestation": "Odlesňování", - "planted": "Zasazeno", - "projects": "Projekty", - "3trilliontrees": "Na světě jsou dnes asi 3 biliony stromů („Lesy“). A prostor až na další bilion („Potenciál opětovného zalesňování“).", - "high": "Vysoký", - "low": "Nízky", - "forestInfo": "V současné době celosvětově existuje 3,04 bilionu stromů. Namísto šesti bilionů stromů, které na planetě byly, než jsme začali kácet lesy před asi 11 tisíci lety.", - "restorationInfo": "Půl miliardy hektarů je vhodných pro rozsáhlou obnovu uzavřených lesů. Dalších jedna a půl miliardy hektarů je nejlepší pro mozaikovou výsadbu, která kombinuje lesy a například zemedělství či osídlení.", - "location": "Lokace", - "timeTravel": "Cestování v čase", - "vegetationChange": "Změna vegetace", - "beta": "BETA", - "baseLayer": "Základní vrstva a vektorové mapy", - "satelliteImagery": "Satelitní snímky", - "fieldData": "Terénní údaje", - "trees": "Stromy", - "ha": "ha", - "plantingDate": "Datum výsadby", - "plantingDensity": "Hustota výsadby", - "speciesPlanted": "Vysázené druhy", - "sampleTrees": "Vzorky stromů", - "meterHigh": "m - výška", - "cmWide": "cm - šířka", - "treesPerHa": "stromy na ha", - "sampleTree": "Vzorek stromu", - "scientificName": "Vědecký název", - "measurements": "Míry", - "treeTag": "Tag stromu", - "1Tree": "1 Strom", - "plot": "Parcela", - "tag": "Štítek", - "plantingDensityInfo": "Při obohacení může být hustota výsadby nižší.", - "plantationDensityFormula": "Hustota výsadby = počet stromů/Oblast výsadby", - "unknown": "Neznámý", - "showWholeArea": "Zobrazit celou oblast", - "daysAgo": "{{days}} dní zpět", - "today": "Dnes", - "yesterday": "Včera", - "clickForDetails": "Kliknutím zobrazíte podrobnosti", - "treeMapper": "TreeMapper", - "showProjectList": "Zobrazit seznam projektů", - "showProjectDetails": "Zobrazit podrobnosti projektu", - "hideProjectList": "Skrýt seznam projektů", - "hideProjectDetails": "Skrýt detaily projektu" + "Maps": { + "explore": "Prozkoumat", + "forests": "Aktuální lesy", + "restoration": "Potenciál obnovy", + "deforestation": "Odlesňování", + "planted": "Zasazeno", + "projects": "Projekty", + "3trilliontrees": "Na světě jsou dnes asi 3 biliony stromů („Lesy“). A prostor až na další bilion („Potenciál opětovného zalesňování“).", + "high": "Vysoký", + "low": "Nízky", + "forestInfo": "V současné době celosvětově existuje 3,04 bilionu stromů. Namísto šesti bilionů stromů, které na planetě byly, než jsme začali kácet lesy před asi 11 tisíci lety.", + "restorationInfo": "Půl miliardy hektarů je vhodných pro rozsáhlou obnovu uzavřených lesů. Dalších jedna a půl miliardy hektarů je nejlepší pro mozaikovou výsadbu, která kombinuje lesy a například zemedělství či osídlení.", + "location": "Lokace", + "timeTravel": "Cestování v čase", + "vegetationChange": "Změna vegetace", + "beta": "BETA", + "baseLayer": "Základní vrstva a vektorové mapy", + "satelliteImagery": "Satelitní snímky", + "fieldData": "Terénní údaje", + "trees": "Stromy", + "ha": "ha", + "plantingDate": "Datum výsadby", + "plantingDensity": "Hustota výsadby", + "speciesPlanted": "Vysázené druhy", + "sampleTrees": "Vzorky stromů", + "meterHigh": "m - výška", + "cmWide": "cm - šířka", + "treesPerHa": "stromy na ha", + "sampleTree": "Vzorek stromu", + "scientificName": "Vědecký název", + "measurements": "Míry", + "treeTag": "Tag stromu", + "1Tree": "1 Strom", + "plot": "Parcela", + "tag": "Štítek", + "plantingDensityInfo": "Při obohacení může být hustota výsadby nižší.", + "plantationDensityFormula": "Hustota výsadby = počet stromů/Oblast výsadby", + "unknown": "Neznámý", + "showWholeArea": "Zobrazit celou oblast", + "daysAgo": "{{days}} dní zpět", + "today": "Dnes", + "yesterday": "Včera", + "clickForDetails": "Kliknutím zobrazíte podrobnosti", + "treeMapper": "TreeMapper", + "showProjectList": "Zobrazit seznam projektů", + "showProjectDetails": "Zobrazit podrobnosti projektu", + "hideProjectList": "Skrýt seznam projektů", + "hideProjectDetails": "Skrýt detaily projektu" + } } \ No newline at end of file diff --git a/public/static/locales/cs/me.json b/public/static/locales/cs/me.json index f773b4852c..14fdde3142 100644 --- a/public/static/locales/cs/me.json +++ b/public/static/locales/cs/me.json @@ -1,265 +1,267 @@ { - "managePayouts": { - "menuText": "Správa výplat", - "titleOverview": "Správa výplat - přehled", - "titleAddBankDetails": "Správa výplat - přidání bankovních údajů", - "titlePayoutSchedule": "Správa výplat - Plánování výplat", - "titleEditBankDetails": "Správa výplat - Úprava bankovních údajů" - }, - "donationLinkTitle": "Vytvořit odkaz pro darování", - "planetcash": { - "menuText": "PlanetCash", - "submenuText": "Moje PlanetCash", - "titleAccount": "PlanetCash - Účty", - "titleTransactions": "PlanetCash - Transakce", - "titleCreateAccount": "PlanetCash - Vytvořit účet" - }, - "bulkCodesTitleStep3": "Generování hromadných kódů - Kódy vydání", - "bulkCodesTitleStep2": "Generování hromadných kódů - vyberte projekt", - "bulkCodesTitle": "Generování hromadných kódů - vyberte metodu", - "bulkCodes": "Hromadné kódy", - "target": "Cíl", - "share": "Podíl", - "registerTrees": "Registrace stromů", - "registerTreesDescription": "Zaregistrujte stromy, které jste sami vysadili, např. na své zahradě.", - "redeem": "Vykoupit", - "myForest": "Můj les", - "giftToGiftee": "Dárek pro {{gifteeName}}", - "settingManageProject": "Správa projektů", - "deleteAccount": "Odstranit účet", - "userTree": "Registrace stromů", - "accountHistory": "Historie účtu", - "logout": "Odhlásit se", - "close": "Zavřít", - "support": "Podpora", - "addTarget": "Přidat cíl", - "noOfTrees": "Kolik stromů?", - "datePlanted": "Datum výsadby", - "speciesIsRequired": "Druh stromu je povinen", - "treeSpecies": "Druhy stromů", - "drawPolygon": "Nakreslete prosím oblast, kde jste stromy vysadili. Po dokončení znovu klikněte na první místo.", - "selectLocation": "Vyberte prosím místo výsadby na mapě.", - "registerButton": "Registrace", - "startDrawing": "Začít kreslit", - "save": "Uložit", - "treesRequired": "Počet stromů je povinný", - "wentWrong": "Něco se pokazilo. Kontaktujte prosím support@plant-for-the-planet.org", - "locationMissing": "Vyberte místo na mapě", - "uploadPhotos": "Nahrajte fotografie", - "dragHere": "nebo přetáhněte sem", - "contribNotFound": "Příspěvek nebyl nalezen", - "errorOccured": "Vyskytla se chyba", - "contribSuccess": "Úspěšně přidán {{treeCount}} {{treeSpecies}} 🌳 z {{plantDate}}", - "moreThanOne": "1 strom je minimum", - "registered": "Registrováno", - "receivedTrees": "Přijaté stromy", - "receivedFrom": "Přijato od{{name}}", - "redeemedTrees": "Vykoupené stromy", - "myAccount": "Můj účet", - "all": "Vše", - "noRecords": "Žádné záznamy", - "filters": "Filtry", - "registeredTrees": "Registrované stromy", - "embedWidget": "Vytvořit widget", - "donationLink": "Vytvořit odkaz pro darování", - "tree-donation": "Darování stromů", - "tree-gift": "Stromový dárek", - "tree-cash": "TreeCash", - "planet-cash": "PlanetCash", - "trees": "Stromy", - "amount": "Částka", - "created": "Datum vytvoření", - "paymentMethod": "Způsob platby", - "frequency": "Frekvence", - "monthly": "Měsíčně", - "yearly": "Ročně", - "totalDonated": "Celková darovaná částka", - "firstDonation": "Datum prvního daru", - "donorNameRequired": "Jméno dárce je povinné", - "donationAmountRequired": "Výše daru je povinná", - "frequencyRequired": "Frekvence je povinná", - "project": "Název projektu", - "planetCashPayment": "Platba PlanetCash", - "method": "Způsob platby", - "treeCount": "Počet stromů", - "lastUpdate": "Poslední aktualizace", - "donorCertificate": "Dárcovský certifikát ", - "editDonation": "Upravit dar", - "pauseDonation": "Pozastavit dar", - "cancelDonation": "Zrušit dar", - "reactivateDonation": "Znovu aktivovat dar", - "resumeDonation": "Obnovit dar", - "donationName": "Název daru", - "donationAmount": "Výše daru", - "makeChanges": "Udělej změny", - "cancel": "Zrušit", - "yes": "Ano", - "no": "Ne", - "editDonationConfirmation": "Upravit dar", - "editDonationDescription": "Můžete upravit následující možnosti:", - "pauseDonationConfirmation": "Pozastavit dar", - "pauseDonationDescription": "Po pozastavení jej můžete znovu spustit restartováním.", - "pauseUntilResume": "Pozastavit, dokud neobnovím dar", - "pausedUntilResumed": "Pozastaveno, dokud nebude obnoveno", - "pausedUntil": "Pozastaveno do", - "pauseUntilDate": "Pozastavit do vybraného data", - "reactivateDonationConfirmation": "Znovu aktivovat dar", - "reactivateDonationDescription": "Váš dar bude znovu aktivován a bude vytvořen k datu{{currentPeriodEnds}}", - "cancelDonationConfirmation": "Zrušit dar", - "cancelDonationDescription": "Jakmile je dar zrušen, nelze jej restartovat.", - "cancelDonationPaypalDescription": "Tento dar bude okamžitě zrušen, nelze jej restartovat.", - "cancelledOn": "Zrušeno dne", - "willBeCancelledOn": "Bude zrušeno dne", - "nextOn": "Další na", - "download": "Ke stažení", - "donations": "Dary", - "in-progress": "Probíhá", - "donation-in-progress": "Probíhá", - "donation-tree-cash": "TreeCash", - "donation-success": "Úspěšné", - "cancelled": "Zrušeno", - "card": "Karta", - "sepa": "SEPA", - "success": "Úspěšné", - "paid": "Úspěšné", - "initiated": "Iniciováno", - "failed": "Neúspěšný", - "pending": "čeká na", - "refunded": "Vráceno", - "referred": "Odkázáno", - "in-dispute": "Ve sporu", - "dispute-lost": "Ztracený spor", - "nameForest": "Les jménem {{name}}", - "taxReceipt": "Daňový doklad", - "history": "Historie", - "recurrency": "Opakované dary", - "new": "Nový", - "beta": "Beta", - "date": "Datum", - "treemapper": "TreeMapper", - "register-trees": "Registrace stromů", - "manage-projects": "Správa projektů", - "app-payouts": "Výplaty aplikací", - "app-payout-open": "Otevřené výplaty", - "app-payout-pending": "Čekající výplaty", - "app-payout-assigned": "Přiřazené výplaty", - "app-payout-complete": "Ukončené výplaty", - "app-payout": "Výplaty aplikací", - "reference": "Odkaz", - "fee": "Poplatek", - "net": "NET", - "status": "Stav", - "paymentDate": "Datum platby", - "bankName": "Název banky", - "accountHolder": "Držitel účtu", - "aba": "ABA", - "bic": "BIC", - "iban": "IBAN", - "swift": "SWIFT", - "isDefault": "Výchozí účet", - "bankAccountCreated": "Vytvořený bankovní účet", - "bankAccountUpdated": "Aktualizace bankovního účtu", - "donation-all": "Dary", - "donation-canceled": "Zrušeno", - "payout-all": "Výplaty", - "payout-action-required": "Vyžaduje se akce", - "payout-pending": "čeká na", - "payout-completed": "Dokončeno", - "donorName": "Jméno dárce", - "paidAmount": "Uhrazená částka", - "projectGuid": "Projekt GUID", - "totalAmount": "Celková částka", - "disputeFee": "Poplatek za spor", - "planetFee": "Poplatek Plant-for-the-Planet", - "transactionFee": "Transakční poplatek", - "transferFee": "Poplatek za převod", - "giftComment": "Komentář (soukromý)", - "giftOccasion": "Příležitost", - "open": "Otevřít", - "downloads": "Ke stažení", - "account": "Účet", - "loadMore": "Načíst více", - "setTarget": "Nastavit cíl", - "targetSave": "Uložit", - "targetErrorMessage": "Číslo musí být větší než nula", - "taxDeductibleReceipt": "Doklad pro daňové uznání", - "giftCertificate": "Dárkový certifikát", - "downloadCodes": "Kódy ke stažení", - "downloadCodesGeneralError": "Stahování selhalo. Zkuste to prosím znovu po nějaké době.", - "downloadCodesNetworkError": "Nelze načíst kódy. Zkontrolujte prosím své internetové připojení.", - "paypal-paypal": "Paypal", - "stripe-": "Stripe", - "unknown-method": "Neznámý", - "stripe-sofort": "Sofort (Stripe)", - "tree-cash-tree-cash": "TreeCash", - "planet-cash-planet-cash": "PlanetCash", - "stripe-card": "Kreditní/debetní karta", - "stripe-giropay": "GiroPay (Stripe)", - "action-required": "Vyžaduje se akce", - "completed": "Dokončeno", - "donationsSubTitle": "Spravujte všechny své dary a platby z jednoho místa.", - "recurrencySubTitle": "Spravujte všechny své opakované dary z jednoho místa.", - "payments": "Platby", - "stripe-sepa_debit": "SEPA (Stripe)", - "sepa_debit": "SEPA (Stripe)", - "offline": "Offline", - "offline-offline": "Offline", - "profile": "Profil", - "projects": "Projekty", - "settings": "Nastavení", - "editProfile": "Editovat profil", - "deleteProfile": "Smazat profil", - "widgets": "Widgety", - "pauseNote": "Poznámka: Můžete vybrat datum, které je za koncem aktuálního období.", - "cancelImmediately": "Okamžitě zrušit", - "cancelOnSelectedDate": "Vyberte datum zrušení", - "conservation-donation": "Dary na ochranu přírody", - "funds-donation": "Dar", - "bouquet-donation": "Darování skupiny", - "transferDetails": "Podrobnosti o převodu", - "beneficiary": "Příjemce", - "donationNote": { - "offline-offline": "Bankovní převody k nám obvykle dorazí za 1-5 pracovních dní. Jakmile převod dorazí, zašleme vám potvrzující e-mail s účtenkami (a certifikátem).", - "stripe-sepa_debit": "Platby SEPA trvají 2-14 pracovních dnů (obvykle 3-5 dnů). Jakmile váš převod dorazí, zašleme vám potvrzující e-mail s účtenkami (a certifikátem).", - "stripe-sofort": "Platby SOFORT trvají 2-14 pracovních dnů (obvykle 2-3 dny). Jakmile váš převod dorazí, zašleme vám potvrzující e-mail s účtenkami (a certifikátem).", - "in-dispute": "Váš převod byl zpochybněn. Poskytovatelé platebních služeb obvykle účtují poplatek za spor ve výši 7-15,00 USD. Podrobnosti získáte na adrese support@plant-for-the-planet.org." - }, - "active": "Aktivní", - "canceled": "Zrušeno", - "incomplete": "čeká na", - "incomplete_expired": "Zrušeno", - "past_due": "po splatnosti", - "unpaid": "nezaplaceno", - "trialing": "Aktivní", - "paused": "pozastaveno", - "plantLocations": "Lokace výsadby", - "mySpecies": "Můj druh stromu", - "import": "Import", - "pausingDonation": "Pozastavení darování", - "cancellingDonation": "Zrušení darování", - "reactivatingDonation": "Reaktivace darování", - "editingDonation": "Úprava daru", - "noteToWait": "Poznámka: Aktualizace opakovaného daru zabere 5-10 minut", - "apiKey": "Klíč API", - "apiKeyMessage1": "Klíč API je něco jako digitální heslo, které vám umožňuje vystupovat jako váš profil v jakékoli aplikaci. Umožňuje také aplikacím darovat vaším jménem, používat službu PlanetCash a zobrazovat transakce.", - "apiKeyMessage2": "Po vygenerování klíče API budeme pro přihlášení vyžadovat dvoufaktorové ověření. To budete moci nastavit při příštím přihlášení.", - "apiKeyMessage3": "Obnovení klíče API okamžitě zruší platnost vašeho stávajícího klíče API.", - "regenerateKey": "Obnovení klíče", - "giftFund": "GiftFund", - "dataExplorer": "Průzkumník dat", - "switchUser": "Vydávat se za uživatele", - "switchUserMessage": "Do pole níže zadejte e-mail uživatele, na kterého chcete přepnout.", - "profileEmail": "Profilový email", - "supportPin": "Podpůrný PIN", - "alphaNumeric": "Zadejte čtyřmístný alfanumerický kód", - "switch": "Jednat za", - "targetUser": "V současné době jednáte za {{impersonatedEmail}}", - "exitImpersonation": "Skončit jednání za ", - "enterTheEmail": "Zadejte e-mail cílového uživatele", - "enterSupportPin": "Zadejte pin podpory cílového uživatele", - "invalidEmail": "Zadejte prosím platné e-mailové ID", - "wrongEntered": "Emailové ID nebo PIN podpory je nesprávné !!", - "donatedTrees": "Darované stromy", - "resetPin": "Obnovit PIN", - "document": "Dokumentace platformy (CZ)" -} + "Me": { + "managePayouts": { + "menuText": "Správa výplat", + "titleOverview": "Správa výplat - přehled", + "titleAddBankDetails": "Správa výplat - přidání bankovních údajů", + "titlePayoutSchedule": "Správa výplat - Plánování výplat", + "titleEditBankDetails": "Správa výplat - Úprava bankovních údajů" + }, + "donationLinkTitle": "Vytvořit odkaz pro darování", + "planetcash": { + "menuText": "PlanetCash", + "submenuText": "Moje PlanetCash", + "titleAccount": "PlanetCash - Účty", + "titleTransactions": "PlanetCash - Transakce", + "titleCreateAccount": "PlanetCash - Vytvořit účet" + }, + "bulkCodesTitleStep3": "Generování hromadných kódů - Kódy vydání", + "bulkCodesTitleStep2": "Generování hromadných kódů - vyberte projekt", + "bulkCodesTitle": "Generování hromadných kódů - vyberte metodu", + "bulkCodes": "Hromadné kódy", + "target": "Cíl", + "share": "Podíl", + "registerTrees": "Registrace stromů", + "registerTreesDescription": "Zaregistrujte stromy, které jste sami vysadili, např. na své zahradě.", + "redeem": "Vykoupit", + "myForest": "Můj les", + "giftToGiftee": "Dárek pro {{gifteeName}}", + "settingManageProject": "Správa projektů", + "deleteAccount": "Odstranit účet", + "userTree": "Registrace stromů", + "accountHistory": "Historie účtu", + "logout": "Odhlásit se", + "close": "Zavřít", + "support": "Podpora", + "addTarget": "Přidat cíl", + "noOfTrees": "Kolik stromů?", + "datePlanted": "Datum výsadby", + "speciesIsRequired": "Druh stromu je povinen", + "treeSpecies": "Druhy stromů", + "drawPolygon": "Nakreslete prosím oblast, kde jste stromy vysadili. Po dokončení znovu klikněte na první místo.", + "selectLocation": "Vyberte prosím místo výsadby na mapě.", + "registerButton": "Registrace", + "startDrawing": "Začít kreslit", + "save": "Uložit", + "treesRequired": "Počet stromů je povinný", + "wentWrong": "Něco se pokazilo. Kontaktujte prosím support@plant-for-the-planet.org", + "locationMissing": "Vyberte místo na mapě", + "uploadPhotos": "Nahrajte fotografie", + "dragHere": "nebo přetáhněte sem", + "contribNotFound": "Příspěvek nebyl nalezen", + "errorOccured": "Vyskytla se chyba", + "contribSuccess": "Úspěšně přidán {{treeCount}} {{treeSpecies}} 🌳 z {{plantDate}}", + "moreThanOne": "1 strom je minimum", + "registered": "Registrováno", + "receivedTrees": "Přijaté stromy", + "receivedFrom": "Přijato od{{name}}", + "redeemedTrees": "Vykoupené stromy", + "myAccount": "Můj účet", + "all": "Vše", + "noRecords": "Žádné záznamy", + "filters": "Filtry", + "registeredTrees": "Registrované stromy", + "embedWidget": "Vytvořit widget", + "donationLink": "Vytvořit odkaz pro darování", + "tree-donation": "Darování stromů", + "tree-gift": "Stromový dárek", + "tree-cash": "TreeCash", + "planet-cash": "PlanetCash", + "trees": "Stromy", + "amount": "Částka", + "created": "Datum vytvoření", + "paymentMethod": "Způsob platby", + "frequency": "Frekvence", + "monthly": "Měsíčně", + "yearly": "Ročně", + "totalDonated": "Celková darovaná částka", + "firstDonation": "Datum prvního daru", + "donorNameRequired": "Jméno dárce je povinné", + "donationAmountRequired": "Výše daru je povinná", + "frequencyRequired": "Frekvence je povinná", + "project": "Název projektu", + "planetCashPayment": "Platba PlanetCash", + "method": "Způsob platby", + "treeCount": "Počet stromů", + "lastUpdate": "Poslední aktualizace", + "donorCertificate": "Dárcovský certifikát ", + "editDonation": "Upravit dar", + "pauseDonation": "Pozastavit dar", + "cancelDonation": "Zrušit dar", + "reactivateDonation": "Znovu aktivovat dar", + "resumeDonation": "Obnovit dar", + "donationName": "Název daru", + "donationAmount": "Výše daru", + "makeChanges": "Udělej změny", + "cancel": "Zrušit", + "yes": "Ano", + "no": "Ne", + "editDonationConfirmation": "Upravit dar", + "editDonationDescription": "Můžete upravit následující možnosti:", + "pauseDonationConfirmation": "Pozastavit dar", + "pauseDonationDescription": "Po pozastavení jej můžete znovu spustit restartováním.", + "pauseUntilResume": "Pozastavit, dokud neobnovím dar", + "pausedUntilResumed": "Pozastaveno, dokud nebude obnoveno", + "pausedUntil": "Pozastaveno do", + "pauseUntilDate": "Pozastavit do vybraného data", + "reactivateDonationConfirmation": "Znovu aktivovat dar", + "reactivateDonationDescription": "Váš dar bude znovu aktivován a bude vytvořen k datu{{currentPeriodEnds}}", + "cancelDonationConfirmation": "Zrušit dar", + "cancelDonationDescription": "Jakmile je dar zrušen, nelze jej restartovat.", + "cancelDonationPaypalDescription": "Tento dar bude okamžitě zrušen, nelze jej restartovat.", + "cancelledOn": "Zrušeno dne", + "willBeCancelledOn": "Bude zrušeno dne", + "nextOn": "Další na", + "download": "Ke stažení", + "donations": "Dary", + "in-progress": "Probíhá", + "donation-in-progress": "Probíhá", + "donation-tree-cash": "TreeCash", + "donation-success": "Úspěšné", + "cancelled": "Zrušeno", + "card": "Karta", + "sepa": "SEPA", + "success": "Úspěšné", + "paid": "Úspěšné", + "initiated": "Iniciováno", + "failed": "Neúspěšný", + "pending": "čeká na", + "refunded": "Vráceno", + "referred": "Odkázáno", + "in-dispute": "Ve sporu", + "dispute-lost": "Ztracený spor", + "nameForest": "Les jménem {{name}}", + "taxReceipt": "Daňový doklad", + "history": "Historie", + "recurrency": "Opakované dary", + "new": "Nový", + "beta": "Beta", + "date": "Datum", + "treemapper": "TreeMapper", + "register-trees": "Registrace stromů", + "manage-projects": "Správa projektů", + "app-payouts": "Výplaty aplikací", + "app-payout-open": "Otevřené výplaty", + "app-payout-pending": "Čekající výplaty", + "app-payout-assigned": "Přiřazené výplaty", + "app-payout-complete": "Ukončené výplaty", + "app-payout": "Výplaty aplikací", + "reference": "Odkaz", + "fee": "Poplatek", + "net": "NET", + "status": "Stav", + "paymentDate": "Datum platby", + "bankName": "Název banky", + "accountHolder": "Držitel účtu", + "aba": "ABA", + "bic": "BIC", + "iban": "IBAN", + "swift": "SWIFT", + "isDefault": "Výchozí účet", + "bankAccountCreated": "Vytvořený bankovní účet", + "bankAccountUpdated": "Aktualizace bankovního účtu", + "donation-all": "Dary", + "donation-canceled": "Zrušeno", + "payout-all": "Výplaty", + "payout-action-required": "Vyžaduje se akce", + "payout-pending": "čeká na", + "payout-completed": "Dokončeno", + "donorName": "Jméno dárce", + "paidAmount": "Uhrazená částka", + "projectGuid": "Projekt GUID", + "totalAmount": "Celková částka", + "disputeFee": "Poplatek za spor", + "planetFee": "Poplatek Plant-for-the-Planet", + "transactionFee": "Transakční poplatek", + "transferFee": "Poplatek za převod", + "giftComment": "Komentář (soukromý)", + "giftOccasion": "Příležitost", + "open": "Otevřít", + "downloads": "Ke stažení", + "account": "Účet", + "loadMore": "Načíst více", + "setTarget": "Nastavit cíl", + "targetSave": "Uložit", + "targetErrorMessage": "Číslo musí být větší než nula", + "taxDeductibleReceipt": "Doklad pro daňové uznání", + "giftCertificate": "Dárkový certifikát", + "downloadCodes": "Kódy ke stažení", + "downloadCodesGeneralError": "Stahování selhalo. Zkuste to prosím znovu po nějaké době.", + "downloadCodesNetworkError": "Nelze načíst kódy. Zkontrolujte prosím své internetové připojení.", + "paypal-paypal": "Paypal", + "stripe-": "Stripe", + "unknown-method": "Neznámý", + "stripe-sofort": "Sofort (Stripe)", + "tree-cash-tree-cash": "TreeCash", + "planet-cash-planet-cash": "PlanetCash", + "stripe-card": "Kreditní/debetní karta", + "stripe-giropay": "GiroPay (Stripe)", + "action-required": "Vyžaduje se akce", + "completed": "Dokončeno", + "donationsSubTitle": "Spravujte všechny své dary a platby z jednoho místa.", + "recurrencySubTitle": "Spravujte všechny své opakované dary z jednoho místa.", + "payments": "Platby", + "stripe-sepa_debit": "SEPA (Stripe)", + "sepa_debit": "SEPA (Stripe)", + "offline": "Offline", + "offline-offline": "Offline", + "profile": "Profil", + "projects": "Projekty", + "settings": "Nastavení", + "editProfile": "Editovat profil", + "deleteProfile": "Smazat profil", + "widgets": "Widgety", + "pauseNote": "Poznámka: Můžete vybrat datum, které je za koncem aktuálního období.", + "cancelImmediately": "Okamžitě zrušit", + "cancelOnSelectedDate": "Vyberte datum zrušení", + "conservation-donation": "Dary na ochranu přírody", + "funds-donation": "Dar", + "bouquet-donation": "Darování skupiny", + "transferDetails": "Podrobnosti o převodu", + "beneficiary": "Příjemce", + "donationNote": { + "offline-offline": "Bankovní převody k nám obvykle dorazí za 1-5 pracovních dní. Jakmile převod dorazí, zašleme vám potvrzující e-mail s účtenkami (a certifikátem).", + "stripe-sepa_debit": "Platby SEPA trvají 2-14 pracovních dnů (obvykle 3-5 dnů). Jakmile váš převod dorazí, zašleme vám potvrzující e-mail s účtenkami (a certifikátem).", + "stripe-sofort": "Platby SOFORT trvají 2-14 pracovních dnů (obvykle 2-3 dny). Jakmile váš převod dorazí, zašleme vám potvrzující e-mail s účtenkami (a certifikátem).", + "in-dispute": "Váš převod byl zpochybněn. Poskytovatelé platebních služeb obvykle účtují poplatek za spor ve výši 7-15,00 USD. Podrobnosti získáte na adrese support@plant-for-the-planet.org." + }, + "active": "Aktivní", + "canceled": "Zrušeno", + "incomplete": "čeká na", + "incomplete_expired": "Zrušeno", + "past_due": "po splatnosti", + "unpaid": "nezaplaceno", + "trialing": "Aktivní", + "paused": "pozastaveno", + "plantLocations": "Lokace výsadby", + "mySpecies": "Můj druh stromu", + "import": "Import", + "pausingDonation": "Pozastavení darování", + "cancellingDonation": "Zrušení darování", + "reactivatingDonation": "Reaktivace darování", + "editingDonation": "Úprava daru", + "noteToWait": "Poznámka: Aktualizace opakovaného daru zabere 5-10 minut", + "apiKey": "Klíč API", + "apiKeyMessage1": "Klíč API je něco jako digitální heslo, které vám umožňuje vystupovat jako váš profil v jakékoli aplikaci. Umožňuje také aplikacím darovat vaším jménem, používat službu PlanetCash a zobrazovat transakce.", + "apiKeyMessage2": "Po vygenerování klíče API budeme pro přihlášení vyžadovat dvoufaktorové ověření. To budete moci nastavit při příštím přihlášení.", + "apiKeyMessage3": "Obnovení klíče API okamžitě zruší platnost vašeho stávajícího klíče API.", + "regenerateKey": "Obnovení klíče", + "giftFund": "GiftFund", + "dataExplorer": "Průzkumník dat", + "switchUser": "Vydávat se za uživatele", + "switchUserMessage": "Do pole níže zadejte e-mail uživatele, na kterého chcete přepnout.", + "profileEmail": "Profilový email", + "supportPin": "Podpůrný PIN", + "alphaNumeric": "Zadejte čtyřmístný alfanumerický kód", + "switch": "Jednat za", + "targetUser": "V současné době jednáte za {{impersonatedEmail}}", + "exitImpersonation": "Skončit jednání za ", + "enterTheEmail": "Zadejte e-mail cílového uživatele", + "enterSupportPin": "Zadejte pin podpory cílového uživatele", + "invalidEmail": "Zadejte prosím platné e-mailové ID", + "wrongEntered": "Emailové ID nebo PIN podpory je nesprávné !!", + "donatedTrees": "Darované stromy", + "resetPin": "Obnovit PIN", + "document": "Dokumentace platformy (CZ)" + } +} \ No newline at end of file diff --git a/public/static/locales/cs/planet.json b/public/static/locales/cs/planet.json index 34f6174ab4..06a454e2a4 100644 --- a/public/static/locales/cs/planet.json +++ b/public/static/locales/cs/planet.json @@ -1,14 +1,16 @@ { - "treesDonated": "Darované stromy od spuštění platformy (2019)", - "plantedByTPO": "Zasazeno {{projects}} + zúčastněnými projekty", - "plantedGlobally": "Od roku 2006 jsou nám hlášeny stromy", - "forestLoss": "Čistá ztráta stromu za rok", - "estimateOf": "Odhad roční ztráty stromů", - "globallySince": "Počet stromů samostatně nahlášených do kampaně Billion Tree Campaign (později kampaň Trillion Tree Campaign) od jejího založení UNEP v roce 2006", - "restoreTrees": "Jak obnovíme bilion stromů?", - "watchVideo": "Sledovat video", - "selectProjects": "Jak vybíráme projekty", - "learnMore": "Přečtěte si více", - "treesDonatedDescription": "Všechny dary stromů zpracované společností Plant-for-the-Planet od roku 2019. Zahrnuje stromy darované přímo prostřednictvím našich aplikací, stejně jako velké soukromé a firemní dary. Všechny tyto dary nešly na projekty přímo řízené Plant-for-the-Planet, ale všechny zúčastněné restaurátorské organizace. Některé darované stromy ještě nemusí být vysazeny.", - "treesPlantedDescription": "Všechny stromy darované prostřednictvím Plant-for-the-Planet a další stromy nahlášené jako vysazené zúčastněnými restaurátorskými organizacemi." + "Planet": { + "treesDonated": "Darované stromy od spuštění platformy (2019)", + "plantedByTPO": "Zasazeno {{projects}} + zúčastněnými projekty", + "plantedGlobally": "Od roku 2006 jsou nám hlášeny stromy", + "forestLoss": "Čistá ztráta stromu za rok", + "estimateOf": "Odhad roční ztráty stromů", + "globallySince": "Počet stromů samostatně nahlášených do kampaně Billion Tree Campaign (později kampaň Trillion Tree Campaign) od jejího založení UNEP v roce 2006", + "restoreTrees": "Jak obnovíme bilion stromů?", + "watchVideo": "Sledovat video", + "selectProjects": "Jak vybíráme projekty", + "learnMore": "Přečtěte si více", + "treesDonatedDescription": "Všechny dary stromů zpracované společností Plant-for-the-Planet od roku 2019. Zahrnuje stromy darované přímo prostřednictvím našich aplikací, stejně jako velké soukromé a firemní dary. Všechny tyto dary nešly na projekty přímo řízené Plant-for-the-Planet, ale všechny zúčastněné restaurátorské organizace. Některé darované stromy ještě nemusí být vysazeny.", + "treesPlantedDescription": "Všechny stromy darované prostřednictvím Plant-for-the-Planet a další stromy nahlášené jako vysazené zúčastněnými restaurátorskými organizacemi." + } } \ No newline at end of file diff --git a/public/static/locales/cs/planetcash.json b/public/static/locales/cs/planetcash.json index 663f5eac0a..b816e16ce5 100644 --- a/public/static/locales/cs/planetcash.json +++ b/public/static/locales/cs/planetcash.json @@ -1,32 +1,34 @@ { - "title": "PlanetCash", - "partnerSignupInfo": "Použití této funkce společnostmi podléhá partnerství s Plant-for-the-Planet. Pro podrobnosti kontaktujte prosím partner@plant-for-the-planet.org.", - "description": "PlanetCash je vývojářský nástroj, který rozšiřuje platformu Plant-for-the-Planet o API a vestavěné nástroje. Zůstatek PlanetCash je příspěvkem do Plant-for-the-Planet, který může dárce věnovat různým projektům na platformě.", - "termsText": "Zobrazit smluvní podmínky.", - "learnMoreText": "Další informace o PlanetCash.", - "tabAccounts": "Účty", - "tabCreateAccount": "Vytvořit účet", - "tabTransactions": "Transakce", - "accountTitleText": "{{currency}} PlanetCash účet ({{country}})", - "createAccountTitleText": "Zaregistrujte se do PlanetCash", - "addBalanceButton": "Přidat zůstatek", - "labelAccountHolder": "Držitel účtu", - "labelBalance": "Zůstatek", - "labelCreditLimit": "Limit", - "deactivateAccountButton": "Deaktivovat", - "activateAccountButton": "Aktivovat", - "accountInactiveHelpText": "Tento účet je neaktivní a nelze jej použít k vytváření příspěvků. Chcete-li aktivovat tento účet, kontaktujte prosím support@plant-for-the-planet.org.", - "noAccountsText": "Zdá se, že jste si ještě nevytvořili účet PlanetCash.", - "createPlanetCashButton": "Vytvořit účet PlanetCash", - "accountQuotaReachedText": "Nemůžete vytvářet další účty, protože jste vyčerpali kvótu účtu.", - "accountCreationSuccess": "Váš účet PlanetCash byl úspěšně vytvořen", - "labelCountry": "Země", - "planetCashTerms1": "Kliknutím na „Vytvořit účet PlanetCash“ souhlasím s podmínkami Plant-for-the-Planet a PlanetCash.", - "planetCashTerms2": "Rozumím tomu, že dary PlanetCash jsou nevratné a nepřidělené platby budou automaticky přiděleny projektům na platformě po šesti měsících od platby.", - "planetCashTerms3": "Dary na účet PlanetCash z osobních důvodů jsou obecně odečitatelné z daní v zemi vybrané v tomto kroku. Komerční využití PlanetCash nemusí být způsobilé pro daňové odpočty. Máte-li dotazy, kontaktujte prosím support@plant-for-the-planet.org nebo svého daňového poradce.", - "accountError": { - "active_account_exists": "Aktivní účet již existuje. Deaktivujte tento účet před aktivací jiného účtu.", - "duplicate_account": "Již jste vytvořili účet pro {{country}}", - "default": "Při vytváření účtu se něco pokazilo. Zkuste to prosím o chvíli." + "Planetcash": { + "title": "PlanetCash", + "partnerSignupInfo": "Použití této funkce společnostmi podléhá partnerství s Plant-for-the-Planet. Pro podrobnosti kontaktujte prosím partner@plant-for-the-planet.org.", + "description": "PlanetCash je vývojářský nástroj, který rozšiřuje platformu Plant-for-the-Planet o API a vestavěné nástroje. Zůstatek PlanetCash je příspěvkem do Plant-for-the-Planet, který může dárce věnovat různým projektům na platformě.", + "termsText": "Zobrazit smluvní podmínky.", + "learnMoreText": "Další informace o PlanetCash.", + "tabAccounts": "Účty", + "tabCreateAccount": "Vytvořit účet", + "tabTransactions": "Transakce", + "accountTitleText": "{{currency}} PlanetCash účet ({{country}})", + "createAccountTitleText": "Zaregistrujte se do PlanetCash", + "addBalanceButton": "Přidat zůstatek", + "labelAccountHolder": "Držitel účtu", + "labelBalance": "Zůstatek", + "labelCreditLimit": "Limit", + "deactivateAccountButton": "Deaktivovat", + "activateAccountButton": "Aktivovat", + "accountInactiveHelpText": "Tento účet je neaktivní a nelze jej použít k vytváření příspěvků. Chcete-li aktivovat tento účet, kontaktujte prosím support@plant-for-the-planet.org.", + "noAccountsText": "Zdá se, že jste si ještě nevytvořili účet PlanetCash.", + "createPlanetCashButton": "Vytvořit účet PlanetCash", + "accountQuotaReachedText": "Nemůžete vytvářet další účty, protože jste vyčerpali kvótu účtu.", + "accountCreationSuccess": "Váš účet PlanetCash byl úspěšně vytvořen", + "labelCountry": "Země", + "planetCashTerms1": "Kliknutím na „Vytvořit účet PlanetCash“ souhlasím s podmínkami Plant-for-the-Planet a PlanetCash.", + "planetCashTerms2": "Rozumím tomu, že dary PlanetCash jsou nevratné a nepřidělené platby budou automaticky přiděleny projektům na platformě po šesti měsících od platby.", + "planetCashTerms3": "Dary na účet PlanetCash z osobních důvodů jsou obecně odečitatelné z daní v zemi vybrané v tomto kroku. Komerční využití PlanetCash nemusí být způsobilé pro daňové odpočty. Máte-li dotazy, kontaktujte prosím support@plant-for-the-planet.org nebo svého daňového poradce.", + "accountError": { + "active_account_exists": "Aktivní účet již existuje. Deaktivujte tento účet před aktivací jiného účtu.", + "duplicate_account": "Již jste vytvořili účet pro {{country}}", + "default": "Při vytváření účtu se něco pokazilo. Zkuste to prosím o chvíli." + } } -} +} \ No newline at end of file diff --git a/public/static/locales/cs/redeem.json b/public/static/locales/cs/redeem.json index 493072fc60..dcd09ccf10 100644 --- a/public/static/locales/cs/redeem.json +++ b/public/static/locales/cs/redeem.json @@ -1,16 +1,18 @@ { - "congratulations": "Gratulujeme!", - "addToMyTrees": "Přidat do mých stromů", - "validateCode": "Ověřit kód", - "enterRedeemCode": "Zadejte prosím kód, který chcete uplatnit", - "validating": "Ověřování", - "invalidType": "Neplatný typ, prosím zkontrolujte odkaz znovu", - "redeeming": "Uplatnění:", - "invalidCode": "Tento kód je neplatný.", - "alreadyRedeemed": "Kód již byl uplatněn", - "redeemCode": "Použít kód", - "redeem": "Uplatnit", - "redeemDescription": "Uplatněte svůj stromový poukaz a další kódy.", - "successfullyRedeemed": "Úspěšně uplatněn", - "redeemAnotherCode": "Uplatnit jiný kód" + "Redeem": { + "congratulations": "Gratulujeme!", + "addToMyTrees": "Přidat do mých stromů", + "validateCode": "Ověřit kód", + "enterRedeemCode": "Zadejte prosím kód, který chcete uplatnit", + "validating": "Ověřování", + "invalidType": "Neplatný typ, prosím zkontrolujte odkaz znovu", + "redeeming": "Uplatnění:", + "invalidCode": "Tento kód je neplatný.", + "alreadyRedeemed": "Kód již byl uplatněn", + "redeemCode": "Použít kód", + "redeem": "Uplatnit", + "redeemDescription": "Uplatněte svůj stromový poukaz a další kódy.", + "successfullyRedeemed": "Úspěšně uplatněn", + "redeemAnotherCode": "Uplatnit jiný kód" + } } \ No newline at end of file diff --git a/public/static/locales/cs/registerTrees.json b/public/static/locales/cs/registerTrees.json index d0a542594d..235f56baee 100644 --- a/public/static/locales/cs/registerTrees.json +++ b/public/static/locales/cs/registerTrees.json @@ -1,11 +1,13 @@ { - "selectLocationMap": "Vyberte lokaci na mapě", - "requiredNumberOfTrees": "Počet stromů je povinný", - "numberOfTrees": "Počet stromů", - "datePlanted": "Datum vysazení", - "treeSpecies": "Druhy stromů", - "speciesRequired": "Druh je povinný", - "drawPolygonMap": "Nakreslete polygon na mapě", - "clickMapMark": "Kliknutím na mapu označíte lokaci", - "next": "Další" + "RegisterTrees": { + "selectLocationMap": "Vyberte lokaci na mapě", + "requiredNumberOfTrees": "Počet stromů je povinný", + "numberOfTrees": "Počet stromů", + "datePlanted": "Datum vysazení", + "treeSpecies": "Druhy stromů", + "speciesRequired": "Druh je povinný", + "drawPolygonMap": "Nakreslete polygon na mapě", + "clickMapMark": "Kliknutím na mapu označíte lokaci", + "next": "Další" + } } \ No newline at end of file diff --git a/public/static/locales/cs/tenants.json b/public/static/locales/cs/tenants.json index 39ea28875a..2561cc371a 100644 --- a/public/static/locales/cs/tenants.json +++ b/public/static/locales/cs/tenants.json @@ -1,51 +1,53 @@ { - "nitrosb": { - "title": "Zasadit stromy s Nitro Snowboards", - "description": "Nitro Snowboards si klade za cíl podporovat a mobilizovat ochranu, obnovu a růst lesa." - }, - "energizer": { - "title": "Energizer ❤️ Baeume", - "description": "Pro nás je „dělat správnou věc“ ústředním vůdčím principem, podle kterého přizpůsobujeme naše jednání. Od první bezrtuťové baterie v roce 1989 jsme byli schopni naše baterie neustále vylepšovat, aby byly odolnější, a tudíž šetrnější k životnímu prostředí. Naše partnerství s Plant-for-the-Planet navazuje na tuto tradici ochrany životního prostředí a podpory větší udržitelnosti. Společně sázíme stromy a pořádáme vzdělávací programy pro děti a mladé lidi, abychom zvýšili povědomí o globální spravedlnosti a klimatické krizi. Chceme také zapojit naše spotřebitele a maloobchodníky, protože tuto ústřední výzvu naší doby lze vyřešit pouze společně. Jdeš do toho?" - }, - "senatDerWirtschaft": { - "title": "Ekonomický senát", - "description": "Klimatická krize je jednou z největších společenských výzev a něco se musí změnit. Ekonomický senát je společenství hodnot. Stojíme za motivující a spojující vizi spojenou s praktickou realizací. Proto stále více našich členů vysazuje lesy spolu se svými zaměstnanci, obchodními partnery a zákazníky. Každý zasazený strom váže CO2 a dává nám drahocenný čas. Tento čas využijeme k masivnímu snížení emisí CO2. Slíbeno!" - }, - "pampers": { - "title": "Pampers ❤️ Wald", - "descriptionTitle": "Výsadba stromů pro udržitelnější budoucnost", - "description": "Společně s vámi chceme přispět k lepší budoucnosti našich nejmenších. Proto pracujeme s dětskou a mládežnickou organizací Plant-for-the-Planet na skvělém projektu: Pampers Forest. Za každé prodané balení plen Pampers věnujeme organizaci Plant-for-the-Planet 0,01 EUR/CHF a celkem až 100 000 EUR. Náš cíl: vysadit 60 000 stromů pro udržitelné znovuzalesňování. Na mapě můžete vidět, kde se projekt realizuje. Podívejte se nyní a pomozte." - }, - "interactClub": { - "title": "Interakce Club Wald", - "description": "Sázení stromů je generačně propojující a mírotvorný projekt, který nám lidem, zejména mladým lidem, dává naději a odvahu. Potřebujeme odvahu, abychom v této klimatické krizi odvážně společně řešili řešení. Naším cílem jako dětí, teenagerů a mladých dospělých je mobilizovat svět k vysazení 1 000 miliard stromů, aby nám tyto stromy poskytly cenný čas, přibližně 15 let, který bychom rozhodně měli využít ke snížení emisí CO2. Obnova lesů v celosvětovém měřítku se tak může stát největším ekonomickým stimulačním programem, zejména pro země globálního Jihu. Polovina půdy, na které můžeme vysadit dalších 1000 miliard stromů, je v Africe, zbytek v Latinské Americe a jihovýchodní Asii, tedy v zemích, které jsou klimatickou krizí zasaženy nejvíce. Tyto stromy vytvářejí pracovní místa, jsou dobré pro biodiverzitu a vážou skleníkový plyn CO2. Nová oblast, na kterou se Rotariánská rodina zaměřuje, je: Životní prostředí. Teď začínáme přispívat. Sázejte s námi stromy." - }, - "culchacandela": { - "title": "Culcha Candela X Plant-for-the-Planet", - "description": "

Wir pflanzen Bäume für ein besseres Weltklima, um uns tak wichtige Zeit im Wettlauf gegen die Klimakrise zu verschaffen. Pflanz' hier mit!
... und beim Hören des neuen „ Hamma (INVCTS &Dorfkind J-P Remix) “ na streamování hudebních platforem.
Wir spenden die kompletten Streaming Einnahmen des Songs an Plant-for-the-Planet! Poháněno hudba pro přírodu !

" - }, - "lacoqueta": { - "title": "Zasadit stromy s La Coqueta", - "description": "Vidět, jak její vlastní děti vyrůstají a stále více se zajímají o klimatickou krizi, inspirovalo Celii k tomu, aby využila svou značku jako platformu pro pozitivní změnu. Poté, co se dozvěděli, že stromy jsou nejekonomičtějším a nejúčinnějším prostředkem vázání CO2, což umožňuje více času na snížení emisí skleníkových plynů na nulu a zmírnění klimatické krize, rozhodli se vydat na tuto vzrušující cestu s Plant-for-the-Planet. Můžete se také stát součástí této cesty a darovat některé stromy - v Granadě, rodné město Celia, nebo jiné oblasti po celém světě." - }, - "xiting": { - "title": "Sázení stromů — Pro zelenou budoucnost", - "description": "S touto platformou, my v Xitingu bychom rádi poskytli našim partnerům, zákazníky, a příznivci příležitost rychle a snadno zasadit stromy, a tak se připojit k našemu závazku k ochraně klimatu. Jsme přesvědčeni, že ochrana klimatu má smysl pouze tehdy, pokud ji podporuje široká veřejnost a společně pracujeme na udržitelné a zelené budoucnosti. Stromy jsou ideálním a nejpřirozenějším prostředkem k tomu, filtrování CO2 ze vzduchu. Rostlina s námi teď! Od roku 2019 společnost Xiting úspěšně sleduje cíl působit jako společnost 100% CO2 neutrální. Najdete vhled do našeho závazku i stávajících klimatických partnerství tady ." - }, - "ulmpflanzt": { - "title": "Ulm sází stromy", - "description": "124 781 stromů – jeden pro každého občana Ulmu. To je cílem „Ulm sází stromy“ – klimatické iniciativy Plant-for-the-Planet, unw (Ulmer Initiative Group for Sustainable Economic Development e. V.), ulmských společností pervormance international, Trivis a Volksbank Ulm stejně jako město Ulm a místní agenda ulm 21. Zasaďte s námi a pomozte realizovat největší projekt zalesňování v historii lidstva. Pro vás – a pro nás všechny!" - }, - "sitex": { - "title": "Sitex ❤️ Wald", - "description": "Záchrana klimatu je celosvětovým úkolem a lze jej dosáhnout pouze tehdy, budeme-li všichni spolupracovat. Chceme našim dětem a vnoučatům zanechat neporušenou planetu. To je důvod, proč podporujeme Plant-for-the-Planet a metodu sázení stromů, abychom vázali co nejvíce CO² z atmosféry. Náš příspěvek pro skupinu Sitex: do roku 2027 vysadíme minimálně 500 000 stromů." - }, - "3pleset": { - "title": "Alife & Kickin ❤️ Bäume", - "description": "

#WEAREALIFE překlep? Ne, schválně!
V souladu s heslem CHOOSE LIFE je řada na vás.
Protože od této chvíle můžete sázet stromy a žít s Alife & Kickin a organizací Plant-for- planeta dát dárek. Vytvořte s námi Alife & Kickin Forest. Jak?
Ke každé online objednávce zasadíme strom pomocí Plant-for-the-Planet v příštích 2 měsících. Náš cíl: 50 000 stromů pro udržitelné znovuzalesňování. Kde?
Na mapě můžete vidět, kde se realizuje náš Alife & Kickin Forest. Sledujte nyní, pomozte a dejte ještě více života. VYBERTE SI ŽIVOT.
JEDEN OBJEDNÁVKA JEDEN STROM.
#WEAREALIFE

" - }, - "weareams": { - "title": "AMS ❤️ Stromy", - "description": "Od roku 2021 se AMS připojuje k TrillionTreeCampaign a společně s Plant-for-the-Planet začneme vracet přírodě. Využijeme příležitosti, které získáváme, k podpoře udržitelnosti v našem dodavatelském řetězci a prostřednictvím našich vztahů s klienty a obchodními partnery. Připojte se k nám a #StopTalkingStartPlanting!" + "Tenants": { + "nitrosb": { + "title": "Zasadit stromy s Nitro Snowboards", + "description": "Nitro Snowboards si klade za cíl podporovat a mobilizovat ochranu, obnovu a růst lesa." + }, + "energizer": { + "title": "Energizer ❤️ Baeume", + "description": "Pro nás je „dělat správnou věc“ ústředním vůdčím principem, podle kterého přizpůsobujeme naše jednání. Od první bezrtuťové baterie v roce 1989 jsme byli schopni naše baterie neustále vylepšovat, aby byly odolnější, a tudíž šetrnější k životnímu prostředí. Naše partnerství s Plant-for-the-Planet navazuje na tuto tradici ochrany životního prostředí a podpory větší udržitelnosti. Společně sázíme stromy a pořádáme vzdělávací programy pro děti a mladé lidi, abychom zvýšili povědomí o globální spravedlnosti a klimatické krizi. Chceme také zapojit naše spotřebitele a maloobchodníky, protože tuto ústřední výzvu naší doby lze vyřešit pouze společně. Jdeš do toho?" + }, + "senatDerWirtschaft": { + "title": "Ekonomický senát", + "description": "Klimatická krize je jednou z největších společenských výzev a něco se musí změnit. Ekonomický senát je společenství hodnot. Stojíme za motivující a spojující vizi spojenou s praktickou realizací. Proto stále více našich členů vysazuje lesy spolu se svými zaměstnanci, obchodními partnery a zákazníky. Každý zasazený strom váže CO2 a dává nám drahocenný čas. Tento čas využijeme k masivnímu snížení emisí CO2. Slíbeno!" + }, + "pampers": { + "title": "Pampers ❤️ Wald", + "descriptionTitle": "Výsadba stromů pro udržitelnější budoucnost", + "description": "Společně s vámi chceme přispět k lepší budoucnosti našich nejmenších. Proto pracujeme s dětskou a mládežnickou organizací Plant-for-the-Planet na skvělém projektu: Pampers Forest. Za každé prodané balení plen Pampers věnujeme organizaci Plant-for-the-Planet 0,01 EUR/CHF a celkem až 100 000 EUR. Náš cíl: vysadit 60 000 stromů pro udržitelné znovuzalesňování. Na mapě můžete vidět, kde se projekt realizuje. Podívejte se nyní a pomozte." + }, + "interactClub": { + "title": "Interakce Club Wald", + "description": "Sázení stromů je generačně propojující a mírotvorný projekt, který nám lidem, zejména mladým lidem, dává naději a odvahu. Potřebujeme odvahu, abychom v této klimatické krizi odvážně společně řešili řešení. Naším cílem jako dětí, teenagerů a mladých dospělých je mobilizovat svět k vysazení 1 000 miliard stromů, aby nám tyto stromy poskytly cenný čas, přibližně 15 let, který bychom rozhodně měli využít ke snížení emisí CO2. Obnova lesů v celosvětovém měřítku se tak může stát největším ekonomickým stimulačním programem, zejména pro země globálního Jihu. Polovina půdy, na které můžeme vysadit dalších 1000 miliard stromů, je v Africe, zbytek v Latinské Americe a jihovýchodní Asii, tedy v zemích, které jsou klimatickou krizí zasaženy nejvíce. Tyto stromy vytvářejí pracovní místa, jsou dobré pro biodiverzitu a vážou skleníkový plyn CO2. Nová oblast, na kterou se Rotariánská rodina zaměřuje, je: Životní prostředí. Teď začínáme přispívat. Sázejte s námi stromy." + }, + "culchacandela": { + "title": "Culcha Candela X Plant-for-the-Planet", + "description": "

Wir pflanzen Bäume für ein besseres Weltklima, um uns tak wichtige Zeit im Wettlauf gegen die Klimakrise zu verschaffen. Pflanz' hier mit!
... und beim Hören des neuen „ Hamma (INVCTS &Dorfkind J-P Remix) “ na streamování hudebních platforem.
Wir spenden die kompletten Streaming Einnahmen des Songs an Plant-for-the-Planet! Poháněno hudba pro přírodu !

" + }, + "lacoqueta": { + "title": "Zasadit stromy s La Coqueta", + "description": "Vidět, jak její vlastní děti vyrůstají a stále více se zajímají o klimatickou krizi, inspirovalo Celii k tomu, aby využila svou značku jako platformu pro pozitivní změnu. Poté, co se dozvěděli, že stromy jsou nejekonomičtějším a nejúčinnějším prostředkem vázání CO2, což umožňuje více času na snížení emisí skleníkových plynů na nulu a zmírnění klimatické krize, rozhodli se vydat na tuto vzrušující cestu s Plant-for-the-Planet. Můžete se také stát součástí této cesty a darovat některé stromy - v Granadě, rodné město Celia, nebo jiné oblasti po celém světě." + }, + "xiting": { + "title": "Sázení stromů — Pro zelenou budoucnost", + "description": "S touto platformou, my v Xitingu bychom rádi poskytli našim partnerům, zákazníky, a příznivci příležitost rychle a snadno zasadit stromy, a tak se připojit k našemu závazku k ochraně klimatu. Jsme přesvědčeni, že ochrana klimatu má smysl pouze tehdy, pokud ji podporuje široká veřejnost a společně pracujeme na udržitelné a zelené budoucnosti. Stromy jsou ideálním a nejpřirozenějším prostředkem k tomu, filtrování CO2 ze vzduchu. Rostlina s námi teď! Od roku 2019 společnost Xiting úspěšně sleduje cíl působit jako společnost 100% CO2 neutrální. Najdete vhled do našeho závazku i stávajících klimatických partnerství tady ." + }, + "ulmpflanzt": { + "title": "Ulm sází stromy", + "description": "124 781 stromů – jeden pro každého občana Ulmu. To je cílem „Ulm sází stromy“ – klimatické iniciativy Plant-for-the-Planet, unw (Ulmer Initiative Group for Sustainable Economic Development e. V.), ulmských společností pervormance international, Trivis a Volksbank Ulm stejně jako město Ulm a místní agenda ulm 21. Zasaďte s námi a pomozte realizovat největší projekt zalesňování v historii lidstva. Pro vás – a pro nás všechny!" + }, + "sitex": { + "title": "Sitex ❤️ Wald", + "description": "Záchrana klimatu je celosvětovým úkolem a lze jej dosáhnout pouze tehdy, budeme-li všichni spolupracovat. Chceme našim dětem a vnoučatům zanechat neporušenou planetu. To je důvod, proč podporujeme Plant-for-the-Planet a metodu sázení stromů, abychom vázali co nejvíce CO² z atmosféry. Náš příspěvek pro skupinu Sitex: do roku 2027 vysadíme minimálně 500 000 stromů." + }, + "3pleset": { + "title": "Alife & Kickin ❤️ Bäume", + "description": "

#WEAREALIFE překlep? Ne, schválně!
V souladu s heslem CHOOSE LIFE je řada na vás.
Protože od této chvíle můžete sázet stromy a žít s Alife & Kickin a organizací Plant-for- planeta dát dárek. Vytvořte s námi Alife & Kickin Forest. Jak?
Ke každé online objednávce zasadíme strom pomocí Plant-for-the-Planet v příštích 2 měsících. Náš cíl: 50 000 stromů pro udržitelné znovuzalesňování. Kde?
Na mapě můžete vidět, kde se realizuje náš Alife & Kickin Forest. Sledujte nyní, pomozte a dejte ještě více života. VYBERTE SI ŽIVOT.
JEDEN OBJEDNÁVKA JEDEN STROM.
#WEAREALIFE

" + }, + "weareams": { + "title": "AMS ❤️ Stromy", + "description": "Od roku 2021 se AMS připojuje k TrillionTreeCampaign a společně s Plant-for-the-Planet začneme vracet přírodě. Využijeme příležitosti, které získáváme, k podpoře udržitelnosti v našem dodavatelském řetězci a prostřednictvím našich vztahů s klienty a obchodními partnery. Připojte se k nám a #StopTalkingStartPlanting!" + } } } \ No newline at end of file diff --git a/public/static/locales/cs/treemapper.json b/public/static/locales/cs/treemapper.json index fee9f16bfa..ce0bba4709 100644 --- a/public/static/locales/cs/treemapper.json +++ b/public/static/locales/cs/treemapper.json @@ -1,66 +1,68 @@ { - "trees": "Stromy", - "tree": " strom", - "on": "na", - "partial": "Částečný", - "complete": "Kompletní", - "on-site": "Na místě", - "off-site": "mimo místa", - "captureMode": "Režim snímání", - "captureStatus": "Stav zachycení", - "coordinates": "Souřadnice", - "guid": "GUID", - "height": "Výška", - "width": "Šířka", - "plantDate": "Datum rostlin", - "registrationDate": "Datum registrace", - "plantProject": "Projekt rostlin", - "species": "Druhy", - "sampleTrees": "Vzorky stromů", - "loadMore": "Načíst více", - "treeMapper": "TreeMapper", - "cm": "cm", - "m": "m", - "plantingLocation": "Místo výsadby", - "reviewAndSubmit": "Zkontrolovat a odeslat", - "sampleTree": "Vzorek stromu # {{number}}", - "import": "Importovat", - "editor": "Editor", - "draw": "Kreslit", - "addAnotherSpecies": "Přidat další druh", - "continue": "Pokračovat", - "downloadCSVTemplate": "Stáhněte si šablonu CSV", - "treeTag": "Tag stromu", - "diameter": "Průměr", - "latitude": "Zeměpisná šířka", - "longitude": "Zeměpisná délka", - "addAnotherSampleTree": "Přidejte další vzorový strom", - "skip": "Přeskočit", - "treeSpecies": "Druhy stromů", - "plantingDate": "Datum výsadby", - "summary": "Shrnutí", - "reviewSubmitDescription": "Zkontrolujte data, která jste právě nahráli, a odešlete je TreeMapper.", - "submittedSuccess": "Úspěšně odesláno", - "submittedSuccessDescription": "Vaše stromy byly odeslány do TreeMapper. Můžete si je zobrazit ve vašich místach sázení nebo v aplikaci TreeMapper.", - "myPlantLocations": "Moje místa sázení", - "submitted": "Odesláno", - "projectRequired": "Projekt je vyžadován", - "geoJsonError": "Nepodporovaný formát GeoJSON/KML", - "atLeastOneSpeciesRequired": "Vyžaduje se alespoň jeden druh", - "treesRequired": "Vyžaduje se počet stromů", - "count": "Počet", - "addSampleTree": "Přidat ukázkový strom", - "uploadFile": "Nahrát soubor", - "fileFormatKML": "Soubor (geojson/kml)", - "importData": "Importovat data", - "importExplanation": "Zde můžete importovat data TreeMapper, která budou označena jako „externí“ (ne „off-site“, pro to prosím použijte aplikaci). Pro souřadnice míst sázení přijímáme *.kml nebo geojson, pro (volitelné) vzorky stromů*.csv (šablona je uvedena v kroku 2).", - "downloadExplanation": "Stáhněte si následující šablonu CSV a importujte vzorová data stromu v určeném formátu. K úpravě souboru použijte jednoduchý editor. Druhý a třetí řádek jsou podrobnosti o formátování a příklad a musí být odstraněny.", - "importCSV": "Importovat CSV", - "fileFormatCSV": "Soubor (csv)", - "aliases": "Aliasy", - "aliasesValidation": "Zadejte prosím aliasy", - "speciesValidation": "Zadejte prosím druh", - "external": "Vnější", - "date": "Datum", - "measurements": "Měření" + "Treemapper": { + "trees": "Stromy", + "tree": " strom", + "on": "na", + "partial": "Částečný", + "complete": "Kompletní", + "on-site": "Na místě", + "off-site": "mimo místa", + "captureMode": "Režim snímání", + "captureStatus": "Stav zachycení", + "coordinates": "Souřadnice", + "guid": "GUID", + "height": "Výška", + "width": "Šířka", + "plantDate": "Datum rostlin", + "registrationDate": "Datum registrace", + "plantProject": "Projekt rostlin", + "species": "Druhy", + "sampleTrees": "Vzorky stromů", + "loadMore": "Načíst více", + "treeMapper": "TreeMapper", + "cm": "cm", + "m": "m", + "plantingLocation": "Místo výsadby", + "reviewAndSubmit": "Zkontrolovat a odeslat", + "sampleTree": "Vzorek stromu # {{number}}", + "import": "Importovat", + "editor": "Editor", + "draw": "Kreslit", + "addAnotherSpecies": "Přidat další druh", + "continue": "Pokračovat", + "downloadCSVTemplate": "Stáhněte si šablonu CSV", + "treeTag": "Tag stromu", + "diameter": "Průměr", + "latitude": "Zeměpisná šířka", + "longitude": "Zeměpisná délka", + "addAnotherSampleTree": "Přidejte další vzorový strom", + "skip": "Přeskočit", + "treeSpecies": "Druhy stromů", + "plantingDate": "Datum výsadby", + "summary": "Shrnutí", + "reviewSubmitDescription": "Zkontrolujte data, která jste právě nahráli, a odešlete je TreeMapper.", + "submittedSuccess": "Úspěšně odesláno", + "submittedSuccessDescription": "Vaše stromy byly odeslány do TreeMapper. Můžete si je zobrazit ve vašich místach sázení nebo v aplikaci TreeMapper.", + "myPlantLocations": "Moje místa sázení", + "submitted": "Odesláno", + "projectRequired": "Projekt je vyžadován", + "geoJsonError": "Nepodporovaný formát GeoJSON/KML", + "atLeastOneSpeciesRequired": "Vyžaduje se alespoň jeden druh", + "treesRequired": "Vyžaduje se počet stromů", + "count": "Počet", + "addSampleTree": "Přidat ukázkový strom", + "uploadFile": "Nahrát soubor", + "fileFormatKML": "Soubor (geojson/kml)", + "importData": "Importovat data", + "importExplanation": "Zde můžete importovat data TreeMapper, která budou označena jako „externí“ (ne „off-site“, pro to prosím použijte aplikaci). Pro souřadnice míst sázení přijímáme *.kml nebo geojson, pro (volitelné) vzorky stromů*.csv (šablona je uvedena v kroku 2).", + "downloadExplanation": "Stáhněte si následující šablonu CSV a importujte vzorová data stromu v určeném formátu. K úpravě souboru použijte jednoduchý editor. Druhý a třetí řádek jsou podrobnosti o formátování a příklad a musí být odstraněny.", + "importCSV": "Importovat CSV", + "fileFormatCSV": "Soubor (csv)", + "aliases": "Aliasy", + "aliasesValidation": "Zadejte prosím aliasy", + "speciesValidation": "Zadejte prosím druh", + "external": "Vnější", + "date": "Datum", + "measurements": "Měření" + } } \ No newline at end of file diff --git a/public/static/locales/cs/treemapperAnalytics.json b/public/static/locales/cs/treemapperAnalytics.json index 9998d775f7..24658c148b 100644 --- a/public/static/locales/cs/treemapperAnalytics.json +++ b/public/static/locales/cs/treemapperAnalytics.json @@ -1,57 +1,59 @@ { - "title": "Průzkumník dat", - "from": "Z", - "to": "Na", - "clearFilter": "Vymazat filtr", - "days": "Dny", - "months": "Měsíce", - "weeks": "Týdny", - "years": "Roky", - "treesPlanted": "Zasazené stromy", - "speciesPlanted": "Vysázené druhy", - "calenderWeek": "CW", - "project": "Projekt", - "export": "Exportovat", - "exportData": "Export dat", - "jan": "Leden", - "feb": "Únor", - "mar": "Březen", - "apr": "Duben", - "may": "Květen", - "jun": "Červen", - "jul": "Červenec", - "aug": "Srpen", - "sep": "Září", - "oct": "Říjen", - "nov": "Listopad", - "dec": "Prosinec", - "exportColumnHeaders": { - "hid": "Lidsky čitelné ID pro místo sázení", - "plantDate": "Datum vysazení", - "species": "Název vysazeného druhu", - "geometry": "GeoJson Souřadnice polygonu", - "type": "Typ místa sázení (jeden, více)", - "treesPlanted": "Celkový počet stromů na míste sázení", - "metadata": "Metadata umístění místa sázení", - "plantProjectId": "Backend ID projektu, jehož je umístění místa sázení součástí", - "sampleTreeCount": "Počet vzorků stromů přítomných na místě sázení", - "captureStatus": "Zachytit Stav umístění místa sázení.", - "created": "Časové razítko vytvoření" - }, - "readme": "PŘEČTI SI MĚ", - "interventionData": "Intervenční údaje", - "monitoringPlotsData": "Monitorování dat pozemků", - "dataIntervals": "Datové intervaly", - "errors": { - "emptyExportData": "Data nejsou k dispozici pro zadaný interval. Zkuste prosím jiný časový rozsah nebo zkontrolujte, zda byly zaznamenány údaje za dané období." - }, - "timeFrame": "Časový rámec", - "scientificName": "Vědecký název", - "type": "Typ", - "interventions": "Intervence", - "monitoringPlots": "Monitorování pozemků (Již brzy...)", - "trillion": "t", - "billion": "b", - "million": "m", - "thousand": "k" + "TreemapperAnalytics": { + "title": "Průzkumník dat", + "from": "Z", + "to": "Na", + "clearFilter": "Vymazat filtr", + "days": "Dny", + "months": "Měsíce", + "weeks": "Týdny", + "years": "Roky", + "treesPlanted": "Zasazené stromy", + "speciesPlanted": "Vysázené druhy", + "calenderWeek": "CW", + "project": "Projekt", + "export": "Exportovat", + "exportData": "Export dat", + "jan": "Leden", + "feb": "Únor", + "mar": "Březen", + "apr": "Duben", + "may": "Květen", + "jun": "Červen", + "jul": "Červenec", + "aug": "Srpen", + "sep": "Září", + "oct": "Říjen", + "nov": "Listopad", + "dec": "Prosinec", + "exportColumnHeaders": { + "hid": "Lidsky čitelné ID pro místo sázení", + "plantDate": "Datum vysazení", + "species": "Název vysazeného druhu", + "geometry": "GeoJson Souřadnice polygonu", + "type": "Typ místa sázení (jeden, více)", + "treesPlanted": "Celkový počet stromů na míste sázení", + "metadata": "Metadata umístění místa sázení", + "plantProjectId": "Backend ID projektu, jehož je umístění místa sázení součástí", + "sampleTreeCount": "Počet vzorků stromů přítomných na místě sázení", + "captureStatus": "Zachytit Stav umístění místa sázení.", + "created": "Časové razítko vytvoření" + }, + "readme": "PŘEČTI SI MĚ", + "interventionData": "Intervenční údaje", + "monitoringPlotsData": "Monitorování dat pozemků", + "dataIntervals": "Datové intervaly", + "errors": { + "emptyExportData": "Data nejsou k dispozici pro zadaný interval. Zkuste prosím jiný časový rozsah nebo zkontrolujte, zda byly zaznamenány údaje za dané období." + }, + "timeFrame": "Časový rámec", + "scientificName": "Vědecký název", + "type": "Typ", + "interventions": "Intervence", + "monitoringPlots": "Monitorování pozemků (Již brzy...)", + "trillion": "t", + "billion": "b", + "million": "m", + "thousand": "k" + } } \ No newline at end of file diff --git a/public/static/locales/es/bulkCodes.json b/public/static/locales/es/bulkCodes.json index 6f31cf5a2e..605168db0e 100644 --- a/public/static/locales/es/bulkCodes.json +++ b/public/static/locales/es/bulkCodes.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "BulkCodes": {} +} \ No newline at end of file diff --git a/public/static/locales/es/common.json b/public/static/locales/es/common.json index 7d0179712d..bd62912d9a 100644 --- a/public/static/locales/es/common.json +++ b/public/static/locales/es/common.json @@ -1,82 +1,84 @@ { - "tree_one": "Árbol", - "tree_other": "Árboles", - "by": "Por {{tpoName}}", - "to_project_by_tpo": "Para {{projectName}} por {{tpoName}}", - "for": "para", - "trees": "Árboles", - "planted": "plantado", - "privacy": "Privacidad", - "terms": "Términos", - "imprint": "Aviso Legal", - "status": "Estado", - "contact": "Contacto", - "supportUs": "Ayúdanos", - "leaders": "Líderes", - "leaderboard": "Clasificación", - "me": "Yo", - "signIn": "Iniciar sesión", - "home": "Inicio", - "donate_gift": "Donaciones/Regalos", - "plant": "Planta", - "donate": "Donaciones", - "gift": "Regalo", - "continue": "Continuar", - "selectLanguage": "Selecciona un idioma", - "selectCountry": "Selecciona un país", - "ok": "OK", - "cancel": "Cancelar", - "delete": "Eliminar", - "deleteAccount": "Borrar la cuenta", - "thankYou": "Muchas gracias", - "privacyPolicyNotice": "Al usar este sitio web, aceptas nuestra", - "privacyPolicy": "política de privacidad", - "about_pftp": "Sobre Plant-for-the-Planet", - "january": "Enero", - "february": "Febrero", - "march": "Marzo", - "april": "Abril", - "may": "Mayo", - "june": "Junio", - "july": "Julio", - "august": "Agosto", - "september": "Septiembre", - "october": "Octubre", - "november": "Noviembre", - "december": "Diciembre", - "approx": "Aproximadamente", - "view": "Ver", - "verifyEmailHeader": "Por favor, confirma tu correo electrónico.", - "verifyEmailText": "Para asegurar su cuenta, necesitamos verificar su correo electrónico. Por favor, compruebe su bandeja de entrada o la carpeta de spam/junk para un correo electrónico de confirmación y luego continúe con el inicio de sesión.", - "verifyEmailInfo": "Si no recibiste un correo electrónico, por favor, intenta iniciar sesión de nuevo y te enviaremos otro correo electrónico.", - "continueToLogin": "Continuar con el inicio de sesión", - "supportsUNEP": "Apoya al PNUMA", - "plantedBy": "Plantado por", - "redeemPopup": "¿Recibió un Árbol de regalo? Por favor, inicie sesión para canjear sus árboles.", - "login": "Inicio de sesión/registro", - "shop": "Tienda", - "downloads": "Descargas", - "team": "Equipo", - "jobs": "Trabajos", - "blogs": "Blogs", - "faqs": "Preguntas frecuentes", - "annualReports": "Informes anuales", - "skipIntroVideo": "Saltar la introducción", - "mapInfo": "Créditos del mapa", - "aboutUs": "Sobre nosotros", - "alternativelyEditProfile": "También puede marcar su perfil como privado visitando Editar perfil.", - "deleteAccountConsent": "Al hacer clic en Eliminar, solicito a Plant-for-the-Planet que elimine todos los datos asociados a mi cuenta de Plant-for-the-Planet. Los datos de las donaciones pueden conservarse hasta ocho años. Los árboles que he registrado no serán eliminados, sin embargo, serán anónimos y no podrán ser reclamados de nuevo.", - "deleteIrreversible": "También entiendo que la eliminación de la cuenta de {{email}} es irreversible.", - "goBack": "Regresar", - "deleteAccountMessage": "Para continuar con el borrado, escriba `{{delete}}`", - "deleteAccountLabel": "Tipo: {{delete}}", - "edit": "Editar", - "howDoesThisWork": "¿Cómo funciona esto?", - "copiedToClipboard": "Copiado en el portapapeles", - "close": "Cerrar", - "logout": "Cerrar Sesión", - "featured": "Destacado", - "treeMapper": "TreeMapper", - "underMaintenance": "En mantenimiento", - "reviewInfo": "El proyecto se inspeccionó en una revisión sobre el terreno de varios días al <2>mes y cumple nuestras <5>normas." + "Common": { + "tree_one": "Árbol", + "tree_other": "Árboles", + "by": "Por {{tpoName}}", + "to_project_by_tpo": "Para {{projectName}} por {{tpoName}}", + "for": "para", + "trees": "Árboles", + "planted": "plantado", + "privacy": "Privacidad", + "terms": "Términos", + "imprint": "Aviso Legal", + "status": "Estado", + "contact": "Contacto", + "supportUs": "Ayúdanos", + "leaders": "Líderes", + "leaderboard": "Clasificación", + "me": "Yo", + "signIn": "Iniciar sesión", + "home": "Inicio", + "donate_gift": "Donaciones/Regalos", + "plant": "Planta", + "donate": "Donaciones", + "gift": "Regalo", + "continue": "Continuar", + "selectLanguage": "Selecciona un idioma", + "selectCountry": "Selecciona un país", + "ok": "OK", + "cancel": "Cancelar", + "delete": "Eliminar", + "deleteAccount": "Borrar la cuenta", + "thankYou": "Muchas gracias", + "privacyPolicyNotice": "Al usar este sitio web, aceptas nuestra", + "privacyPolicy": "política de privacidad", + "about_pftp": "Sobre Plant-for-the-Planet", + "january": "Enero", + "february": "Febrero", + "march": "Marzo", + "april": "Abril", + "may": "Mayo", + "june": "Junio", + "july": "Julio", + "august": "Agosto", + "september": "Septiembre", + "october": "Octubre", + "november": "Noviembre", + "december": "Diciembre", + "approx": "Aproximadamente", + "view": "Ver", + "verifyEmailHeader": "Por favor, confirma tu correo electrónico.", + "verifyEmailText": "Para asegurar su cuenta, necesitamos verificar su correo electrónico. Por favor, compruebe su bandeja de entrada o la carpeta de spam/junk para un correo electrónico de confirmación y luego continúe con el inicio de sesión.", + "verifyEmailInfo": "Si no recibiste un correo electrónico, por favor, intenta iniciar sesión de nuevo y te enviaremos otro correo electrónico.", + "continueToLogin": "Continuar con el inicio de sesión", + "supportsUNEP": "Apoya al PNUMA", + "plantedBy": "Plantado por", + "redeemPopup": "¿Recibió un Árbol de regalo? Por favor, inicie sesión para canjear sus árboles.", + "login": "Inicio de sesión/registro", + "shop": "Tienda", + "downloads": "Descargas", + "team": "Equipo", + "jobs": "Trabajos", + "blogs": "Blogs", + "faqs": "Preguntas frecuentes", + "annualReports": "Informes anuales", + "skipIntroVideo": "Saltar la introducción", + "mapInfo": "Créditos del mapa", + "aboutUs": "Sobre nosotros", + "alternativelyEditProfile": "También puede marcar su perfil como privado visitando Editar perfil.", + "deleteAccountConsent": "Al hacer clic en Eliminar, solicito a Plant-for-the-Planet que elimine todos los datos asociados a mi cuenta de Plant-for-the-Planet. Los datos de las donaciones pueden conservarse hasta ocho años. Los árboles que he registrado no serán eliminados, sin embargo, serán anónimos y no podrán ser reclamados de nuevo.", + "deleteIrreversible": "También entiendo que la eliminación de la cuenta de {{email}} es irreversible.", + "goBack": "Regresar", + "deleteAccountMessage": "Para continuar con el borrado, escriba `{{delete}}`", + "deleteAccountLabel": "Tipo: {{delete}}", + "edit": "Editar", + "howDoesThisWork": "¿Cómo funciona esto?", + "copiedToClipboard": "Copiado en el portapapeles", + "close": "Cerrar", + "logout": "Cerrar Sesión", + "featured": "Destacado", + "treeMapper": "TreeMapper", + "underMaintenance": "En mantenimiento", + "reviewInfo": "El proyecto se inspeccionó en una revisión sobre el terreno de varios días al <2>mes y cumple nuestras <5>normas." + } } \ No newline at end of file diff --git a/public/static/locales/es/country.json b/public/static/locales/es/country.json index 7bd2ea4ded..f924787d13 100644 --- a/public/static/locales/es/country.json +++ b/public/static/locales/es/country.json @@ -1,261 +1,263 @@ { - "ac": "Isla Ascensión", - "af": "Afganistán", - "ax": "Islas Åland", - "al": "Albania", - "dz": "Argelia", - "as": "Samoa Americana", - "ad": "Andorra", - "ao": "Angola", - "ai": "Anguila", - "aq": "Antártida", - "ag": "Antigua y Barbuda", - "ar": "Argentina", - "am": "Armenia", - "aw": "Aruba", - "au": "Australia", - "at": "Austria", - "az": "Azerbaiyán", - "bs": "Bahamas", - "bh": "Bahrein", - "bd": "Bangladesh", - "bb": "Barbados", - "by": "Bielorusia", - "be": "Bélgica", - "bz": "Belice", - "bj": "Benin", - "bm": "Bermudas", - "bt": "Bhután", - "bo": "Estado Plurinacional de Bolivia", - "bq": "Bonaire, San Eustaquio y Saba", - "ba": "Bosnia y Herzegovina", - "bw": "Botswana", - "bv": "Isla Bouvet", - "br": "Brasil", - "io": "Territorio Británico del Océano Índico", - "bn": "Brunei Darussalam", - "bg": "Bulgaria", - "bf": "Burkina Faso", - "bi": "Burundi", - "cv": "Cabo Verde", - "kh": "Camboya", - "cm": "Camerún", - "ca": "Canadá", - "ic": "Islas Canarias", - "ky": "Islas Caimán", - "cf": "República Centroafricana", - "ea": "Ceuta y Melilla", - "td": "Chad", - "cl": "Chile", - "cn": "China", - "cx": "Isla de Navidad", - "cc": "Islas Cocos (Keeling)", - "co": "Colombia", - "km": "Islas Comores", - "cg": "Congo", - "cd": "República Democrática del Congo", - "ck": "Islas Cook", - "cr": "Costa Rica", - "ci": "Costa de Marfil", - "hr": "Croacia", - "cu": "Cuba", - "cw": "Curaçao", - "cy": "Chipre", - "cz": "Chequia", - "dk": "Dinamarca", - "dg": "Diego García", - "dj": "Djibouti", - "dm": "Dominica", - "do": "República Dominicana", - "tp": "Timor Oriental", - "ec": "Ecuador", - "eg": "Egipto", - "sv": "El Salvador", - "gq": "Guinea Ecuatorial", - "er": "Eritrea", - "ee": "Estonia", - "sz": "Eswatini", - "et": "Etiopía", - "ez": "Zona Euro", - "fk": "Islas Malvinas (Falkland)", - "fo": "Islas Feroe", - "fj": "Fiji", - "fi": "Finlandia", - "fr": "Francia", - "gf": "Guayana Francesa", - "pf": "Polinesia Francesa", - "tf": "Territorios Australes Franceses", - "ga": "Gabón", - "gm": "Gambia", - "ge": "Georgia", - "de": "Alemania", - "gh": "Ghana", - "gi": "Gibraltar", - "gr": "Grecia", - "gl": "Groenlandia", - "gd": "Granada", - "gp": "Guadalupe", - "gu": "Guam", - "gt": "Guatemala", - "gg": "Guernsey", - "gn": "Guinea", - "gw": "Guinea-Bissau", - "gy": "Guyana", - "ht": "Haití", - "hm": "Isla Heard e islas McDonald", - "va": "Santa Sede", - "hn": "Honduras", - "hk": "Hong Kong", - "hu": "Hungría", - "is": "Islandia", - "in": "India", - "id": "Indonesia", - "ir": "República Islámica de Irán ", - "iq": "Iraq", - "ie": "Irlanda", - "im": "Isla de Man", - "il": "Israel", - "it": "Italia", - "jm": "Jamaica", - "jp": "Japón", - "je": "Jersey", - "jo": "Jordania", - "kz": "Kazajstán", - "ke": "Kenya", - "ki": "Kiribati", - "xk": "Kosovo", - "kp": "República Popular Democrática de Corea", - "kr": "República de Corea", - "kw": "Kuwait", - "kg": "Kirguistán", - "la": "República Democrática Popular Lao", - "lv": "Letonia", - "lb": "Líbano", - "ls": "Lesotho", - "lr": "Liberia", - "ly": "Libia", - "li": "Liechtenstein", - "lt": "Lituania", - "lu": "Luxemburgo", - "mo": "Macao", - "mg": "Madagascar", - "mw": "Malawi", - "my": "Malasia", - "mv": "Maldivas", - "ml": "Malí", - "mt": "Malta", - "mh": "Islas Marshall", - "mq": "Martinica", - "mr": "Mauritania", - "mu": "Mauricio", - "yt": "Mayotte", - "mx": "México", - "fm": "Estados Federados de Micronesia", - "md": "República de Moldavia", - "mc": "Mónaco", - "mn": "Mongolia", - "me": "Montenegro", - "ms": "Montserrat", - "ma": "Marruecos", - "mz": "Mozambique", - "mm": "Myanmar", - "na": "Namibia", - "nr": "Nauru", - "np": "Nepal", - "nl": "Países Bajos", - "an": "Antillas Holandesas", - "nc": "Nueva Caledonia", - "nz": "Nueva Zelanda", - "ni": "Nicaragua", - "ne": "Níger", - "ng": "Nigeria", - "nu": "Niue", - "nf": "Isla de Norfolk", - "mk": "Macedonia del Norte", - "mp": "Islas Marianas del Norte", - "no": "Noruega", - "om": "Omán", - "pk": "Pakistán", - "pw": "Palau", - "ps": "Estado de Palestina", - "pa": "Panamá", - "pg": "Papua Nueva Guinea", - "py": "Paraguay", - "pe": "Perú", - "ph": "Filipinas", - "pn": "Pitcairn", - "pl": "Polonia", - "pt": "Portugal", - "pr": "Puerto Rico", - "qa": "Qatar", - "re": "Reunión", - "ro": "Rumania", - "ru": "Federación de Rusia", - "rw": "Rwanda", - "bl": "San Bartolomé", - "sh": "Santa Elena, Ascensión y Tristán da Cunha", - "kn": "San Cristóbal y Nieves", - "lc": "Santa Lucía", - "mf": "San Martín (Parte francesa)", - "pm": "San Pedro y Miquelón", - "vc": "San Vicente y las Granadinas", - "ws": "Samoa", - "sm": "San Marino", - "st": "Santo Tomé y Príncipe", - "sa": "Arabia Saudita", - "sn": "Senegal", - "rs": "Serbia", - "sc": "Seychelles", - "sl": "Sierra Leona", - "sg": "Singapur", - "sx": "San Martín (Parte holandesa)", - "sk": "Eslovaquia", - "si": "Eslovenia", - "sb": "Islas Salomón", - "so": "Somalia", - "za": "República de Sudáfrica", - "gs": "Georgia del Sur e Islas Sandwich del Sur", - "ss": "Sudán del Sur", - "es": "España", - "lk": "Sri Lanka", - "sd": "Sudán", - "sr": "Surinam", - "sj": "Svalbard y Jan Mayen", - "se": "Suecia", - "ch": "Suiza", - "sy": "República Árabe de Siria", - "tw": "Taiwán", - "tj": "Tayikistán", - "tz": "República Unida de Tanzanía", - "th": "Tailandia", - "tl": "Timor-Leste", - "tg": "Togo", - "tk": "Tokelau", - "to": "Tonga", - "tt": "Trinidad y Tobago", - "ta": "Tristán da Cunha", - "tn": "Túnez", - "tr": "Turquía", - "tm": "Turkmenistán", - "tc": "Islas Turcas y Caicos", - "tv": "Tuvalu", - "ug": "Uganda", - "ua": "Ucrania", - "ae": "Emiratos Árabes Unidos", - "gb": "Reino Unido de Gran Bretaña e Irlanda del Norte", - "un": "Naciones Unidas", - "us": "Estados Unidos de América", - "um": "Islas menores alejadas de los Estados Unidos", - "uy": "Uruguay", - "uz": "Uzbekistán", - "vu": "Vanuatu", - "ve": "República Bolivariana de Venezuela", - "vn": "Vietnam", - "vg": "Islas Vírgenes (Británicas)", - "vi": "Islas Vírgenes (EE.UU.)", - "wf": "Wallis y Futuna", - "eh": "Sahara Occidental", - "ye": "Yemen", - "zm": "Zambia", - "zw": "Zimbabwe" + "Country": { + "ac": "Isla Ascensión", + "af": "Afganistán", + "ax": "Islas Åland", + "al": "Albania", + "dz": "Argelia", + "as": "Samoa Americana", + "ad": "Andorra", + "ao": "Angola", + "ai": "Anguila", + "aq": "Antártida", + "ag": "Antigua y Barbuda", + "ar": "Argentina", + "am": "Armenia", + "aw": "Aruba", + "au": "Australia", + "at": "Austria", + "az": "Azerbaiyán", + "bs": "Bahamas", + "bh": "Bahrein", + "bd": "Bangladesh", + "bb": "Barbados", + "by": "Bielorusia", + "be": "Bélgica", + "bz": "Belice", + "bj": "Benin", + "bm": "Bermudas", + "bt": "Bhután", + "bo": "Estado Plurinacional de Bolivia", + "bq": "Bonaire, San Eustaquio y Saba", + "ba": "Bosnia y Herzegovina", + "bw": "Botswana", + "bv": "Isla Bouvet", + "br": "Brasil", + "io": "Territorio Británico del Océano Índico", + "bn": "Brunei Darussalam", + "bg": "Bulgaria", + "bf": "Burkina Faso", + "bi": "Burundi", + "cv": "Cabo Verde", + "kh": "Camboya", + "cm": "Camerún", + "ca": "Canadá", + "ic": "Islas Canarias", + "ky": "Islas Caimán", + "cf": "República Centroafricana", + "ea": "Ceuta y Melilla", + "td": "Chad", + "cl": "Chile", + "cn": "China", + "cx": "Isla de Navidad", + "cc": "Islas Cocos (Keeling)", + "co": "Colombia", + "km": "Islas Comores", + "cg": "Congo", + "cd": "República Democrática del Congo", + "ck": "Islas Cook", + "cr": "Costa Rica", + "ci": "Costa de Marfil", + "hr": "Croacia", + "cu": "Cuba", + "cw": "Curaçao", + "cy": "Chipre", + "cz": "Chequia", + "dk": "Dinamarca", + "dg": "Diego García", + "dj": "Djibouti", + "dm": "Dominica", + "do": "República Dominicana", + "tp": "Timor Oriental", + "ec": "Ecuador", + "eg": "Egipto", + "sv": "El Salvador", + "gq": "Guinea Ecuatorial", + "er": "Eritrea", + "ee": "Estonia", + "sz": "Eswatini", + "et": "Etiopía", + "ez": "Zona Euro", + "fk": "Islas Malvinas (Falkland)", + "fo": "Islas Feroe", + "fj": "Fiji", + "fi": "Finlandia", + "fr": "Francia", + "gf": "Guayana Francesa", + "pf": "Polinesia Francesa", + "tf": "Territorios Australes Franceses", + "ga": "Gabón", + "gm": "Gambia", + "ge": "Georgia", + "de": "Alemania", + "gh": "Ghana", + "gi": "Gibraltar", + "gr": "Grecia", + "gl": "Groenlandia", + "gd": "Granada", + "gp": "Guadalupe", + "gu": "Guam", + "gt": "Guatemala", + "gg": "Guernsey", + "gn": "Guinea", + "gw": "Guinea-Bissau", + "gy": "Guyana", + "ht": "Haití", + "hm": "Isla Heard e islas McDonald", + "va": "Santa Sede", + "hn": "Honduras", + "hk": "Hong Kong", + "hu": "Hungría", + "is": "Islandia", + "in": "India", + "id": "Indonesia", + "ir": "República Islámica de Irán ", + "iq": "Iraq", + "ie": "Irlanda", + "im": "Isla de Man", + "il": "Israel", + "it": "Italia", + "jm": "Jamaica", + "jp": "Japón", + "je": "Jersey", + "jo": "Jordania", + "kz": "Kazajstán", + "ke": "Kenya", + "ki": "Kiribati", + "xk": "Kosovo", + "kp": "República Popular Democrática de Corea", + "kr": "República de Corea", + "kw": "Kuwait", + "kg": "Kirguistán", + "la": "República Democrática Popular Lao", + "lv": "Letonia", + "lb": "Líbano", + "ls": "Lesotho", + "lr": "Liberia", + "ly": "Libia", + "li": "Liechtenstein", + "lt": "Lituania", + "lu": "Luxemburgo", + "mo": "Macao", + "mg": "Madagascar", + "mw": "Malawi", + "my": "Malasia", + "mv": "Maldivas", + "ml": "Malí", + "mt": "Malta", + "mh": "Islas Marshall", + "mq": "Martinica", + "mr": "Mauritania", + "mu": "Mauricio", + "yt": "Mayotte", + "mx": "México", + "fm": "Estados Federados de Micronesia", + "md": "República de Moldavia", + "mc": "Mónaco", + "mn": "Mongolia", + "me": "Montenegro", + "ms": "Montserrat", + "ma": "Marruecos", + "mz": "Mozambique", + "mm": "Myanmar", + "na": "Namibia", + "nr": "Nauru", + "np": "Nepal", + "nl": "Países Bajos", + "an": "Antillas Holandesas", + "nc": "Nueva Caledonia", + "nz": "Nueva Zelanda", + "ni": "Nicaragua", + "ne": "Níger", + "ng": "Nigeria", + "nu": "Niue", + "nf": "Isla de Norfolk", + "mk": "Macedonia del Norte", + "mp": "Islas Marianas del Norte", + "no": "Noruega", + "om": "Omán", + "pk": "Pakistán", + "pw": "Palau", + "ps": "Estado de Palestina", + "pa": "Panamá", + "pg": "Papua Nueva Guinea", + "py": "Paraguay", + "pe": "Perú", + "ph": "Filipinas", + "pn": "Pitcairn", + "pl": "Polonia", + "pt": "Portugal", + "pr": "Puerto Rico", + "qa": "Qatar", + "re": "Reunión", + "ro": "Rumania", + "ru": "Federación de Rusia", + "rw": "Rwanda", + "bl": "San Bartolomé", + "sh": "Santa Elena, Ascensión y Tristán da Cunha", + "kn": "San Cristóbal y Nieves", + "lc": "Santa Lucía", + "mf": "San Martín (Parte francesa)", + "pm": "San Pedro y Miquelón", + "vc": "San Vicente y las Granadinas", + "ws": "Samoa", + "sm": "San Marino", + "st": "Santo Tomé y Príncipe", + "sa": "Arabia Saudita", + "sn": "Senegal", + "rs": "Serbia", + "sc": "Seychelles", + "sl": "Sierra Leona", + "sg": "Singapur", + "sx": "San Martín (Parte holandesa)", + "sk": "Eslovaquia", + "si": "Eslovenia", + "sb": "Islas Salomón", + "so": "Somalia", + "za": "República de Sudáfrica", + "gs": "Georgia del Sur e Islas Sandwich del Sur", + "ss": "Sudán del Sur", + "es": "España", + "lk": "Sri Lanka", + "sd": "Sudán", + "sr": "Surinam", + "sj": "Svalbard y Jan Mayen", + "se": "Suecia", + "ch": "Suiza", + "sy": "República Árabe de Siria", + "tw": "Taiwán", + "tj": "Tayikistán", + "tz": "República Unida de Tanzanía", + "th": "Tailandia", + "tl": "Timor-Leste", + "tg": "Togo", + "tk": "Tokelau", + "to": "Tonga", + "tt": "Trinidad y Tobago", + "ta": "Tristán da Cunha", + "tn": "Túnez", + "tr": "Turquía", + "tm": "Turkmenistán", + "tc": "Islas Turcas y Caicos", + "tv": "Tuvalu", + "ug": "Uganda", + "ua": "Ucrania", + "ae": "Emiratos Árabes Unidos", + "gb": "Reino Unido de Gran Bretaña e Irlanda del Norte", + "un": "Naciones Unidas", + "us": "Estados Unidos de América", + "um": "Islas menores alejadas de los Estados Unidos", + "uy": "Uruguay", + "uz": "Uzbekistán", + "vu": "Vanuatu", + "ve": "República Bolivariana de Venezuela", + "vn": "Vietnam", + "vg": "Islas Vírgenes (Británicas)", + "vi": "Islas Vírgenes (EE.UU.)", + "wf": "Wallis y Futuna", + "eh": "Sahara Occidental", + "ye": "Yemen", + "zm": "Zambia", + "zw": "Zimbabwe" + } } \ No newline at end of file diff --git a/public/static/locales/es/donate.json b/public/static/locales/es/donate.json index f1488fb47e..755567dd9a 100644 --- a/public/static/locales/es/donate.json +++ b/public/static/locales/es/donate.json @@ -1,114 +1,116 @@ { - "fortreeCountTrees": "para {{treeCount}} Árbol", - "fortreeCountTrees_plural": "para {{treeCount}} Árboles", - "yourTreesPlantedByOnLocation": "Su árbol {{treeCount}} será plantado por {{projectName}} en {{location}}.", - "yourTreesPlantedByOnLocation_plural": "Sus árboles {{treeCount}} serán plantados por {{projectName}} en {{location}}.", - "myTreesPlantedByOnLocation": "Mi árbol {{treeCount}} está siendo plantado en {{location}}.", - "myTreesPlantedByOnLocation_plural": "Mis árboles {{treeCount}} están siendo plantados en {{location}}.", - "topProjects": "Proyectos principales", - "allCountProjects": "Todos {{projectCount}} los Proyectos", - "searchProjects": "Buscar Proyectos", - "viewProfile": "Ver Perfil", - "contactDetails": "Detalles de contacto", - "readMore": "Ver más", - "readLess": "Ver menos", - "treeDonation": "Donación de árboles", - "myDonationGiftToSomeone": "Mi donación está dedicada a alguien", - "taxDeductionNotYetAvailable": "La deducción de impuestos no está disponible todavía para ", - "taxDeductionNotAvailableForProject": "La deducción de impuestos no está disponible todavía para este proyecto", - "youWillReceiveTaxDeduction": "Recibirá un certificado de deducción de impuestos por ", - "toProjectByOrganization": "Para {{nombre del proyecto}} de {{nombre de la organización}}", - "firstName": "Nombre", - "lastName": "Apellidos", - "email": "Correo electrónico", - "address": "Dirección", - "city": "Ciudad", - "zipCode": "Código postal", - "zipCodeAlphaNumValidation": "El código postal sólo debe contener letras y números", - "country": "País", - "isACompanyDonation": "Esta donación ha sido realizada por una empresa", - "companyName": "Nombre de la empresa", - "giftRecipient": "Destinatario del regalo", - "directGiftRecipient": "Esta donación apoya", - "recipientName": "Nombre del destinatario", - "recipientNameRequired": "Se requiere el nombre del destinatario", - "removeRecipient": "Eliminar", - "giftMessage": "Mensaje de regalo", - "firstNameRequired": "El campo del nombre es obligatorio", - "lastNameRequired": "El campo de los apellidos es obligatorio", - "emailRequired": "El correo electrónico es necesario", - "addressRequired": "La dirección es obligatoria", - "cityRequired": "La ciudad es obligatoria", - "countryRequired": "El país es obligatorio", - "companyRequired": "El nombre de la empresa es obligatorio", - "paymentDetails": "Detalles del pago", - "validationFailed": "La validación falló", - "seedingYourDonation": "Sembrando su donación", - "pleaseDoNotCloseThisTab": "¡Por favor no cierres esta pestaña!", - "perTree": "/ árbol", - "stopTalkingStartPlanting": "Deja de hablar. Empieza a plantar.", - "creditDebitCard": "Tarjeta de crédito/débito", - "cardNumber": "Número de tarjeta", - "expDate": "Fecha de caducidad (MM/AA)", - "selectCurrency": "Seleccione la divisa", - "treeDonationWithPFP": "Donación de árboles con Plant-for-the-Planet", - "unavailable": "no disponible", - "donationSuccessfulWith": "Su {{{divisa}} donación fue pagada con éxito con el tipo de pago utilizado.", - "donationSuccessful": "Su {{{divisa}} donación fue un éxito.", - "giftSentMessage": "Hemos enviado un correo electrónico a {{nombre del destinatario}} sobre el regalo.", - "contributionMessage": "¿Quizás los visites algún día? Mientras tanto, tal vez puedas convencer a tus amigos con algunos árboles propios contándoles sobre los tuyos", - "plantTreesAtURL": "Plantar árboles en", - "copiedToClipboard": "¡Texto copiado al portapapeles!", - "noProjectsFound": "No se han encontrado proyectos", - "inTimeOfTaxReturns": "a tiempo para la declaración de impuestos.", - "titleToShare": "Plantando árboles contra la crisis climática!", - "giftToName": "Regalo a", - "thisDonationSupports": "Esta donación apoya", - "plantTreesWith": "Plantar árboles con", - "textToShare": "Únete a {{name}} y miles de otros para plantar un trillón de árboles para hacer frente a la crisis climática #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "thankyouHeaderText": "Vamos hacia un\n

Trillón de árboles

", - "shareTextTitle": "Deja de hablar. Inicie la planta", - "textToShareLinkedin": "Únete a {{name}} y miles de otros para plantar un trillón de árboles para hacer frente a la crisis climática", - "textToShareForMe": "Únete a nosotros y a otros miles para plantar un billón de árboles para hacer frente a la crisis climática", - "donationTokenInvalid": "La ficha de donación proporcionada es inválida.", - "giftTo": "Regalo a", - "supporting": "Apoyando", - "selectProject": "Seleccione un proyecto", - "giftValidation": "Por favor, introduzca los detalles del regalo", - "minDonate": "La cantidad mínima de la donación es", - "noPaymentMethodError": "No podemos procesar tu pago, por favor, inténtalo de nuevo.", - "somethingWentWrong": "¡Algo salió mal, por favor, inténtalo de nuevo pronto!", - "underMaintenance": "La aplicación está en mantenimiento, por favor, comprueba status.plant-for-the-planet.org para más detalles", - "waitingConfirmation": "Estamos esperando la confirmación de tu banco y te enviaremos un correo electrónico en breve. Por favor, no dudes en cerrar esta página.", - "yourDonationRef": "Tu referencia de donación es {{donationID}}", - "payWithGiroPay": "Donar con GiroPay", - "payWithSofort": "Donar con SOFORT", - "donationFailed": "Donación fallida", - "donationFailedMessage": "Algo ha ido mal al completar el pago. Si sigues teniendo problemas, ponte en contacto con nosotros en support@plant-for-the-planet.org", - "donationPending": "Completar tu donación", - "donationPendingMessage": "Actualmente estamos esperando la confirmación de tu banco. Esto puede llevar algún tiempo, así que no dudes en cerrar esta página. En breve te enviaremos un recibo por correo electrónico.", - "sepaMessage": "Al proporcionar tu IBAN y confirmar este pago, autorizas a Plant-for-the-Planet y a Stripe, nuestro proveedor de servicios de pago, a enviar instrucciones a tu banco para que realice el cargo en tu cuenta. Tienes derecho a un reembolso por parte de tu banco según los términos y condiciones del acuerdo con tu banco. Si tienes algún problema relacionado con tu donación, envíanos un correo electrónico a support@plant-for-the-planet.org", - "donationRef": "Referencia de la donación", - "sepaDisclaimer": "Los pagos SEPA tardan entre 2 y 14 días laborables (normalmente entre 3 y 5 días). En cuanto llega te enviamos un correo electrónico de confirmación con el certificado de tu árbol y lo incluiremos en el contador de árboles.", - "sofortDisclaimer": "Los pagos de SOFORT tardan entre 2 y 14 días laborables (normalmente 2-3 días). En cuanto llega te enviamos un correo electrónico de confirmación con el certificado de tu árbol y lo incluiremos en el contador de árboles.", - "askPublishName": "Muestra mi nombre completo en la tabla de clasificación y en las aplicaciones de Plant-for-the-Planet. ", - "nameAlreadyPublished": "Tu nombre completo aparecerá en la tabla de clasificación ya que tu perfil de Plant-for-the-Planet es actualmente público.", - "orgNamePublishedTax": "El nombre de la empresa es visible en nuestra tabla de clasificación y en la aplicación. Se emitirán recibos de deducción de impuestos para el mismo nombre.", - "orgNamePublished": "El nombre de la empresa es visible en nuestra tabla de clasificación y en la aplicación.", - "aboutProject": "Sobre el proyecto", - "acceptingDonations": "Aceptación de donaciones", - "natural-regeneration": "Regeneración Natural", - "managed-regeneration": "Regeneración Asistida", - "large-scale-planting": "Restauración a gran escala", - "agroforestry": "Agroforestería", - "urban-planting": "Restauración Urbana", - "other-planting": "Restauración", - "mangroves": "Manglares", - "purpose": "Propósito", - "projectPurpose": "Objetivo del proyecto", - "type": "Tipo", - "projectType": "Tipo de proyecto", - "conservation": "Conservación", - "restoration": "Restauración", - "filters": "Filtros" + "Donate": { + "fortreeCountTrees": "para {{treeCount}} Árbol", + "fortreeCountTrees_plural": "para {{treeCount}} Árboles", + "yourTreesPlantedByOnLocation": "Su árbol {{treeCount}} será plantado por {{projectName}} en {{location}}.", + "yourTreesPlantedByOnLocation_plural": "Sus árboles {{treeCount}} serán plantados por {{projectName}} en {{location}}.", + "myTreesPlantedByOnLocation": "Mi árbol {{treeCount}} está siendo plantado en {{location}}.", + "myTreesPlantedByOnLocation_plural": "Mis árboles {{treeCount}} están siendo plantados en {{location}}.", + "topProjects": "Proyectos principales", + "allCountProjects": "Todos {{projectCount}} los Proyectos", + "searchProjects": "Buscar Proyectos", + "viewProfile": "Ver Perfil", + "contactDetails": "Detalles de contacto", + "readMore": "Ver más", + "readLess": "Ver menos", + "treeDonation": "Donación de árboles", + "myDonationGiftToSomeone": "Mi donación está dedicada a alguien", + "taxDeductionNotYetAvailable": "La deducción de impuestos no está disponible todavía para ", + "taxDeductionNotAvailableForProject": "La deducción de impuestos no está disponible todavía para este proyecto", + "youWillReceiveTaxDeduction": "Recibirá un certificado de deducción de impuestos por ", + "toProjectByOrganization": "Para {{nombre del proyecto}} de {{nombre de la organización}}", + "firstName": "Nombre", + "lastName": "Apellidos", + "email": "Correo electrónico", + "address": "Dirección", + "city": "Ciudad", + "zipCode": "Código postal", + "zipCodeAlphaNumValidation": "El código postal sólo debe contener letras y números", + "country": "País", + "isACompanyDonation": "Esta donación ha sido realizada por una empresa", + "companyName": "Nombre de la empresa", + "giftRecipient": "Destinatario del regalo", + "directGiftRecipient": "Esta donación apoya", + "recipientName": "Nombre del destinatario", + "recipientNameRequired": "Se requiere el nombre del destinatario", + "removeRecipient": "Eliminar", + "giftMessage": "Mensaje de regalo", + "firstNameRequired": "El campo del nombre es obligatorio", + "lastNameRequired": "El campo de los apellidos es obligatorio", + "emailRequired": "El correo electrónico es necesario", + "addressRequired": "La dirección es obligatoria", + "cityRequired": "La ciudad es obligatoria", + "countryRequired": "El país es obligatorio", + "companyRequired": "El nombre de la empresa es obligatorio", + "paymentDetails": "Detalles del pago", + "validationFailed": "La validación falló", + "seedingYourDonation": "Sembrando su donación", + "pleaseDoNotCloseThisTab": "¡Por favor no cierres esta pestaña!", + "perTree": "/ árbol", + "stopTalkingStartPlanting": "Deja de hablar. Empieza a plantar.", + "creditDebitCard": "Tarjeta de crédito/débito", + "cardNumber": "Número de tarjeta", + "expDate": "Fecha de caducidad (MM/AA)", + "selectCurrency": "Seleccione la divisa", + "treeDonationWithPFP": "Donación de árboles con Plant-for-the-Planet", + "unavailable": "no disponible", + "donationSuccessfulWith": "Su {{{divisa}} donación fue pagada con éxito con el tipo de pago utilizado.", + "donationSuccessful": "Su {{{divisa}} donación fue un éxito.", + "giftSentMessage": "Hemos enviado un correo electrónico a {{nombre del destinatario}} sobre el regalo.", + "contributionMessage": "¿Quizás los visites algún día? Mientras tanto, tal vez puedas convencer a tus amigos con algunos árboles propios contándoles sobre los tuyos", + "plantTreesAtURL": "Plantar árboles en", + "copiedToClipboard": "¡Texto copiado al portapapeles!", + "noProjectsFound": "No se han encontrado proyectos", + "inTimeOfTaxReturns": "a tiempo para la declaración de impuestos.", + "titleToShare": "Plantando árboles contra la crisis climática!", + "giftToName": "Regalo a", + "thisDonationSupports": "Esta donación apoya", + "plantTreesWith": "Plantar árboles con", + "textToShare": "Únete a {{name}} y miles de otros para plantar un trillón de árboles para hacer frente a la crisis climática #StopTalkingStartPlanting #TrillionTrees @trilliontrees", + "thankyouHeaderText": "Vamos hacia un\n

Trillón de árboles

", + "shareTextTitle": "Deja de hablar. Inicie la planta", + "textToShareLinkedin": "Únete a {{name}} y miles de otros para plantar un trillón de árboles para hacer frente a la crisis climática", + "textToShareForMe": "Únete a nosotros y a otros miles para plantar un billón de árboles para hacer frente a la crisis climática", + "donationTokenInvalid": "La ficha de donación proporcionada es inválida.", + "giftTo": "Regalo a", + "supporting": "Apoyando", + "selectProject": "Seleccione un proyecto", + "giftValidation": "Por favor, introduzca los detalles del regalo", + "minDonate": "La cantidad mínima de la donación es", + "noPaymentMethodError": "No podemos procesar tu pago, por favor, inténtalo de nuevo.", + "somethingWentWrong": "¡Algo salió mal, por favor, inténtalo de nuevo pronto!", + "underMaintenance": "La aplicación está en mantenimiento, por favor, comprueba status.plant-for-the-planet.org para más detalles", + "waitingConfirmation": "Estamos esperando la confirmación de tu banco y te enviaremos un correo electrónico en breve. Por favor, no dudes en cerrar esta página.", + "yourDonationRef": "Tu referencia de donación es {{donationID}}", + "payWithGiroPay": "Donar con GiroPay", + "payWithSofort": "Donar con SOFORT", + "donationFailed": "Donación fallida", + "donationFailedMessage": "Algo ha ido mal al completar el pago. Si sigues teniendo problemas, ponte en contacto con nosotros en support@plant-for-the-planet.org", + "donationPending": "Completar tu donación", + "donationPendingMessage": "Actualmente estamos esperando la confirmación de tu banco. Esto puede llevar algún tiempo, así que no dudes en cerrar esta página. En breve te enviaremos un recibo por correo electrónico.", + "sepaMessage": "Al proporcionar tu IBAN y confirmar este pago, autorizas a Plant-for-the-Planet y a Stripe, nuestro proveedor de servicios de pago, a enviar instrucciones a tu banco para que realice el cargo en tu cuenta. Tienes derecho a un reembolso por parte de tu banco según los términos y condiciones del acuerdo con tu banco. Si tienes algún problema relacionado con tu donación, envíanos un correo electrónico a support@plant-for-the-planet.org", + "donationRef": "Referencia de la donación", + "sepaDisclaimer": "Los pagos SEPA tardan entre 2 y 14 días laborables (normalmente entre 3 y 5 días). En cuanto llega te enviamos un correo electrónico de confirmación con el certificado de tu árbol y lo incluiremos en el contador de árboles.", + "sofortDisclaimer": "Los pagos de SOFORT tardan entre 2 y 14 días laborables (normalmente 2-3 días). En cuanto llega te enviamos un correo electrónico de confirmación con el certificado de tu árbol y lo incluiremos en el contador de árboles.", + "askPublishName": "Muestra mi nombre completo en la tabla de clasificación y en las aplicaciones de Plant-for-the-Planet. ", + "nameAlreadyPublished": "Tu nombre completo aparecerá en la tabla de clasificación ya que tu perfil de Plant-for-the-Planet es actualmente público.", + "orgNamePublishedTax": "El nombre de la empresa es visible en nuestra tabla de clasificación y en la aplicación. Se emitirán recibos de deducción de impuestos para el mismo nombre.", + "orgNamePublished": "El nombre de la empresa es visible en nuestra tabla de clasificación y en la aplicación.", + "aboutProject": "Sobre el proyecto", + "acceptingDonations": "Aceptación de donaciones", + "natural-regeneration": "Regeneración Natural", + "managed-regeneration": "Regeneración Asistida", + "large-scale-planting": "Restauración a gran escala", + "agroforestry": "Agroforestería", + "urban-planting": "Restauración Urbana", + "other-planting": "Restauración", + "mangroves": "Manglares", + "purpose": "Propósito", + "projectPurpose": "Objetivo del proyecto", + "type": "Tipo", + "projectType": "Tipo de proyecto", + "conservation": "Conservación", + "restoration": "Restauración", + "filters": "Filtros" + } } \ No newline at end of file diff --git a/public/static/locales/es/donationLink.json b/public/static/locales/es/donationLink.json index 6f31cf5a2e..fa17184690 100644 --- a/public/static/locales/es/donationLink.json +++ b/public/static/locales/es/donationLink.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "DonationLink": {} +} \ No newline at end of file diff --git a/public/static/locales/es/editProfile.json b/public/static/locales/es/editProfile.json index 9c26048295..6dceae8dd1 100644 --- a/public/static/locales/es/editProfile.json +++ b/public/static/locales/es/editProfile.json @@ -1,35 +1,37 @@ { - "loginTitle": "{{log}} - Ingresa en", - "signUpText": "Inscripción completa", - "profileTypes": "{{item.title}}", - "createAccount": "Crear una cuenta", - "individual": "Individuo", - "tpo": "Organización de plantación", - "education": "Escuela", - "organization": "Empresa", - "profileCreated": "Perfil Creado con éxito!", - "profileCreationFailed": "Error en la creación del perfil. Por favor, inténtalo de nuevo.", - "profileCreationError": "Error en la creación del perfil.", - "edit": "Editar el perfil", - "privateAccountTxt": "Tu perfil está oculto y sólo tu nombre aparece en la tabla de clasificación", - "save": "Guardar", - "profilePicUpdated": "La foto del perfil está siendo actualizada...", - "profileSaved": "¡Guardado con éxito!", - "profileSaveFailed": "Error en la actualización del perfil.", - "changeAccountToPublic": "Cambiar a una cuenta pública", - "publicAccount": "Cuenta pública", - "accountPrivacyChangeText": "Para crear un widget de perfil necesitas tener una cuenta pública. Al hacer clic en continuar, cambias tu configuración de privacidad a pública.", - "continue": "Continúa", - "cancel": "Cancelar", - "fieldLabels": { - "profileType": "Soy un", - "name": "Nombre de {{type}}", - "website": "Página web", - "privateAccount": "Cuenta privada", - "subscribe": "Suscríbete a las noticias por correo electrónico" - }, - "validationErrors": { - "nameRequired": "Por favor, introduce un nombre", - "websiteInvalid": "Por favor, introduzca una URL válida" + "EditProfile": { + "loginTitle": "{{log}} - Ingresa en", + "signUpText": "Inscripción completa", + "profileTypes": "{{item.title}}", + "createAccount": "Crear una cuenta", + "individual": "Individuo", + "tpo": "Organización de plantación", + "education": "Escuela", + "organization": "Empresa", + "profileCreated": "Perfil Creado con éxito!", + "profileCreationFailed": "Error en la creación del perfil. Por favor, inténtalo de nuevo.", + "profileCreationError": "Error en la creación del perfil.", + "edit": "Editar el perfil", + "privateAccountTxt": "Tu perfil está oculto y sólo tu nombre aparece en la tabla de clasificación", + "save": "Guardar", + "profilePicUpdated": "La foto del perfil está siendo actualizada...", + "profileSaved": "¡Guardado con éxito!", + "profileSaveFailed": "Error en la actualización del perfil.", + "changeAccountToPublic": "Cambiar a una cuenta pública", + "publicAccount": "Cuenta pública", + "accountPrivacyChangeText": "Para crear un widget de perfil necesitas tener una cuenta pública. Al hacer clic en continuar, cambias tu configuración de privacidad a pública.", + "continue": "Continúa", + "cancel": "Cancelar", + "fieldLabels": { + "profileType": "Soy un", + "name": "Nombre de {{type}}", + "website": "Página web", + "privateAccount": "Cuenta privada", + "subscribe": "Suscríbete a las noticias por correo electrónico" + }, + "validationErrors": { + "nameRequired": "Por favor, introduce un nombre", + "websiteInvalid": "Por favor, introduzca una URL válida" + } } } \ No newline at end of file diff --git a/public/static/locales/es/giftfunds.json b/public/static/locales/es/giftfunds.json index 6f31cf5a2e..b3f526f2ea 100644 --- a/public/static/locales/es/giftfunds.json +++ b/public/static/locales/es/giftfunds.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "Giftfunds": {} +} \ No newline at end of file diff --git a/public/static/locales/es/leaderboard.json b/public/static/locales/es/leaderboard.json index fbad54b691..16418b9bb5 100644 --- a/public/static/locales/es/leaderboard.json +++ b/public/static/locales/es/leaderboard.json @@ -1,7 +1,9 @@ { - "forestFrontrunners": "Los favoritos del bosque", - "mostRecent": "El más reciente", - "mostTrees": "La mayoría de los árboles", - "videoTitle": "Y finalmente, este", - "searchUser": "Buscar usuario" + "Leaderboard": { + "forestFrontrunners": "Los favoritos del bosque", + "mostRecent": "El más reciente", + "mostTrees": "La mayoría de los árboles", + "videoTitle": "Y finalmente, este", + "searchUser": "Buscar usuario" + } } \ No newline at end of file diff --git a/public/static/locales/es/login.json b/public/static/locales/es/login.json index dd243badb3..dfade33bd2 100644 --- a/public/static/locales/es/login.json +++ b/public/static/locales/es/login.json @@ -1,7 +1,9 @@ { - "loginTitle": "{{log}} - Ingresa en", - "signUpText": "Inscripción completa", - "profileTypes": "{{item.title}}", - "profileName": "Nombre de {{type}}", - "createAccount": "Crear una cuenta" -} + "Login": { + "loginTitle": "{{log}} - Ingresa en", + "signUpText": "Inscripción completa", + "profileTypes": "{{item.title}}", + "profileName": "Nombre de {{type}}", + "createAccount": "Crear una cuenta" + } +} \ No newline at end of file diff --git a/public/static/locales/es/managePayouts.json b/public/static/locales/es/managePayouts.json index 6f31cf5a2e..21dfda5e63 100644 --- a/public/static/locales/es/managePayouts.json +++ b/public/static/locales/es/managePayouts.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "ManagePayouts": {} +} \ No newline at end of file diff --git a/public/static/locales/es/manageProjects.json b/public/static/locales/es/manageProjects.json index 646c27459d..04d336783c 100644 --- a/public/static/locales/es/manageProjects.json +++ b/public/static/locales/es/manageProjects.json @@ -1,119 +1,121 @@ { - "basicDetails": "Detalles básicos", - "projectMedia": "Media del Proyecto", - "detailedAnalysis": "Análisis detallado", - "projectSites": "Sitios del proyecto", - "projectSpending": "Gasto en proyectos", - "review": "Revisar", - "name": "Nombre del proyecto", - "nameValidation": "Por favor, introduzca el nombre del proyecto", - "slug": "URL del proyecto", - "slugValidation": "Por favor, introduzca el URL del proyecto", - "classification": "Tipo de proyecto", - "classificationValidation": "Por favor, seleccione el tipo de proyecto", - "countTarget": "Objetivo de plantación", - "countTargetValidation": "Por favor, introduce el objetivo de plantación", - "countTargetValidation2": "El objetivo de plantación debe ser más de 1", - "website": "Página web", - "websiteValidationRequired": "Por favor, introduce la URL", - "websiteValidationInvalid": "URL inválida", - "aboutProject": "Sobre el proyecto", - "aboutProjectValidation": "Por favor, introduce Acerca del proyecto", - "receiveDonations": "Recibir donaciones", - "receiveDonationsInfo": "Por favor, actívalo una vez que el perfil del proyecto esté completo. Plant-for-the-Planet revisará el perfil y te informará si es elegible para recibir donaciones a través de esta plataforma. Esto puede tardar unas semanas.", - "unitCost": "Costo por árbol (en EUR)", - "projectLocation": "Localización del proyecto", - "visitorAssistanceLabel": "Proporcionaré alojamiento, acceso al sitio y transporte local si Plant-for-the-Planet envía un revisor", - "publishProject": "Proyecto de publicación", - "saveAndContinue": "Guardar y continuar", - "youtubeURL": "Enlace a video de Youtube", - "youtubeURLValidation": "Enlace a video de Youtube inválido", - "addCaption": "Agregar subtítulo", - "yearOfAbandonment": "Año aproximado de abandono", - "plantingDensity": "Densidad de plantación", - "employeeCount": "Recuento de empleados", - "mainChallenge": "Reto principal", - "whyThisSite": "¿Por qué este sitio?", - "siteOwner": "Propietario del sitio", - "ownerName": "Nombre del propietario", - "acquisitionDate": "Fecha de adquisición", - "yearOfDegradation": "Año de degradación", - "causeOfDegradation": "Causa de la degradación", - "longTermPlan": "Plan a largo plazo para el sitio", - "isCertified": "Este proyecto ha sido certificado", - "certifierName": "Nombre del certificador", - "siteName": "Nombre del sitio", - "spendingYear": "Año", - "spendingAmount": "Gasto (en EUR)", - "resetMessage": "Por favor, rellene los detalles básicos primero", - "uploadPhotos": "Subir fotos", - "dragIn": "o arrastrarlos", - "backToBasic": "Volver a los detalles básicos", - "projectNotFound": "Proyecto no encontrado", - "siteOwnerPrivate": "Privado", - "siteOwnerPublic": "Propiedad pública", - "siteOwnerSmallHolding": "Pequeño Holding", - "siteOwnerCommunal": "Tierra Comunitaria", - "siteOwnerOwned": "Propiedad del dueño", - "siteOwnerOther": "Otros", - "yearAbandonedInfo": "¿Cuándo fue la última intervención humana significativa en el lugar? Incluyendo la tala de árboles, la agricultura, el pastoreo de ganado o la quema inducida.", - "treePerHa": "árboles por hectárea", - "employeesCountInfo": "El equivalente a una semana de 40 horas. Es decir, dos empleados de medio tiempo cuentan como uno.", - "max300Chars": "Máximo 300 caracteres permitidos", - "longTermPlanInfo": "¿Qué medidas se han adoptado para proyectar el bosque a largo plazo? ¿Cómo se financia? ¿Qué recursos se extraerán del sitio?", - "backToMedia": "Volver a los medios de comunicación del proyecto", - "siteStatusPlanting": "Plantando", - "siteStatusPlanted": "Plantado", - "siteStatusBarren": "Estéril", - "siteStatusReforestation": "Reforestación", - "siteStatus": "Estado del sitio", - "selectProjectStatus": "Por favor, selecciona el estado del proyecto", - "saveAndAddSite": "Guardar y añadir otro sitio", - "addSite": "Añadir otro sitio", - "backToAnalysis": "Volver al análisis detallado", - "spendingYearValidation": "Por favor, añade el año de gasto", - "spendingAmountValidation": "Por favor, introduce la cantidad gastada", - "uploadReport": "Cargar el informe", - "dragInPdf": "o arrastrar en un pdf", - "addAnotherYear": "Añade otro año", - "backToSites": "Volver a los sitios del proyecto", - "certifiedBy": "Certificado por", - "certificationDateValidation": "Por favor, añade la fecha de certificación", - "uploadCertificate": "Subir el certificado", - "addCertificate": "Añade otra certificación", - "dropGeoJson": "Suelta el .geojson o el .kml", - "projectUnderReview": "Tu proyecto está bajo revisión, por favor espera.", - "projectForReview": "Ahora puedes presentar el proyecto para su revisión.", - "backToSpending": "Volver a los gastos de proyectos", - "pendingReview": "Pendiente de revisión", - "submitForReview": "Presentar para su revisión", - "addProject": "Añadir proyecto", - "abandonment": "Abandono", - "survivalRate": "Tasa de supervivencia", - "survivalRateInfo": "Porcentaje de árboles que sobreviven al primer año de la plantación", - "employees": "Empleados", - "siteOwnership": "Propiedad del sitio", - "longTermProtection": "Protección a largo plazo", - "externalCertifications": "Certificaciones externas", - "projectSpendingFinancial": "Gastos de proyectos financieros", - "issueDate": "Fecha de emisión", - "acquisitionYear": "Año de adquisición", - "largeScalePlanting": "Plantación a gran escala", - "agroforestry": "Agroforestal", - "naturalRegeneration": "Regeneración natural", - "managedRegeneration": "Regeneración controlada", - "urbanPlanting": "Plantación urbana", - "otherPlanting": "Otras plantaciones", - "projectType": "Tipo de proyecto", - "polygonRequired": "Se requiere un polígono", - "fileSizeLimit": "El archivo es mayor de 10 mb", - "fileImageOnly": "El archivo debe ser imagen", - "filePDFOnly": "El archivo debe ser PDF", - "acceptedReview": "Los cambios en tu proyecto están en activo", - "deniedReview": "Tu revisión ha sido rechazada", - "saveSite": "Guardar el sitio", - "latitude": "Latitud", - "longitude": "Longitud", - "latitudeRequired": "Se requiere latitud", - "longitudeRequired": "Se requiere la longitud" + "ManageProjects": { + "basicDetails": "Detalles básicos", + "projectMedia": "Media del Proyecto", + "detailedAnalysis": "Análisis detallado", + "projectSites": "Sitios del proyecto", + "projectSpending": "Gasto en proyectos", + "review": "Revisar", + "name": "Nombre del proyecto", + "nameValidation": "Por favor, introduzca el nombre del proyecto", + "slug": "URL del proyecto", + "slugValidation": "Por favor, introduzca el URL del proyecto", + "classification": "Tipo de proyecto", + "classificationValidation": "Por favor, seleccione el tipo de proyecto", + "countTarget": "Objetivo de plantación", + "countTargetValidation": "Por favor, introduce el objetivo de plantación", + "countTargetValidation2": "El objetivo de plantación debe ser más de 1", + "website": "Página web", + "websiteValidationRequired": "Por favor, introduce la URL", + "websiteValidationInvalid": "URL inválida", + "aboutProject": "Sobre el proyecto", + "aboutProjectValidation": "Por favor, introduce Acerca del proyecto", + "receiveDonations": "Recibir donaciones", + "receiveDonationsInfo": "Por favor, actívalo una vez que el perfil del proyecto esté completo. Plant-for-the-Planet revisará el perfil y te informará si es elegible para recibir donaciones a través de esta plataforma. Esto puede tardar unas semanas.", + "unitCost": "Costo por árbol (en EUR)", + "projectLocation": "Localización del proyecto", + "visitorAssistanceLabel": "Proporcionaré alojamiento, acceso al sitio y transporte local si Plant-for-the-Planet envía un revisor", + "publishProject": "Proyecto de publicación", + "saveAndContinue": "Guardar y continuar", + "youtubeURL": "Enlace a video de Youtube", + "youtubeURLValidation": "Enlace a video de Youtube inválido", + "addCaption": "Agregar subtítulo", + "yearOfAbandonment": "Año aproximado de abandono", + "plantingDensity": "Densidad de plantación", + "employeeCount": "Recuento de empleados", + "mainChallenge": "Reto principal", + "whyThisSite": "¿Por qué este sitio?", + "siteOwner": "Propietario del sitio", + "ownerName": "Nombre del propietario", + "acquisitionDate": "Fecha de adquisición", + "yearOfDegradation": "Año de degradación", + "causeOfDegradation": "Causa de la degradación", + "longTermPlan": "Plan a largo plazo para el sitio", + "isCertified": "Este proyecto ha sido certificado", + "certifierName": "Nombre del certificador", + "siteName": "Nombre del sitio", + "spendingYear": "Año", + "spendingAmount": "Gasto (en EUR)", + "resetMessage": "Por favor, rellene los detalles básicos primero", + "uploadPhotos": "Subir fotos", + "dragIn": "o arrastrarlos", + "backToBasic": "Volver a los detalles básicos", + "projectNotFound": "Proyecto no encontrado", + "siteOwnerPrivate": "Privado", + "siteOwnerPublic": "Propiedad pública", + "siteOwnerSmallHolding": "Pequeño Holding", + "siteOwnerCommunal": "Tierra Comunitaria", + "siteOwnerOwned": "Propiedad del dueño", + "siteOwnerOther": "Otros", + "yearAbandonedInfo": "¿Cuándo fue la última intervención humana significativa en el lugar? Incluyendo la tala de árboles, la agricultura, el pastoreo de ganado o la quema inducida.", + "treePerHa": "árboles por hectárea", + "employeesCountInfo": "El equivalente a una semana de 40 horas. Es decir, dos empleados de medio tiempo cuentan como uno.", + "max300Chars": "Máximo 300 caracteres permitidos", + "longTermPlanInfo": "¿Qué medidas se han adoptado para proyectar el bosque a largo plazo? ¿Cómo se financia? ¿Qué recursos se extraerán del sitio?", + "backToMedia": "Volver a los medios de comunicación del proyecto", + "siteStatusPlanting": "Plantando", + "siteStatusPlanted": "Plantado", + "siteStatusBarren": "Estéril", + "siteStatusReforestation": "Reforestación", + "siteStatus": "Estado del sitio", + "selectProjectStatus": "Por favor, selecciona el estado del proyecto", + "saveAndAddSite": "Guardar y añadir otro sitio", + "addSite": "Añadir otro sitio", + "backToAnalysis": "Volver al análisis detallado", + "spendingYearValidation": "Por favor, añade el año de gasto", + "spendingAmountValidation": "Por favor, introduce la cantidad gastada", + "uploadReport": "Cargar el informe", + "dragInPdf": "o arrastrar en un pdf", + "addAnotherYear": "Añade otro año", + "backToSites": "Volver a los sitios del proyecto", + "certifiedBy": "Certificado por", + "certificationDateValidation": "Por favor, añade la fecha de certificación", + "uploadCertificate": "Subir el certificado", + "addCertificate": "Añade otra certificación", + "dropGeoJson": "Suelta el .geojson o el .kml", + "projectUnderReview": "Tu proyecto está bajo revisión, por favor espera.", + "projectForReview": "Ahora puedes presentar el proyecto para su revisión.", + "backToSpending": "Volver a los gastos de proyectos", + "pendingReview": "Pendiente de revisión", + "submitForReview": "Presentar para su revisión", + "addProject": "Añadir proyecto", + "abandonment": "Abandono", + "survivalRate": "Tasa de supervivencia", + "survivalRateInfo": "Porcentaje de árboles que sobreviven al primer año de la plantación", + "employees": "Empleados", + "siteOwnership": "Propiedad del sitio", + "longTermProtection": "Protección a largo plazo", + "externalCertifications": "Certificaciones externas", + "projectSpendingFinancial": "Gastos de proyectos financieros", + "issueDate": "Fecha de emisión", + "acquisitionYear": "Año de adquisición", + "largeScalePlanting": "Plantación a gran escala", + "agroforestry": "Agroforestal", + "naturalRegeneration": "Regeneración natural", + "managedRegeneration": "Regeneración controlada", + "urbanPlanting": "Plantación urbana", + "otherPlanting": "Otras plantaciones", + "projectType": "Tipo de proyecto", + "polygonRequired": "Se requiere un polígono", + "fileSizeLimit": "El archivo es mayor de 10 mb", + "fileImageOnly": "El archivo debe ser imagen", + "filePDFOnly": "El archivo debe ser PDF", + "acceptedReview": "Los cambios en tu proyecto están en activo", + "deniedReview": "Tu revisión ha sido rechazada", + "saveSite": "Guardar el sitio", + "latitude": "Latitud", + "longitude": "Longitud", + "latitudeRequired": "Se requiere latitud", + "longitudeRequired": "Se requiere la longitud" + } } \ No newline at end of file diff --git a/public/static/locales/es/maps.json b/public/static/locales/es/maps.json index 0ad939599c..b243d1a6b9 100644 --- a/public/static/locales/es/maps.json +++ b/public/static/locales/es/maps.json @@ -1,44 +1,46 @@ { - "explore": "Explora", - "forests": "Bosques actuales", - "restoration": "Potencial de restauración", - "deforestation": "Deforestación", - "planted": "Plantado", - "projects": "Proyectos", - "3trilliontrees": "El mundo tiene alrededor de 3 billones de árboles hoy en día (\"Bosques\"). Y espacio para hasta un billón más (\"Potencial de Reforestación\").", - "high": "Alto", - "low": "Bajo", - "forestInfo": "Actualmente existen 3,04 billones de árboles en todo el mundo. Muchos menos de los seis billones de árboles que existían antes de que los humanos empezaran a talar los bosques, hace unos 11.000 años. El mapa muestra el número de árboles por km2.", - "restorationInfo": "500 millones de hectáreas reúnen los requisitos para la restauración a gran escala de bosques cerrados. Otros quinientos millones de hectáreas tienen condiciones mejores para la restauración en mosaico, combinando los bosques con otros usos de la tierra como la agrosilvicultura, la agricultura a pequeña escala y los asentamientos.", - "location": "Ubicación", - "timeTravel": "Tiempo de viaje", - "vegetationChange": "Cambio de vegetación", - "beta": "BETA", - "baseLayer": "Capa base y mapas vectoriales", - "satelliteImagery": "Imágenes por satélite", - "fieldData": "Datos de campo", - "trees": "Árboles", - "ha": "ha", - "plantingDate": "Fecha de plantación", - "plantingDensity": "Densidad de plantación", - "speciesPlanted": "Especies plantadas", - "sampleTrees": "Árboles de muestra", - "meterHigh": "m altura", - "cmWide": "cm de grosor", - "treesPerHa": "árboles por hectárea", - "sampleTree": "Árbol de muestra", - "scientificName": "Nombre científico", - "measurements": "Mediciones", - "treeTag": "Etiqueta del árbol", - "1Tree": "1 Árbol", - "plot": "Parcela", - "tag": "Etiqueta", - "plantingDensityInfo": "En caso de enriquecimiento, la densidad de plantación puede ser menor.", - "plantationDensityFormula": "Densidad de plantación = Número de árboles / Superficie de plantación", - "unknown": "Desconocido", - "showWholeArea": "Mostrar toda la zona", - "daysAgo": "{{days}} días atrás", - "today": "Hoy", - "yesterday": "Ayer", - "clickForDetails": "Haga clic para más detalles" + "Maps": { + "explore": "Explora", + "forests": "Bosques actuales", + "restoration": "Potencial de restauración", + "deforestation": "Deforestación", + "planted": "Plantado", + "projects": "Proyectos", + "3trilliontrees": "El mundo tiene alrededor de 3 billones de árboles hoy en día (\"Bosques\"). Y espacio para hasta un billón más (\"Potencial de Reforestación\").", + "high": "Alto", + "low": "Bajo", + "forestInfo": "Actualmente existen 3,04 billones de árboles en todo el mundo. Muchos menos de los seis billones de árboles que existían antes de que los humanos empezaran a talar los bosques, hace unos 11.000 años. El mapa muestra el número de árboles por km2.", + "restorationInfo": "500 millones de hectáreas reúnen los requisitos para la restauración a gran escala de bosques cerrados. Otros quinientos millones de hectáreas tienen condiciones mejores para la restauración en mosaico, combinando los bosques con otros usos de la tierra como la agrosilvicultura, la agricultura a pequeña escala y los asentamientos.", + "location": "Ubicación", + "timeTravel": "Tiempo de viaje", + "vegetationChange": "Cambio de vegetación", + "beta": "BETA", + "baseLayer": "Capa base y mapas vectoriales", + "satelliteImagery": "Imágenes por satélite", + "fieldData": "Datos de campo", + "trees": "Árboles", + "ha": "ha", + "plantingDate": "Fecha de plantación", + "plantingDensity": "Densidad de plantación", + "speciesPlanted": "Especies plantadas", + "sampleTrees": "Árboles de muestra", + "meterHigh": "m altura", + "cmWide": "cm de grosor", + "treesPerHa": "árboles por hectárea", + "sampleTree": "Árbol de muestra", + "scientificName": "Nombre científico", + "measurements": "Mediciones", + "treeTag": "Etiqueta del árbol", + "1Tree": "1 Árbol", + "plot": "Parcela", + "tag": "Etiqueta", + "plantingDensityInfo": "En caso de enriquecimiento, la densidad de plantación puede ser menor.", + "plantationDensityFormula": "Densidad de plantación = Número de árboles / Superficie de plantación", + "unknown": "Desconocido", + "showWholeArea": "Mostrar toda la zona", + "daysAgo": "{{days}} días atrás", + "today": "Hoy", + "yesterday": "Ayer", + "clickForDetails": "Haga clic para más detalles" + } } \ No newline at end of file diff --git a/public/static/locales/es/me.json b/public/static/locales/es/me.json index 86c9c23eec..f33e2f6a70 100644 --- a/public/static/locales/es/me.json +++ b/public/static/locales/es/me.json @@ -1,88 +1,90 @@ { - "treesPlanted": "Árbol plantado", - "treesPlanted_plural": "Árboles plantados", - "target": "Objetivo", - "share": "Compartir", - "registerTrees": "Registra los árboles", - "registerTreesDescription": "Registra los árboles que has plantado tú mismo, por ejemplo, en tu jardín.", - "redeem": "Canjear", - "myForest": "Mi bosque", - "giftToGiftee": "Regalo a {{gifteeName}}", - "settingManageProject": "Administrar los proyectos", - "deleteAccount": "Borrar la cuenta", - "userTree": "Registro de árboles", - "accountHistory": "Historial de la cuenta", - "logout": "Cierre de sesión", - "close": "Cerrar", - "support": "Apoyo", - "addTarget": "Agregar objetivo", - "noOfTrees": "No de árboles", - "datePlanted": "Fecha de plantación", - "speciesIsRequired": "Se requiere una especie", - "treeSpecies": "Especies de árboles", - "drawPolygon": "Por favor, dibuja un polígono para localizar tus árboles", - "selectLocation": "Seleccione el lugar de plantación de árboles en el mapa", - "registerButton": "Registrarse", - "startDrawing": "Empieza a dibujar", - "save": "Guardar", - "treesRequired": "Se requiere un número de árboles", - "wentWrong": "Algo salió mal. Por favor, contacte con support@plant-for-the-planet.org", - "locationMissing": "Seleccione la ubicación en el mapa", - "uploadPhotos": "Subir fotos", - "dragHere": "o arrastrar aquí", - "contribNotFound": "Contribución no encontrada", - "errorOccured": "Se produjo un error", - "contribSuccess": "Añadido con éxito {{treeCount}} {{treeSpecies}} 🌳 de {{plantDate}}", - "moreThanOne": "se requiere un mínimo de 1 árbol", - "registered": "Registrado", - "receivedTrees": "Árboles recibidos", - "receivedFrom": "Recibido de {{name}}", - "redeemedTrees": "Árboles redimidos", - "myAccount": "Mi cuenta", - "all": "Todo", - "noRecords": "No hay registros", - "filters": "Filtros", - "registeredTrees": "Árboles registrados", - "embedWidget": "Insertar Widget", - "tree-donation": "Donación de árboles", - "tree-gift": "Árbol de regalo", - "tree-cash": "TreeCash", - "trees": "Árboles", - "amount": "Cantidad", - "created": "Fecha de creación", - "project": "Nombre del proyecto", - "method": "Forma de pago", - "treeCount": "Recuento de árboles", - "lastUpdate": "Última actualización", - "donorCertificate": "Certificado de donación", - "download": "Descargar", - "donations": "Donaciones", - "in-progress": "En curso", - "donation-in-progress": "En curso", - "donation-tree-cash": "TreeCash", - "donation-success": "Éxito", - "cancelled": "Cancelado", - "card": "Tarjeta", - "sepa": "SEPA", - "success": "Exitoso", - "paid": "Exitoso", - "initiated": "Iniciado", - "failed": "Fallido", - "pending": "Pendiente", - "refunded": "Reembolsado", - "referred": "Remitido", - "in-dispute": "En disputa", - "dispute-lost": "Disputa perdida", - "nameForest": "El Bosque de {{name}}", - "taxReceipt": "Recibo de impuestos", - "history": "Historia", - "treemapper": "TreeMapper", - "register-trees": "Registrar árboles", - "manage-projects": "Administrar proyectos", - "paymentDate": "Fecha de pago", - "bankName": "Nombre del banco", - "setTarget": "Fijar el objetivo..", - "targetSave": "Guardar", - "targetErrorMessage": "El número debe ser positivo o mayor que cero", - "profile": "Perfil" + "Me": { + "treesPlanted": "Árbol plantado", + "treesPlanted_plural": "Árboles plantados", + "target": "Objetivo", + "share": "Compartir", + "registerTrees": "Registra los árboles", + "registerTreesDescription": "Registra los árboles que has plantado tú mismo, por ejemplo, en tu jardín.", + "redeem": "Canjear", + "myForest": "Mi bosque", + "giftToGiftee": "Regalo a {{gifteeName}}", + "settingManageProject": "Administrar los proyectos", + "deleteAccount": "Borrar la cuenta", + "userTree": "Registro de árboles", + "accountHistory": "Historial de la cuenta", + "logout": "Cierre de sesión", + "close": "Cerrar", + "support": "Apoyo", + "addTarget": "Agregar objetivo", + "noOfTrees": "No de árboles", + "datePlanted": "Fecha de plantación", + "speciesIsRequired": "Se requiere una especie", + "treeSpecies": "Especies de árboles", + "drawPolygon": "Por favor, dibuja un polígono para localizar tus árboles", + "selectLocation": "Seleccione el lugar de plantación de árboles en el mapa", + "registerButton": "Registrarse", + "startDrawing": "Empieza a dibujar", + "save": "Guardar", + "treesRequired": "Se requiere un número de árboles", + "wentWrong": "Algo salió mal. Por favor, contacte con support@plant-for-the-planet.org", + "locationMissing": "Seleccione la ubicación en el mapa", + "uploadPhotos": "Subir fotos", + "dragHere": "o arrastrar aquí", + "contribNotFound": "Contribución no encontrada", + "errorOccured": "Se produjo un error", + "contribSuccess": "Añadido con éxito {{treeCount}} {{treeSpecies}} 🌳 de {{plantDate}}", + "moreThanOne": "se requiere un mínimo de 1 árbol", + "registered": "Registrado", + "receivedTrees": "Árboles recibidos", + "receivedFrom": "Recibido de {{name}}", + "redeemedTrees": "Árboles redimidos", + "myAccount": "Mi cuenta", + "all": "Todo", + "noRecords": "No hay registros", + "filters": "Filtros", + "registeredTrees": "Árboles registrados", + "embedWidget": "Insertar Widget", + "tree-donation": "Donación de árboles", + "tree-gift": "Árbol de regalo", + "tree-cash": "TreeCash", + "trees": "Árboles", + "amount": "Cantidad", + "created": "Fecha de creación", + "project": "Nombre del proyecto", + "method": "Forma de pago", + "treeCount": "Recuento de árboles", + "lastUpdate": "Última actualización", + "donorCertificate": "Certificado de donación", + "download": "Descargar", + "donations": "Donaciones", + "in-progress": "En curso", + "donation-in-progress": "En curso", + "donation-tree-cash": "TreeCash", + "donation-success": "Éxito", + "cancelled": "Cancelado", + "card": "Tarjeta", + "sepa": "SEPA", + "success": "Exitoso", + "paid": "Exitoso", + "initiated": "Iniciado", + "failed": "Fallido", + "pending": "Pendiente", + "refunded": "Reembolsado", + "referred": "Remitido", + "in-dispute": "En disputa", + "dispute-lost": "Disputa perdida", + "nameForest": "El Bosque de {{name}}", + "taxReceipt": "Recibo de impuestos", + "history": "Historia", + "treemapper": "TreeMapper", + "register-trees": "Registrar árboles", + "manage-projects": "Administrar proyectos", + "paymentDate": "Fecha de pago", + "bankName": "Nombre del banco", + "setTarget": "Fijar el objetivo..", + "targetSave": "Guardar", + "targetErrorMessage": "El número debe ser positivo o mayor que cero", + "profile": "Perfil" + } } \ No newline at end of file diff --git a/public/static/locales/es/planet.json b/public/static/locales/es/planet.json index 69fb0ea37f..c124aad8c6 100644 --- a/public/static/locales/es/planet.json +++ b/public/static/locales/es/planet.json @@ -1,14 +1,16 @@ { - "treesDonated": "Árboles donados desde 2019", - "plantedByTPO": "Plantado por las {{projects}}+ organizaciones participantes", - "plantedGlobally": "Árboles que nos fueron notificados desde 2006", - "forestLoss": "Pérdida neta de bosques en los últimos 12 meses", - "estimateOf": "Estimación de la pérdida anual de árboles por", - "globallySince": "Número de árboles declarados por sí mismos a la Campaña de los Mil Millones de Árboles (posteriormente Campaña del Trillón de Árboles) desde su fundación por el PNUMA en 2006", - "restoreTrees": "¿Cómo restauramos un trillón de árboles?", - "watchVideo": "Ver Video", - "selectProjects": "Cómo seleccionamos los proyectos", - "learnMore": "Más información", - "treesDonatedDescription": "Todas las donaciones de árboles procesadas por Plant-for-the-Planet desde 2019. Incluye árboles donados directamente a través de nuestras apps, así como grandes donaciones privadas y de empresas. Estas donaciones no fueron todas a proyectos gestionados directamente por Plant-for-the-Planet, sino a todas las organizaciones de restauración participantes. Es posible que algunos árboles donados aún no se hayan plantado.", - "treesPlantedDescription": "Todos los árboles donados a través de Plant-for-the-Planet y otros árboles reportados como plantados por las organizaciones de restauración participantes" + "Planet": { + "treesDonated": "Árboles donados desde 2019", + "plantedByTPO": "Plantado por las {{projects}}+ organizaciones participantes", + "plantedGlobally": "Árboles que nos fueron notificados desde 2006", + "forestLoss": "Pérdida neta de bosques en los últimos 12 meses", + "estimateOf": "Estimación de la pérdida anual de árboles por", + "globallySince": "Número de árboles declarados por sí mismos a la Campaña de los Mil Millones de Árboles (posteriormente Campaña del Trillón de Árboles) desde su fundación por el PNUMA en 2006", + "restoreTrees": "¿Cómo restauramos un trillón de árboles?", + "watchVideo": "Ver Video", + "selectProjects": "Cómo seleccionamos los proyectos", + "learnMore": "Más información", + "treesDonatedDescription": "Todas las donaciones de árboles procesadas por Plant-for-the-Planet desde 2019. Incluye árboles donados directamente a través de nuestras apps, así como grandes donaciones privadas y de empresas. Estas donaciones no fueron todas a proyectos gestionados directamente por Plant-for-the-Planet, sino a todas las organizaciones de restauración participantes. Es posible que algunos árboles donados aún no se hayan plantado.", + "treesPlantedDescription": "Todos los árboles donados a través de Plant-for-the-Planet y otros árboles reportados como plantados por las organizaciones de restauración participantes" + } } \ No newline at end of file diff --git a/public/static/locales/es/planetcash.json b/public/static/locales/es/planetcash.json index 6f31cf5a2e..d716109ddb 100644 --- a/public/static/locales/es/planetcash.json +++ b/public/static/locales/es/planetcash.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "Planetcash": {} +} \ No newline at end of file diff --git a/public/static/locales/es/redeem.json b/public/static/locales/es/redeem.json index 665d44e88c..6f7e35a7c7 100644 --- a/public/static/locales/es/redeem.json +++ b/public/static/locales/es/redeem.json @@ -1,9 +1,11 @@ { - "congratulations": "¡Felicidades!", - "addToMyTrees": "Añadir a mis árboles", - "validateCode": "Validar el código", - "enterRedeemCode": "Por favor, introduzca un código para redimir", - "validating": "Validación", - "invalidType": "Tipo inválido, por favor, compruebe el enlace de nuevo", - "redeemDescription": "Canjea tuVale de árboles y otros códigos." + "Redeem": { + "congratulations": "¡Felicidades!", + "addToMyTrees": "Añadir a mis árboles", + "validateCode": "Validar el código", + "enterRedeemCode": "Por favor, introduzca un código para redimir", + "validating": "Validación", + "invalidType": "Tipo inválido, por favor, compruebe el enlace de nuevo", + "redeemDescription": "Canjea tuVale de árboles y otros códigos." + } } \ No newline at end of file diff --git a/public/static/locales/es/registerTrees.json b/public/static/locales/es/registerTrees.json index 909b794260..4f7eef5a4a 100644 --- a/public/static/locales/es/registerTrees.json +++ b/public/static/locales/es/registerTrees.json @@ -1,11 +1,13 @@ { - "selectLocationMap": "Seleccione la ubicación en el mapa", - "requiredNumberOfTrees": "Se requiere un número de árboles", - "numberOfTrees": "Número de árboles", - "datePlanted": "Fecha de plantación", - "treeSpecies": "Especies de árboles", - "speciesRequired": "Se requiere una especie", - "drawPolygonMap": "Dibuja un polígono en el mapa", - "clickMapMark": "Haga clic en el mapa para marcar una ubicación", - "next": "Siguiente" + "RegisterTrees": { + "selectLocationMap": "Seleccione la ubicación en el mapa", + "requiredNumberOfTrees": "Se requiere un número de árboles", + "numberOfTrees": "Número de árboles", + "datePlanted": "Fecha de plantación", + "treeSpecies": "Especies de árboles", + "speciesRequired": "Se requiere una especie", + "drawPolygonMap": "Dibuja un polígono en el mapa", + "clickMapMark": "Haga clic en el mapa para marcar una ubicación", + "next": "Siguiente" + } } \ No newline at end of file diff --git a/public/static/locales/es/tenants.json b/public/static/locales/es/tenants.json index fe0200504f..e48b523141 100644 --- a/public/static/locales/es/tenants.json +++ b/public/static/locales/es/tenants.json @@ -1,47 +1,49 @@ { - "nitrosb": { - "title": "Plantar árboles con Nitro Snowboards", - "description": "Nitro Snowboards se propuso apoyar y movilizar la conservación, la restauración y el crecimiento de un bosque." - }, - "energizer": { - "title": "Energizer ❤️ Árboles", - "description": "El \"Richtige tun\" es nuestro objetivo principal que permite mejorar nuestra actividad. Desde la primera batería libre de residuos en el año 1989, hemos intentado mejorar cada vez más nuestras baterías, haciéndolas más ligeras y, por lo tanto, más seguras. Nuestra asociación con Plant-for-the-Planet se inscribe en esta tradición, para mejorar el medio ambiente y promover la sostenibilidad. Juntos cultivamos las plantas y organizamos programas educativos para niños y jóvenes, con el fin de fomentar la conciencia global y el cambio climático. Sólo juntos podemos resolver esta importante necesidad de nuestro tiempo. ¿Te unes a nosotros?" - }, - "senatDerWirtschaft": { - "title": "El Senado de la Economía", - "description": "La crisis climática es uno de los mayores retos a los que se enfrenta la sociedad y algo tiene que cambiar. El Senado Empresarial es una comunidad de valores. Defendemos una visión motivadora y conectiva, vinculada a la aplicación práctica. Por eso, cada vez más de nuestros miembros plantan bosques, junto con sus empleados, socios comerciales y clientes. Cada árbol plantado fija el CO2 y nos da a las personas un tiempo valioso. Aprovecharemos este tiempo para reducir masivamente nuestras emisiones de CO2. Lo prometemos." - }, - "pampers": { - "title": "Pampers ❤️ Bosque", - "descriptionTitle": "Plantar árboles para un futuro más sostenible", - "description": "Contigo, queremos ayudar a crear un futuro mejor para nuestros pequeños. Por eso colaboramos con la organización infantil y juvenil Plant-for-the-Planet en un gran proyecto: el Bosque Pampers. Por cada paquete de pañales Pampers vendido, donamos 0,01 EUR/CHF y un total de hasta 100.000 EUR a Plant-for-the-Planet. Nuestro objetivo: plantar 60.000 árboles para una reforestación sostenible. En el mapa se puede ver dónde se realizará el proyecto. Echa un vistazo ahora y ayuda." - }, - "interactClub": { - "title": "Bosque Interact Club", - "description": "La plantación de árboles es un proyecto intergeneracional de construcción de la paz que nos da a las personas, especialmente a los jóvenes, esperanza y valor. Necesitamos valor para abordar juntos las soluciones a esta crisis climática. Nuestro objetivo es movilizar al mundo como niños, adolescentes y jóvenes adultos para plantar 1.000 billones de árboles, de modo que estos árboles nos den un tiempo valioso, unos 15 años, que deberíamos utilizar definitivamente para reducir nuestras emisiones de CO2. La reforestación, a escala mundial, puede convertirse así en el mayor programa de estímulo económico, especialmente para los países del Sur Global. Las zonas en las que podemos plantar los 1.000 millones de árboles adicionales están la mitad en África, el resto en América Latina y el Sudeste Asiático, y por tanto en los países más afectados por la crisis climática. Estos árboles crean puestos de trabajo, son buenos para la biodiversidad y secuestran el gas de efecto invernadero CO2. La nueva área de interés para la Familia Rotaria es: el medio ambiente. Ahora estamos empezando a hacer nuestra parte. Únase a nosotros para plantar árboles." - }, - "culchacandela": { - "title": "Culcha Candela X Plant-for-the-Planet", - "description": "

Estamos plantando árboles para mejorar el clima del mundo para ganar un tiempo importante en la carrera contra la crisis climática. ¡Plante aquí con nosotros!
Y mientras escuchas el nuevo \"Hamma (INVCTS & Dorfkind J-P Remix)\" en music-for-nature y todas las plataformas de streaming de música.
Los ingresos del streaming se donarán a Plant-for-the-Planet.

" - }, - "lacoqueta": { - "title": "Plantar árboles con La Coqueta", - "description": "Ver a sus propios hijos crecer e interesarse cada vez más por la crisis climática ha inspirado a Celia a utilizar su marca como plataforma para un cambio positivo. Tras enterarse de que los árboles son el medio más económico y eficaz para fijar el CO2, lo que permite disponer de más tiempo para reducir las emisiones de gases de efecto invernadero a cero y mitigar la crisis climática, decidió embarcarse en este apasionante viaje con Plant-for-the-Planet. Tú también puedes formar parte de ese viaje y donar algunos árboles, en Granada, la ciudad natal de Celia, o en otras zonas del mundo." - }, - "xiting": { - "title": "Plantar árboles - Por un futuro verde", - "description": "Con esta plataforma, en Xiting queremos dar a nuestros socios, clientes y simpatizantes la oportunidad de plantar árboles de forma rápida y sencilla y unirse así a nuestro compromiso con la protección del clima. Estamos convencidos de que la protección del clima sólo tiene sentido si cuenta con el apoyo de un amplio público y trabajamos juntos por un futuro verde y sostenible Los árboles son el medio ideal y más natural para ello, ya que filtran el CO2 del aire. ¡Plante con nosotros ahora! Desde 2019, Xiting ha perseguido con éxito el objetivo de operar como una empresa 100% neutra en CO2. Puede encontrar una visión de nuestro compromiso, así como de las asociaciones climáticas existentes aquí ." - }, - "ulmpflanzt": { - "title": "Los árboles de Ulm", - "description": "124.781 árboles: uno por cada ciudadano de Ulm. Ese es el objetivo de \"Los árboles de Ulm\", la iniciativa climática de Plant-for-the-Planet , unw (Ulmer Initiativkreis nachhaltige Wirtschaftsentwicklung e. V.), las empresas de Ulm pervormance international, Trivis y Volksbank Ulm, así como la ciudad de Ulm y la agenda 21 local de Ulm. Planta con nosotros y ayuda a realizar el mayor proyecto de reforestación de la historia de la humanidad. Por ti, y por todos nosotros." - }, - "sitex": { - "title": "Sitex ❤️ Wald", - "description": "El cambio climático es una tarea global y sólo puede ser entendida cuando todos estamos juntos. Queremos que nuestros hijos y nuestros amigos vivan en un planeta más limpio. Por ello, apoyamos el programa \"Plant-for-the-Planet\" y el método de cultivo de plantas, que permite reducir la cantidad de CO² de la atmósfera. Nuestra aportación al Grupo Sitex: mediante la plantación continua de plantas, gastaremos un máximo de 500.000 toneladas hasta el año 2027." - }, - "3pleset": { - "title": "Alife & Kickin ❤️ Bäume", - "description": "

#WEAREALIFE ¿Schreibfehler? No, ¡no!
Con el lema ELIGE LA VIDA ya estás en marcha.
Porque a partir de ahora podrás, con Alife & Kickin y la organización Plant-for-the-Planet Bäume, plantar y vivir. Acompáñanos en el camino de Alife & Kickin. ¿Cómo?
En los últimos dos meses, la organización Plant-for-the-Planet se ha hecho cargo de la venta de plantas. Nuestro objetivo: 50.000 plantas para un desarrollo sostenible. ¿Cómo?
En el mapa se puede ver cómo se realiza nuestro Alife & Kickin Wald. Ahora busca, comparte y disfruta más de la vida. ELEGIR LA VIDA.
UNA ORDEN UN ÁRBOL
#WEAREALIFE

" + "Tenants": { + "nitrosb": { + "title": "Plantar árboles con Nitro Snowboards", + "description": "Nitro Snowboards se propuso apoyar y movilizar la conservación, la restauración y el crecimiento de un bosque." + }, + "energizer": { + "title": "Energizer ❤️ Árboles", + "description": "El \"Richtige tun\" es nuestro objetivo principal que permite mejorar nuestra actividad. Desde la primera batería libre de residuos en el año 1989, hemos intentado mejorar cada vez más nuestras baterías, haciéndolas más ligeras y, por lo tanto, más seguras. Nuestra asociación con Plant-for-the-Planet se inscribe en esta tradición, para mejorar el medio ambiente y promover la sostenibilidad. Juntos cultivamos las plantas y organizamos programas educativos para niños y jóvenes, con el fin de fomentar la conciencia global y el cambio climático. Sólo juntos podemos resolver esta importante necesidad de nuestro tiempo. ¿Te unes a nosotros?" + }, + "senatDerWirtschaft": { + "title": "El Senado de la Economía", + "description": "La crisis climática es uno de los mayores retos a los que se enfrenta la sociedad y algo tiene que cambiar. El Senado Empresarial es una comunidad de valores. Defendemos una visión motivadora y conectiva, vinculada a la aplicación práctica. Por eso, cada vez más de nuestros miembros plantan bosques, junto con sus empleados, socios comerciales y clientes. Cada árbol plantado fija el CO2 y nos da a las personas un tiempo valioso. Aprovecharemos este tiempo para reducir masivamente nuestras emisiones de CO2. Lo prometemos." + }, + "pampers": { + "title": "Pampers ❤️ Bosque", + "descriptionTitle": "Plantar árboles para un futuro más sostenible", + "description": "Contigo, queremos ayudar a crear un futuro mejor para nuestros pequeños. Por eso colaboramos con la organización infantil y juvenil Plant-for-the-Planet en un gran proyecto: el Bosque Pampers. Por cada paquete de pañales Pampers vendido, donamos 0,01 EUR/CHF y un total de hasta 100.000 EUR a Plant-for-the-Planet. Nuestro objetivo: plantar 60.000 árboles para una reforestación sostenible. En el mapa se puede ver dónde se realizará el proyecto. Echa un vistazo ahora y ayuda." + }, + "interactClub": { + "title": "Bosque Interact Club", + "description": "La plantación de árboles es un proyecto intergeneracional de construcción de la paz que nos da a las personas, especialmente a los jóvenes, esperanza y valor. Necesitamos valor para abordar juntos las soluciones a esta crisis climática. Nuestro objetivo es movilizar al mundo como niños, adolescentes y jóvenes adultos para plantar 1.000 billones de árboles, de modo que estos árboles nos den un tiempo valioso, unos 15 años, que deberíamos utilizar definitivamente para reducir nuestras emisiones de CO2. La reforestación, a escala mundial, puede convertirse así en el mayor programa de estímulo económico, especialmente para los países del Sur Global. Las zonas en las que podemos plantar los 1.000 millones de árboles adicionales están la mitad en África, el resto en América Latina y el Sudeste Asiático, y por tanto en los países más afectados por la crisis climática. Estos árboles crean puestos de trabajo, son buenos para la biodiversidad y secuestran el gas de efecto invernadero CO2. La nueva área de interés para la Familia Rotaria es: el medio ambiente. Ahora estamos empezando a hacer nuestra parte. Únase a nosotros para plantar árboles." + }, + "culchacandela": { + "title": "Culcha Candela X Plant-for-the-Planet", + "description": "

Estamos plantando árboles para mejorar el clima del mundo para ganar un tiempo importante en la carrera contra la crisis climática. ¡Plante aquí con nosotros!
Y mientras escuchas el nuevo \"Hamma (INVCTS & Dorfkind J-P Remix)\" en music-for-nature y todas las plataformas de streaming de música.
Los ingresos del streaming se donarán a Plant-for-the-Planet.

" + }, + "lacoqueta": { + "title": "Plantar árboles con La Coqueta", + "description": "Ver a sus propios hijos crecer e interesarse cada vez más por la crisis climática ha inspirado a Celia a utilizar su marca como plataforma para un cambio positivo. Tras enterarse de que los árboles son el medio más económico y eficaz para fijar el CO2, lo que permite disponer de más tiempo para reducir las emisiones de gases de efecto invernadero a cero y mitigar la crisis climática, decidió embarcarse en este apasionante viaje con Plant-for-the-Planet. Tú también puedes formar parte de ese viaje y donar algunos árboles, en Granada, la ciudad natal de Celia, o en otras zonas del mundo." + }, + "xiting": { + "title": "Plantar árboles - Por un futuro verde", + "description": "Con esta plataforma, en Xiting queremos dar a nuestros socios, clientes y simpatizantes la oportunidad de plantar árboles de forma rápida y sencilla y unirse así a nuestro compromiso con la protección del clima. Estamos convencidos de que la protección del clima sólo tiene sentido si cuenta con el apoyo de un amplio público y trabajamos juntos por un futuro verde y sostenible Los árboles son el medio ideal y más natural para ello, ya que filtran el CO2 del aire. ¡Plante con nosotros ahora! Desde 2019, Xiting ha perseguido con éxito el objetivo de operar como una empresa 100% neutra en CO2. Puede encontrar una visión de nuestro compromiso, así como de las asociaciones climáticas existentes aquí ." + }, + "ulmpflanzt": { + "title": "Los árboles de Ulm", + "description": "124.781 árboles: uno por cada ciudadano de Ulm. Ese es el objetivo de \"Los árboles de Ulm\", la iniciativa climática de Plant-for-the-Planet , unw (Ulmer Initiativkreis nachhaltige Wirtschaftsentwicklung e. V.), las empresas de Ulm pervormance international, Trivis y Volksbank Ulm, así como la ciudad de Ulm y la agenda 21 local de Ulm. Planta con nosotros y ayuda a realizar el mayor proyecto de reforestación de la historia de la humanidad. Por ti, y por todos nosotros." + }, + "sitex": { + "title": "Sitex ❤️ Wald", + "description": "El cambio climático es una tarea global y sólo puede ser entendida cuando todos estamos juntos. Queremos que nuestros hijos y nuestros amigos vivan en un planeta más limpio. Por ello, apoyamos el programa \"Plant-for-the-Planet\" y el método de cultivo de plantas, que permite reducir la cantidad de CO² de la atmósfera. Nuestra aportación al Grupo Sitex: mediante la plantación continua de plantas, gastaremos un máximo de 500.000 toneladas hasta el año 2027." + }, + "3pleset": { + "title": "Alife & Kickin ❤️ Bäume", + "description": "

#WEAREALIFE ¿Schreibfehler? No, ¡no!
Con el lema ELIGE LA VIDA ya estás en marcha.
Porque a partir de ahora podrás, con Alife & Kickin y la organización Plant-for-the-Planet Bäume, plantar y vivir. Acompáñanos en el camino de Alife & Kickin. ¿Cómo?
En los últimos dos meses, la organización Plant-for-the-Planet se ha hecho cargo de la venta de plantas. Nuestro objetivo: 50.000 plantas para un desarrollo sostenible. ¿Cómo?
En el mapa se puede ver cómo se realiza nuestro Alife & Kickin Wald. Ahora busca, comparte y disfruta más de la vida. ELEGIR LA VIDA.
UNA ORDEN UN ÁRBOL
#WEAREALIFE

" + } } } \ No newline at end of file diff --git a/public/static/locales/es/treemapper.json b/public/static/locales/es/treemapper.json index 6f31cf5a2e..0d138993cc 100644 --- a/public/static/locales/es/treemapper.json +++ b/public/static/locales/es/treemapper.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "Treemapper": {} +} \ No newline at end of file diff --git a/public/static/locales/es/treemapperAnalytics.json b/public/static/locales/es/treemapperAnalytics.json index 6f31cf5a2e..7e8da06585 100644 --- a/public/static/locales/es/treemapperAnalytics.json +++ b/public/static/locales/es/treemapperAnalytics.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "TreemapperAnalytics": {} +} \ No newline at end of file diff --git a/public/static/locales/fr/bulkCodes.json b/public/static/locales/fr/bulkCodes.json index 6f31cf5a2e..605168db0e 100644 --- a/public/static/locales/fr/bulkCodes.json +++ b/public/static/locales/fr/bulkCodes.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "BulkCodes": {} +} \ No newline at end of file diff --git a/public/static/locales/fr/common.json b/public/static/locales/fr/common.json index 8a95cd4ec4..618f3976cd 100644 --- a/public/static/locales/fr/common.json +++ b/public/static/locales/fr/common.json @@ -1,82 +1,84 @@ { - "tree_one": "Arbre", - "tree_other": "Arbres", - "by": "Par {{tpoName}}", - "to_project_by_tpo": "Au {{projectName}} par {{tpoName}}", - "for": "pour", - "trees": "Arbres", - "planted": "planté", - "privacy": "Confidentialité", - "terms": "Conditions", - "imprint": "Mentions légales", - "status": "Statut", - "contact": "Contact", - "supportUs": "Nous soutenir", - "leaders": "Leaders", - "leaderboard": "Classement", - "me": "Moi", - "signIn": "S'identifier", - "home": "Accueil", - "donate_gift": "Dons/Cadeau", - "plant": "Planter", - "donate": "Faire un don", - "gift": "Cadeau", - "continue": "Continuer", - "selectLanguage": "Sélectionner une langue", - "selectCountry": "Sélectionner un pays", - "ok": "OK", - "cancel": "Annuler", - "delete": "Supprimer", - "deleteAccount": "Supprimer le compte", - "thankYou": "Merci", - "privacyPolicyNotice": "En utilisant ce site web, vous acceptez le programme Plant-for-the-Planet", - "privacyPolicy": "politique de confidentialité et de cookies", - "about_pftp": "À propos de \"Plant for the Planet\"", - "january": "Janvier", - "february": "Février", - "march": "Mars", - "april": "Avril", - "may": "Mai", - "june": "Juin", - "july": "Juillet", - "august": "Août", - "september": "Septembre", - "october": "Octobre", - "november": "Novembre", - "december": "Décembre", - "approx": "Approx.", - "view": "Voir", - "verifyEmailHeader": "Veuillez confirmer votre email.", - "verifyEmailText": "Pour sécuriser votre compte, nous devons vérifier votre email. Vérifier votre boîte de réception ou votre dossier spam/corbeille pour trouver un email de confirmation, puis reconnectez vous.", - "verifyEmailInfo": "Si vous n'avez pas reçu d'email, reconnectez vous et nous vous enverrons un autre email.", - "continueToLogin": "Continuer à se connecter", - "supportsUNEP": "Soutient le PNUE", - "plantedBy": "Planté par", - "redeemPopup": "Vous avez reçu un cadeau pour un arbre ? Veuillez vous connecter pour échanger vos arbres.", - "login": "Connexion/S'inscrire", - "shop": "Boutique", - "downloads": "Téléchargements", - "team": "Équipe", - "jobs": "Emplois", - "blogs": "Blogs", - "faqs": "FAQs", - "annualReports": "Rapports annuels", - "skipIntroVideo": "Sauter l'introduction", - "mapInfo": "Crédits cartographiques", - "aboutUs": "À propos de nous", - "alternativelyEditProfile": "Vous pouvez également marquer votre profil comme privé en visitant la page Modifier le profil.", - "deleteAccountConsent": "En cliquant Supprimer, je demande à Plant-for-the-Planet de supprimer toutes les données associées à mon compte Plant-for-the-Planet. Les données relatives aux dons peuvent être conservées pendant huit ans. Les arbres que j'ai enregistrés ne seront pas supprimés, mais ils seront dépersonnalisés et ne pourront plus être réclamés.", - "deleteIrreversible": "Je comprends également que la suppression du compte de {{email}} est irréversible.", - "goBack": "Retour", - "deleteAccountMessage": "Pour continuer la suppression, veuillez taper `{{delete}}`", - "deleteAccountLabel": "Taper : {{delete}}", - "edit": "Éditer", - "howDoesThisWork": "Comment ça marche ?", - "copiedToClipboard": "Copié dans le presse-papiers !", - "close": "Fermer", - "logout": "Se déconnecter", - "featured": "Recommandé", - "treeMapper": "TreeMapper", - "underMaintenance": "En cours de maintenance", - "reviewInfo": "Le projet a fait l'objet d'une inspection sur le terrain de plusieurs jours au cours du <2>mois et répond à nos <5>normes." + "Common": { + "tree_one": "Arbre", + "tree_other": "Arbres", + "by": "Par {{tpoName}}", + "to_project_by_tpo": "Au {{projectName}} par {{tpoName}}", + "for": "pour", + "trees": "Arbres", + "planted": "planté", + "privacy": "Confidentialité", + "terms": "Conditions", + "imprint": "Mentions légales", + "status": "Statut", + "contact": "Contact", + "supportUs": "Nous soutenir", + "leaders": "Leaders", + "leaderboard": "Classement", + "me": "Moi", + "signIn": "S'identifier", + "home": "Accueil", + "donate_gift": "Dons/Cadeau", + "plant": "Planter", + "donate": "Faire un don", + "gift": "Cadeau", + "continue": "Continuer", + "selectLanguage": "Sélectionner une langue", + "selectCountry": "Sélectionner un pays", + "ok": "OK", + "cancel": "Annuler", + "delete": "Supprimer", + "deleteAccount": "Supprimer le compte", + "thankYou": "Merci", + "privacyPolicyNotice": "En utilisant ce site web, vous acceptez le programme Plant-for-the-Planet", + "privacyPolicy": "politique de confidentialité et de cookies", + "about_pftp": "À propos de \"Plant for the Planet\"", + "january": "Janvier", + "february": "Février", + "march": "Mars", + "april": "Avril", + "may": "Mai", + "june": "Juin", + "july": "Juillet", + "august": "Août", + "september": "Septembre", + "october": "Octobre", + "november": "Novembre", + "december": "Décembre", + "approx": "Approx.", + "view": "Voir", + "verifyEmailHeader": "Veuillez confirmer votre email.", + "verifyEmailText": "Pour sécuriser votre compte, nous devons vérifier votre email. Vérifier votre boîte de réception ou votre dossier spam/corbeille pour trouver un email de confirmation, puis reconnectez vous.", + "verifyEmailInfo": "Si vous n'avez pas reçu d'email, reconnectez vous et nous vous enverrons un autre email.", + "continueToLogin": "Continuer à se connecter", + "supportsUNEP": "Soutient le PNUE", + "plantedBy": "Planté par", + "redeemPopup": "Vous avez reçu un cadeau pour un arbre ? Veuillez vous connecter pour échanger vos arbres.", + "login": "Connexion/S'inscrire", + "shop": "Boutique", + "downloads": "Téléchargements", + "team": "Équipe", + "jobs": "Emplois", + "blogs": "Blogs", + "faqs": "FAQs", + "annualReports": "Rapports annuels", + "skipIntroVideo": "Sauter l'introduction", + "mapInfo": "Crédits cartographiques", + "aboutUs": "À propos de nous", + "alternativelyEditProfile": "Vous pouvez également marquer votre profil comme privé en visitant la page Modifier le profil.", + "deleteAccountConsent": "En cliquant Supprimer, je demande à Plant-for-the-Planet de supprimer toutes les données associées à mon compte Plant-for-the-Planet. Les données relatives aux dons peuvent être conservées pendant huit ans. Les arbres que j'ai enregistrés ne seront pas supprimés, mais ils seront dépersonnalisés et ne pourront plus être réclamés.", + "deleteIrreversible": "Je comprends également que la suppression du compte de {{email}} est irréversible.", + "goBack": "Retour", + "deleteAccountMessage": "Pour continuer la suppression, veuillez taper `{{delete}}`", + "deleteAccountLabel": "Taper : {{delete}}", + "edit": "Éditer", + "howDoesThisWork": "Comment ça marche ?", + "copiedToClipboard": "Copié dans le presse-papiers !", + "close": "Fermer", + "logout": "Se déconnecter", + "featured": "Recommandé", + "treeMapper": "TreeMapper", + "underMaintenance": "En cours de maintenance", + "reviewInfo": "Le projet a fait l'objet d'une inspection sur le terrain de plusieurs jours au cours du <2>mois et répond à nos <5>normes." + } } \ No newline at end of file diff --git a/public/static/locales/fr/country.json b/public/static/locales/fr/country.json index 882bcce939..da4baaa397 100644 --- a/public/static/locales/fr/country.json +++ b/public/static/locales/fr/country.json @@ -1,261 +1,263 @@ { - "ac": "L'île de l'Ascension", - "af": "Afghanistan", - "ax": "Îles Åland", - "al": "Albanie", - "dz": "Algérie", - "as": "Samoa américaines", - "ad": "Andorre", - "ao": "Angola", - "ai": "Anguilla", - "aq": "Antarctique", - "ag": "Antigua-et-Barbuda", - "ar": "Argentine", - "am": "Arménie", - "aw": "Aruba", - "au": "Australie", - "at": "Autriche", - "az": "Azerbaïdjan", - "bs": "Bahamas", - "bh": "Bahreïn", - "bd": "Bangladesh", - "bb": "Barbade", - "by": "Biélorussie", - "be": "Belgique", - "bz": "Belize", - "bj": "Bénin", - "bm": "Bermudes", - "bt": "Bhoutan", - "bo": "Bolivie", - "bq": "Bonaire, Saint-Eustache et Saba", - "ba": "Bosnie-Herzégovine", - "bw": "Botswana", - "bv": "Ile Bouvet", - "br": "Brésil", - "io": "Territoire britannique de l'océan Indien", - "bn": "Brunei Darussalam", - "bg": "Bulgarie", - "bf": "Burkina Faso", - "bi": "Burundi", - "cv": "Cap-Vert", - "kh": "Cambodge", - "cm": "Cameroun", - "ca": "Canada", - "ic": "Îles Canaries", - "ky": "Îles Caïmans", - "cf": "République centrafricaine", - "ea": "Ceuta & Melilla", - "td": "Tchad", - "cl": "Chili", - "cn": "Chine", - "cx": "Ile de Noël", - "cc": "Îles Cocos (Keeling)", - "co": "Colombie", - "km": "Comores", - "cg": "Congo", - "cd": "Congo (République démocratique du)", - "ck": "Îles Cook", - "cr": "Costa Rica", - "ci": "Côte d'Ivoire", - "hr": "Croatie", - "cu": "Cuba", - "cw": "Curaçao", - "cy": "Chypre", - "cz": "Tchéquie", - "dk": "Danemark", - "dg": "Diego Garcia", - "dj": "Djibouti", - "dm": "Dominique", - "do": "République dominicaine", - "tp": "Timor oriental", - "ec": "Équateur", - "eg": "Égypte", - "sv": "Le Salvador", - "gq": "Guinée équatoriale", - "er": "Érythrée", - "ee": "Estonie", - "sz": "Eswatini", - "et": "Éthiopie", - "ez": "Zone euro", - "fk": "Îles Malouines (Malvinas)", - "fo": "Îles Féroé", - "fj": "Fidji", - "fi": "Finlande", - "fr": "France", - "gf": "Guyane française", - "pf": "Polynésie française", - "tf": "Territoires français du Sud", - "ga": "Gabon", - "gm": "Gambie", - "ge": "Géorgie", - "de": "Allemagne", - "gh": "Ghana", - "gi": "Gibraltar", - "gr": "Grèce", - "gl": "Groenland", - "gd": "Grenade", - "gp": "Guadeloupe", - "gu": "Guam", - "gt": "Guatemala", - "gg": "Guernesey", - "gn": "Guinée", - "gw": "Guinée-Bissau", - "gy": "Guyane", - "ht": "Haïti", - "hm": "Île Heard et îles McDonald", - "va": "Le Saint-Siège", - "hn": "Honduras", - "hk": "Hong Kong", - "hu": "Hongrie", - "is": "Islande", - "in": "Inde", - "id": "Indonésie", - "ir": "Iran (République islamique d')", - "iq": "Irak", - "ie": "Irlande", - "im": "L'île de Man", - "il": "Israël", - "it": "Italie", - "jm": "Jamaïque", - "jp": "Japon", - "je": "Jersey", - "jo": "Jordanie", - "kz": "Kazakhstan", - "ke": "Kenya", - "ki": "Kiribati", - "xk": "Kosovo", - "kp": "Corée (République populaire démocratique de)", - "kr": "Corée (République de)", - "kw": "Koweït", - "kg": "Kirghizistan", - "la": "République démocratique populaire du Lao", - "lv": "Lettonie", - "lb": "Liban", - "ls": "Lesotho", - "lr": "Liberia", - "ly": "Libye", - "li": "Liechtenstein", - "lt": "Lituanie", - "lu": "Luxembourg", - "mo": "Macao", - "mg": "Madagascar", - "mw": "Malawi", - "my": "Malaisie", - "mv": "Maldives", - "ml": "Mali", - "mt": "Malte", - "mh": "Îles Marshall", - "mq": "Martinique", - "mr": "Mauritanie", - "mu": "Maurice", - "yt": "Mayotte", - "mx": "Mexique", - "fm": "Micronésie (États fédérés de)", - "md": "Moldavie (République de)", - "mc": "Monaco", - "mn": "Mongolie", - "me": "Monténégro", - "ms": "Montserrat", - "ma": "Maroc", - "mz": "Mozambique", - "mm": "Myanmar", - "na": "Namibie", - "nr": "Nauru", - "np": "Népal", - "nl": "Pays-Bas", - "an": "Antilles néerlandaises", - "nc": "Nouvelle-Calédonie", - "nz": "Nouvelle-Zélande", - "ni": "Nicaragua", - "ne": "Niger", - "ng": "Nigeria", - "nu": "Niue", - "nf": "Ile de Norfolk", - "mk": "Macédoine du Nord", - "mp": "Îles Mariannes du Nord", - "no": "Norvège", - "om": "Oman", - "pk": "Pakistan", - "pw": "Palau", - "ps": "Territoires palestiniens occupés", - "pa": "Panama", - "pg": "Papouasie-Nouvelle-Guinée", - "py": "Paraguay", - "pe": "Pérou", - "ph": "Philippines", - "pn": "Pitcairn", - "pl": "Pologne", - "pt": "Portugal", - "pr": "Porto Rico", - "qa": "Qatar", - "re": "Réunion", - "ro": "Roumanie", - "ru": "Fédération de Russie", - "rw": "Rwanda", - "bl": "Saint Barthélemy", - "sh": "Sainte-Hélène, Ascension et Tristan da Cunha", - "kn": "Saint-Christophe-et-Nevis", - "lc": "Sainte-Lucie", - "mf": "Saint Martin (partie française)", - "pm": "Saint-Pierre-et-Miquelon", - "vc": "Saint Vincent et les Grenadines", - "ws": "Samoa", - "sm": "Saint-Marin", - "st": "Sao Tomé et Principe", - "sa": "Arabie Saoudite", - "sn": "Sénégal", - "rs": "Serbie", - "sc": "Seychelles", - "sl": "Sierra Leone", - "sg": "Singapour", - "sx": "Sint Maarten (partie néerlandaise)", - "sk": "Slovaquie", - "si": "Slovénie", - "sb": "Îles Salomon", - "so": "Somalie", - "za": "Afrique du Sud", - "gs": "Géorgie du Sud et les îles Sandwich du Sud", - "ss": "Sud-Soudan", - "es": "Espagne", - "lk": "Sri Lanka", - "sd": "Soudan", - "sr": "Suriname", - "sj": "Svalbard et Jan Mayen", - "se": "Suède", - "ch": "Suisse", - "sy": "République arabe syrienne", - "tw": "Taïwan", - "tj": "Tadjikistan", - "tz": "Tanzanie (République-Unie de)", - "th": "Thaïlande", - "tl": "Timor-Leste", - "tg": "Togo", - "tk": "Tokelau", - "to": "Tonga", - "tt": "Trinité-et-Tobago", - "ta": "Tristan da Cunha", - "tn": "Tunisie", - "tr": "Turquie", - "tm": "Turkménistan", - "tc": "Îles Turques et Caïques", - "tv": "Tuvalu", - "ug": "Ouganda", - "ua": "Ukraine", - "ae": "Émirats Arabes Unis", - "gb": "Royaume-Uni de Grande-Bretagne et d'Irlande du Nord", - "un": "Nations Unies", - "us": "États-Unis d'Amérique", - "um": "Îles mineures éloignées des États-Unis", - "uy": "Uruguay", - "uz": "Ouzbékistan", - "vu": "Vanuatu", - "ve": "Venezuela (République bolivarienne du)", - "vn": "Viêt Nam", - "vg": "Îles Vierges (britanniques)", - "vi": "Îles Vierges (États-Unis)", - "wf": "Wallis et Futuna", - "eh": "Sahara occidental", - "ye": "Yémen", - "zm": "Zambie", - "zw": "Zimbabwe" + "Country": { + "ac": "L'île de l'Ascension", + "af": "Afghanistan", + "ax": "Îles Åland", + "al": "Albanie", + "dz": "Algérie", + "as": "Samoa américaines", + "ad": "Andorre", + "ao": "Angola", + "ai": "Anguilla", + "aq": "Antarctique", + "ag": "Antigua-et-Barbuda", + "ar": "Argentine", + "am": "Arménie", + "aw": "Aruba", + "au": "Australie", + "at": "Autriche", + "az": "Azerbaïdjan", + "bs": "Bahamas", + "bh": "Bahreïn", + "bd": "Bangladesh", + "bb": "Barbade", + "by": "Biélorussie", + "be": "Belgique", + "bz": "Belize", + "bj": "Bénin", + "bm": "Bermudes", + "bt": "Bhoutan", + "bo": "Bolivie", + "bq": "Bonaire, Saint-Eustache et Saba", + "ba": "Bosnie-Herzégovine", + "bw": "Botswana", + "bv": "Ile Bouvet", + "br": "Brésil", + "io": "Territoire britannique de l'océan Indien", + "bn": "Brunei Darussalam", + "bg": "Bulgarie", + "bf": "Burkina Faso", + "bi": "Burundi", + "cv": "Cap-Vert", + "kh": "Cambodge", + "cm": "Cameroun", + "ca": "Canada", + "ic": "Îles Canaries", + "ky": "Îles Caïmans", + "cf": "République centrafricaine", + "ea": "Ceuta & Melilla", + "td": "Tchad", + "cl": "Chili", + "cn": "Chine", + "cx": "Ile de Noël", + "cc": "Îles Cocos (Keeling)", + "co": "Colombie", + "km": "Comores", + "cg": "Congo", + "cd": "Congo (République démocratique du)", + "ck": "Îles Cook", + "cr": "Costa Rica", + "ci": "Côte d'Ivoire", + "hr": "Croatie", + "cu": "Cuba", + "cw": "Curaçao", + "cy": "Chypre", + "cz": "Tchéquie", + "dk": "Danemark", + "dg": "Diego Garcia", + "dj": "Djibouti", + "dm": "Dominique", + "do": "République dominicaine", + "tp": "Timor oriental", + "ec": "Équateur", + "eg": "Égypte", + "sv": "Le Salvador", + "gq": "Guinée équatoriale", + "er": "Érythrée", + "ee": "Estonie", + "sz": "Eswatini", + "et": "Éthiopie", + "ez": "Zone euro", + "fk": "Îles Malouines (Malvinas)", + "fo": "Îles Féroé", + "fj": "Fidji", + "fi": "Finlande", + "fr": "France", + "gf": "Guyane française", + "pf": "Polynésie française", + "tf": "Territoires français du Sud", + "ga": "Gabon", + "gm": "Gambie", + "ge": "Géorgie", + "de": "Allemagne", + "gh": "Ghana", + "gi": "Gibraltar", + "gr": "Grèce", + "gl": "Groenland", + "gd": "Grenade", + "gp": "Guadeloupe", + "gu": "Guam", + "gt": "Guatemala", + "gg": "Guernesey", + "gn": "Guinée", + "gw": "Guinée-Bissau", + "gy": "Guyane", + "ht": "Haïti", + "hm": "Île Heard et îles McDonald", + "va": "Le Saint-Siège", + "hn": "Honduras", + "hk": "Hong Kong", + "hu": "Hongrie", + "is": "Islande", + "in": "Inde", + "id": "Indonésie", + "ir": "Iran (République islamique d')", + "iq": "Irak", + "ie": "Irlande", + "im": "L'île de Man", + "il": "Israël", + "it": "Italie", + "jm": "Jamaïque", + "jp": "Japon", + "je": "Jersey", + "jo": "Jordanie", + "kz": "Kazakhstan", + "ke": "Kenya", + "ki": "Kiribati", + "xk": "Kosovo", + "kp": "Corée (République populaire démocratique de)", + "kr": "Corée (République de)", + "kw": "Koweït", + "kg": "Kirghizistan", + "la": "République démocratique populaire du Lao", + "lv": "Lettonie", + "lb": "Liban", + "ls": "Lesotho", + "lr": "Liberia", + "ly": "Libye", + "li": "Liechtenstein", + "lt": "Lituanie", + "lu": "Luxembourg", + "mo": "Macao", + "mg": "Madagascar", + "mw": "Malawi", + "my": "Malaisie", + "mv": "Maldives", + "ml": "Mali", + "mt": "Malte", + "mh": "Îles Marshall", + "mq": "Martinique", + "mr": "Mauritanie", + "mu": "Maurice", + "yt": "Mayotte", + "mx": "Mexique", + "fm": "Micronésie (États fédérés de)", + "md": "Moldavie (République de)", + "mc": "Monaco", + "mn": "Mongolie", + "me": "Monténégro", + "ms": "Montserrat", + "ma": "Maroc", + "mz": "Mozambique", + "mm": "Myanmar", + "na": "Namibie", + "nr": "Nauru", + "np": "Népal", + "nl": "Pays-Bas", + "an": "Antilles néerlandaises", + "nc": "Nouvelle-Calédonie", + "nz": "Nouvelle-Zélande", + "ni": "Nicaragua", + "ne": "Niger", + "ng": "Nigeria", + "nu": "Niue", + "nf": "Ile de Norfolk", + "mk": "Macédoine du Nord", + "mp": "Îles Mariannes du Nord", + "no": "Norvège", + "om": "Oman", + "pk": "Pakistan", + "pw": "Palau", + "ps": "Territoires palestiniens occupés", + "pa": "Panama", + "pg": "Papouasie-Nouvelle-Guinée", + "py": "Paraguay", + "pe": "Pérou", + "ph": "Philippines", + "pn": "Pitcairn", + "pl": "Pologne", + "pt": "Portugal", + "pr": "Porto Rico", + "qa": "Qatar", + "re": "Réunion", + "ro": "Roumanie", + "ru": "Fédération de Russie", + "rw": "Rwanda", + "bl": "Saint Barthélemy", + "sh": "Sainte-Hélène, Ascension et Tristan da Cunha", + "kn": "Saint-Christophe-et-Nevis", + "lc": "Sainte-Lucie", + "mf": "Saint Martin (partie française)", + "pm": "Saint-Pierre-et-Miquelon", + "vc": "Saint Vincent et les Grenadines", + "ws": "Samoa", + "sm": "Saint-Marin", + "st": "Sao Tomé et Principe", + "sa": "Arabie Saoudite", + "sn": "Sénégal", + "rs": "Serbie", + "sc": "Seychelles", + "sl": "Sierra Leone", + "sg": "Singapour", + "sx": "Sint Maarten (partie néerlandaise)", + "sk": "Slovaquie", + "si": "Slovénie", + "sb": "Îles Salomon", + "so": "Somalie", + "za": "Afrique du Sud", + "gs": "Géorgie du Sud et les îles Sandwich du Sud", + "ss": "Sud-Soudan", + "es": "Espagne", + "lk": "Sri Lanka", + "sd": "Soudan", + "sr": "Suriname", + "sj": "Svalbard et Jan Mayen", + "se": "Suède", + "ch": "Suisse", + "sy": "République arabe syrienne", + "tw": "Taïwan", + "tj": "Tadjikistan", + "tz": "Tanzanie (République-Unie de)", + "th": "Thaïlande", + "tl": "Timor-Leste", + "tg": "Togo", + "tk": "Tokelau", + "to": "Tonga", + "tt": "Trinité-et-Tobago", + "ta": "Tristan da Cunha", + "tn": "Tunisie", + "tr": "Turquie", + "tm": "Turkménistan", + "tc": "Îles Turques et Caïques", + "tv": "Tuvalu", + "ug": "Ouganda", + "ua": "Ukraine", + "ae": "Émirats Arabes Unis", + "gb": "Royaume-Uni de Grande-Bretagne et d'Irlande du Nord", + "un": "Nations Unies", + "us": "États-Unis d'Amérique", + "um": "Îles mineures éloignées des États-Unis", + "uy": "Uruguay", + "uz": "Ouzbékistan", + "vu": "Vanuatu", + "ve": "Venezuela (République bolivarienne du)", + "vn": "Viêt Nam", + "vg": "Îles Vierges (britanniques)", + "vi": "Îles Vierges (États-Unis)", + "wf": "Wallis et Futuna", + "eh": "Sahara occidental", + "ye": "Yémen", + "zm": "Zambie", + "zw": "Zimbabwe" + } } \ No newline at end of file diff --git a/public/static/locales/fr/donate.json b/public/static/locales/fr/donate.json index 78be66baeb..270bc94a75 100644 --- a/public/static/locales/fr/donate.json +++ b/public/static/locales/fr/donate.json @@ -1,114 +1,116 @@ { - "fortreeCountTrees": "for {{treeCount}} Tree", - "fortreeCountTrees_plural": "for {{treeCount}} Trees", - "yourTreesPlantedByOnLocation": "Vos {{treeCount}} arbres seront plantés par {{projectName}} à {{location}}.", - "yourTreesPlantedByOnLocation_plural": "Vos {{treeCount}} arbres seront plantés par {{projectName}} à {{location}}.", - "myTreesPlantedByOnLocation": "Mes {{treeCount}} arbres sont plantés à {{location}}.", - "myTreesPlantedByOnLocation_plural": "Mes {{treeCount}} arbres sont plantés à {{location}}.", - "topProjects": "Principaux projets", - "allCountProjects": "Tous {{projectCount}} Projets", - "searchProjects": "Recherche de projets", - "viewProfile": "Voir le profil", - "contactDetails": "Coordonnées", - "readMore": "En savoir plus", - "readLess": "Lire moins", - "treeDonation": "Don d'arbres", - "myDonationGiftToSomeone": "Mon don est dédié à quelqu'un", - "taxDeductionNotYetAvailable": "La déduction fiscale n'est pas encore disponible pour ", - "taxDeductionNotAvailableForProject": "La déduction fiscale n'est pas encore disponible pour ce projet", - "youWillReceiveTaxDeduction": "Vous recevrez un reçu de déduction fiscale pour ", - "toProjectByOrganization": "Pour {{projectName}} par {{organizationName}}", - "firstName": "Prénom", - "lastName": "Nom de famille", - "email": "Email", - "address": "Adresse", - "city": "Ville", - "zipCode": "Code postal/Zip", - "zipCodeAlphaNumValidation": "Le code postal n'est pas valide", - "country": "Pays", - "isACompanyDonation": "Ce don est effectué par une entreprise", - "companyName": "Nom de la société", - "giftRecipient": "Destinataire du cadeau", - "directGiftRecipient": "Ce don permet de soutenir", - "recipientName": "Nom du bénéficiaire", - "recipientNameRequired": "Le nom du bénéficiaire est requis", - "removeRecipient": "Supprimer", - "giftMessage": "Message cadeau", - "firstNameRequired": "Le champ Prénom est requis", - "lastNameRequired": "Le champ \"Nom\" est requis", - "emailRequired": "L'adresse électronique est requis", - "addressRequired": "L'adresse est requis", - "cityRequired": "La ville est requis", - "countryRequired": "Le pays est requis", - "companyRequired": "Le nom de la société est obligatoire", - "paymentDetails": "Détails du paiement", - "validationFailed": "Échec de la validation", - "seedingYourDonation": "Amorcer votre don", - "pleaseDoNotCloseThisTab": "Veuillez ne pas fermer cet onglet !", - "perTree": "par arbre", - "stopTalkingStartPlanting": "Arrêtez de parler. Commencez à planter.", - "creditDebitCard": "Carte de crédit/débit", - "cardNumber": "Numéro de la carte", - "expDate": "Exp. Date (MM/AA)", - "selectCurrency": "Sélectionnez votre devise", - "treeDonationWithPFP": "Don d'arbres avec le programme \"Plantons pour la planète\"", - "unavailable": "non disponible", - "donationSuccessfulWith": "Votre {{currency}} {{totalAmount}}Le don a été payé avec succès avec {{paymentTypeUsed}}.", - "donationSuccessful": "Votre {{currency}}{{totalAmount}} Le don a été couronné de succès.", - "giftSentMessage": "Nous avons envoyé un email à {{recipientName}} au sujet du cadeau.", - "contributionMessage": "Peut-être leur rendrez-vous visite un jour ? En attendant, vous pourriez peut-être faire découvrir à vos amis des arbres qui leur appartiennent en leur parlant des vôtres ?", - "plantTreesAtURL": "Planter des arbres à {{url}}", - "copiedToClipboard": "Texte copié dans le presse-papiers !", - "noProjectsFound": "Aucun projet trouvé", - "inTimeOfTaxReturns": "à temps pour les déclarations d'impôts.", - "titleToShare": "Planter des arbres contre la crise climatique !", - "giftToName": "Don à", - "thisDonationSupports": "Ce don soutient", - "plantTreesWith": "Planter des arbres avec", - "textToShare": "Rejoignez {{name}} et des milliers d'autres pour planter un billion d'arbres pour lutter contre la crise climatique ! #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "thankyouHeaderText": "Nous sommes sur la voie d'une \n

Trillion d'arbres

", - "shareTextTitle": "Arrêtez de parler. Commencer à planter", - "textToShareLinkedin": "Rejoignez {{name}} et des milliers d'autres pour planter un mille milliards d'arbres afin de lutter contre la crise climatique", - "textToShareForMe": "Rejoignez-moi ainsi que des milliers d'autres personnes pour planter mille milliards d'arbres et lutter contre la crise climatique", - "donationTokenInvalid": "Le jeton de don fourni n'est pas valable.", - "giftTo": "Cadeau à", - "supporting": "Soutenir", - "selectProject": "Sélectionner un projet", - "giftValidation": "Entrer les détails du cadeau", - "minDonate": "Le montant minimum du don est de", - "noPaymentMethodError": "Impossible de traiter votre paiement, veuillez réessayer.", - "somethingWentWrong": "Quelque chose s'est mal passé, veuillez réessayer bientôt !", - "underMaintenance": "L'application est en cours de maintenance, veuillez consulter status.plant-for-the-planet.org pour plus de détails", - "waitingConfirmation": "Nous attendons actuellement une confirmation de votre banque et vous enverrons un courriel sous peu. N'hésitez pas à fermer cette page.", - "yourDonationRef": "Votre référence de don est {{donationID}}", - "payWithGiroPay": "Payer avec GiroPay", - "payWithSofort": "Payer avec SOFORT", - "donationFailed": "Echec du don", - "donationFailedMessage": "Un problème est survenu lors de votre paiement. Si vous continuez à avoir des problèmes, veuillez nous contacter à l'adresse suivante : support@plant-for-the-planet.org", - "donationPending": "Compléter votre don", - "donationPendingMessage": "Nous attendons actuellement la confirmation de votre banque. Cela pourrait prendre un certain temps, alors n'hésitez pas à fermer cette page. Nous vous enverrons sous peu votre reçu par courrier électronique.", - "sepaMessage": "En fournissant votre IBAN et en confirmant ce paiement, vous autorisez Plant-for-the-Planet and Stripe, notre fournisseur de services de paiement, à envoyer des instructions à votre banque pour débiter votre compte. Vous avez droit à un remboursement de votre banque selon les termes et conditions de votre accord avec votre banque. Si vous avez des problèmes concernant votre don, veuillez nous envoyer un courriel à support@plant-for-the-planet.org", - "donationRef": "Donation Ref", - "sepaDisclaimer": "Les paiements SEPA prennent de 2 à 14 jours ouvrables (généralement 3 à 5 jours). Dès qu'il arrive, nous vous envoyons un courriel de confirmation avec votre certificat d'arbre et nous relevons le compteur d'arbre.", - "sofortDisclaimer": "Les paiements SOFORT prennent de 2 à 14 jours ouvrables (généralement 2 à 3 jours). Dès qu'il arrive, nous vous envoyons un courriel de confirmation avec votre certificat d'arbre et nous relevons le compteur d'arbres.", - "askPublishName": "Afficher mon nom complet dans l'application et les classements Plant-for-the-Planet. ", - "nameAlreadyPublished": "Votre nom complet apparaîtra dans le classement car votre profil Plant-for-the-Planet est actuellement public.", - "orgNamePublishedTax": "Le nom de l'entreprise est visible sur notre classement et notre application. Des reçus de déduction fiscale seront émis pour le même nom.", - "orgNamePublished": "Le nom de l'entreprise est visible sur notre classement et notre application.", - "aboutProject": "À propos du projet", - "acceptingDonations": "Accepter les dons", - "natural-regeneration": "Régénération Naturelle", - "managed-regeneration": "Régénération gérée", - "large-scale-planting": "Restauration à grande échelle", - "agroforestry": "Agroforesterie", - "urban-planting": "Restauration urbaine", - "other-planting": "Restauration", - "mangroves": "Mangroves", - "purpose": "Objectif", - "projectPurpose": "Objectif du projet", - "type": "Type", - "projectType": "Type de projet", - "conservation": "Conservation", - "restoration": "Restauration", - "filters": "Filtres" + "Donate": { + "fortreeCountTrees": "for {{treeCount}} Tree", + "fortreeCountTrees_plural": "for {{treeCount}} Trees", + "yourTreesPlantedByOnLocation": "Vos {{treeCount}} arbres seront plantés par {{projectName}} à {{location}}.", + "yourTreesPlantedByOnLocation_plural": "Vos {{treeCount}} arbres seront plantés par {{projectName}} à {{location}}.", + "myTreesPlantedByOnLocation": "Mes {{treeCount}} arbres sont plantés à {{location}}.", + "myTreesPlantedByOnLocation_plural": "Mes {{treeCount}} arbres sont plantés à {{location}}.", + "topProjects": "Principaux projets", + "allCountProjects": "Tous {{projectCount}} Projets", + "searchProjects": "Recherche de projets", + "viewProfile": "Voir le profil", + "contactDetails": "Coordonnées", + "readMore": "En savoir plus", + "readLess": "Lire moins", + "treeDonation": "Don d'arbres", + "myDonationGiftToSomeone": "Mon don est dédié à quelqu'un", + "taxDeductionNotYetAvailable": "La déduction fiscale n'est pas encore disponible pour ", + "taxDeductionNotAvailableForProject": "La déduction fiscale n'est pas encore disponible pour ce projet", + "youWillReceiveTaxDeduction": "Vous recevrez un reçu de déduction fiscale pour ", + "toProjectByOrganization": "Pour {{projectName}} par {{organizationName}}", + "firstName": "Prénom", + "lastName": "Nom de famille", + "email": "Email", + "address": "Adresse", + "city": "Ville", + "zipCode": "Code postal/Zip", + "zipCodeAlphaNumValidation": "Le code postal n'est pas valide", + "country": "Pays", + "isACompanyDonation": "Ce don est effectué par une entreprise", + "companyName": "Nom de la société", + "giftRecipient": "Destinataire du cadeau", + "directGiftRecipient": "Ce don permet de soutenir", + "recipientName": "Nom du bénéficiaire", + "recipientNameRequired": "Le nom du bénéficiaire est requis", + "removeRecipient": "Supprimer", + "giftMessage": "Message cadeau", + "firstNameRequired": "Le champ Prénom est requis", + "lastNameRequired": "Le champ \"Nom\" est requis", + "emailRequired": "L'adresse électronique est requis", + "addressRequired": "L'adresse est requis", + "cityRequired": "La ville est requis", + "countryRequired": "Le pays est requis", + "companyRequired": "Le nom de la société est obligatoire", + "paymentDetails": "Détails du paiement", + "validationFailed": "Échec de la validation", + "seedingYourDonation": "Amorcer votre don", + "pleaseDoNotCloseThisTab": "Veuillez ne pas fermer cet onglet !", + "perTree": "par arbre", + "stopTalkingStartPlanting": "Arrêtez de parler. Commencez à planter.", + "creditDebitCard": "Carte de crédit/débit", + "cardNumber": "Numéro de la carte", + "expDate": "Exp. Date (MM/AA)", + "selectCurrency": "Sélectionnez votre devise", + "treeDonationWithPFP": "Don d'arbres avec le programme \"Plantons pour la planète\"", + "unavailable": "non disponible", + "donationSuccessfulWith": "Votre {{currency}} {{totalAmount}}Le don a été payé avec succès avec {{paymentTypeUsed}}.", + "donationSuccessful": "Votre {{currency}}{{totalAmount}} Le don a été couronné de succès.", + "giftSentMessage": "Nous avons envoyé un email à {{recipientName}} au sujet du cadeau.", + "contributionMessage": "Peut-être leur rendrez-vous visite un jour ? En attendant, vous pourriez peut-être faire découvrir à vos amis des arbres qui leur appartiennent en leur parlant des vôtres ?", + "plantTreesAtURL": "Planter des arbres à {{url}}", + "copiedToClipboard": "Texte copié dans le presse-papiers !", + "noProjectsFound": "Aucun projet trouvé", + "inTimeOfTaxReturns": "à temps pour les déclarations d'impôts.", + "titleToShare": "Planter des arbres contre la crise climatique !", + "giftToName": "Don à", + "thisDonationSupports": "Ce don soutient", + "plantTreesWith": "Planter des arbres avec", + "textToShare": "Rejoignez {{name}} et des milliers d'autres pour planter un billion d'arbres pour lutter contre la crise climatique ! #StopTalkingStartPlanting #TrillionTrees @trilliontrees", + "thankyouHeaderText": "Nous sommes sur la voie d'une \n

Trillion d'arbres

", + "shareTextTitle": "Arrêtez de parler. Commencer à planter", + "textToShareLinkedin": "Rejoignez {{name}} et des milliers d'autres pour planter un mille milliards d'arbres afin de lutter contre la crise climatique", + "textToShareForMe": "Rejoignez-moi ainsi que des milliers d'autres personnes pour planter mille milliards d'arbres et lutter contre la crise climatique", + "donationTokenInvalid": "Le jeton de don fourni n'est pas valable.", + "giftTo": "Cadeau à", + "supporting": "Soutenir", + "selectProject": "Sélectionner un projet", + "giftValidation": "Entrer les détails du cadeau", + "minDonate": "Le montant minimum du don est de", + "noPaymentMethodError": "Impossible de traiter votre paiement, veuillez réessayer.", + "somethingWentWrong": "Quelque chose s'est mal passé, veuillez réessayer bientôt !", + "underMaintenance": "L'application est en cours de maintenance, veuillez consulter status.plant-for-the-planet.org pour plus de détails", + "waitingConfirmation": "Nous attendons actuellement une confirmation de votre banque et vous enverrons un courriel sous peu. N'hésitez pas à fermer cette page.", + "yourDonationRef": "Votre référence de don est {{donationID}}", + "payWithGiroPay": "Payer avec GiroPay", + "payWithSofort": "Payer avec SOFORT", + "donationFailed": "Echec du don", + "donationFailedMessage": "Un problème est survenu lors de votre paiement. Si vous continuez à avoir des problèmes, veuillez nous contacter à l'adresse suivante : support@plant-for-the-planet.org", + "donationPending": "Compléter votre don", + "donationPendingMessage": "Nous attendons actuellement la confirmation de votre banque. Cela pourrait prendre un certain temps, alors n'hésitez pas à fermer cette page. Nous vous enverrons sous peu votre reçu par courrier électronique.", + "sepaMessage": "En fournissant votre IBAN et en confirmant ce paiement, vous autorisez Plant-for-the-Planet and Stripe, notre fournisseur de services de paiement, à envoyer des instructions à votre banque pour débiter votre compte. Vous avez droit à un remboursement de votre banque selon les termes et conditions de votre accord avec votre banque. Si vous avez des problèmes concernant votre don, veuillez nous envoyer un courriel à support@plant-for-the-planet.org", + "donationRef": "Donation Ref", + "sepaDisclaimer": "Les paiements SEPA prennent de 2 à 14 jours ouvrables (généralement 3 à 5 jours). Dès qu'il arrive, nous vous envoyons un courriel de confirmation avec votre certificat d'arbre et nous relevons le compteur d'arbre.", + "sofortDisclaimer": "Les paiements SOFORT prennent de 2 à 14 jours ouvrables (généralement 2 à 3 jours). Dès qu'il arrive, nous vous envoyons un courriel de confirmation avec votre certificat d'arbre et nous relevons le compteur d'arbres.", + "askPublishName": "Afficher mon nom complet dans l'application et les classements Plant-for-the-Planet. ", + "nameAlreadyPublished": "Votre nom complet apparaîtra dans le classement car votre profil Plant-for-the-Planet est actuellement public.", + "orgNamePublishedTax": "Le nom de l'entreprise est visible sur notre classement et notre application. Des reçus de déduction fiscale seront émis pour le même nom.", + "orgNamePublished": "Le nom de l'entreprise est visible sur notre classement et notre application.", + "aboutProject": "À propos du projet", + "acceptingDonations": "Accepter les dons", + "natural-regeneration": "Régénération Naturelle", + "managed-regeneration": "Régénération gérée", + "large-scale-planting": "Restauration à grande échelle", + "agroforestry": "Agroforesterie", + "urban-planting": "Restauration urbaine", + "other-planting": "Restauration", + "mangroves": "Mangroves", + "purpose": "Objectif", + "projectPurpose": "Objectif du projet", + "type": "Type", + "projectType": "Type de projet", + "conservation": "Conservation", + "restoration": "Restauration", + "filters": "Filtres" + } } \ No newline at end of file diff --git a/public/static/locales/fr/donationLink.json b/public/static/locales/fr/donationLink.json index 6f31cf5a2e..fa17184690 100644 --- a/public/static/locales/fr/donationLink.json +++ b/public/static/locales/fr/donationLink.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "DonationLink": {} +} \ No newline at end of file diff --git a/public/static/locales/fr/editProfile.json b/public/static/locales/fr/editProfile.json index 2051caa345..d20b334a5c 100644 --- a/public/static/locales/fr/editProfile.json +++ b/public/static/locales/fr/editProfile.json @@ -1,35 +1,37 @@ { - "loginTitle": "{{log}} - Connexion", - "signUpText": "Inscription complète", - "profileTypes": "{{item.title}}", - "createAccount": "Créer un compte", - "individual": "Individu", - "tpo": "Organisation de reboisement", - "education": "École", - "organization": "Société", - "profileCreated": "Profil Créé avec succès !", - "profileCreationFailed": "Erreur dans la création du profil. Veuillez réessayer.", - "profileCreationError": "Erreur dans la création du profil.", - "edit": "Modifier le profil", - "privateAccountTxt": "Votre profil est caché et seul votre prénom apparaît dans le classement", - "save": "Sauvegarder", - "profilePicUpdated": "La photo du profil est en cours d'actualisation...", - "profileSaved": "Sauvé avec succès !", - "profileSaveFailed": "Erreur dans la mise à jour du profil.", - "changeAccountToPublic": "Passer à un compte public", - "publicAccount": "Compte public", - "accountPrivacyChangeText": "Pour créer un widget de profil, vous devez avoir un compte public. En cliquant sur Continuer, vous changez vos paramètres de confidentialité en public.", - "continue": "Continuer", - "cancel": "Annuler", - "fieldLabels": { - "profileType": "Je suis un", - "name": "Nom de {{type}}", - "website": "Site web", - "privateAccount": "Compte privé", - "subscribe": "S'abonner aux actualités par email" - }, - "validationErrors": { - "nameRequired": "Saisir un nom", - "websiteInvalid": "Veuillez entrer une URL de site web valide" + "EditProfile": { + "loginTitle": "{{log}} - Connexion", + "signUpText": "Inscription complète", + "profileTypes": "{{item.title}}", + "createAccount": "Créer un compte", + "individual": "Individu", + "tpo": "Organisation de reboisement", + "education": "École", + "organization": "Société", + "profileCreated": "Profil Créé avec succès !", + "profileCreationFailed": "Erreur dans la création du profil. Veuillez réessayer.", + "profileCreationError": "Erreur dans la création du profil.", + "edit": "Modifier le profil", + "privateAccountTxt": "Votre profil est caché et seul votre prénom apparaît dans le classement", + "save": "Sauvegarder", + "profilePicUpdated": "La photo du profil est en cours d'actualisation...", + "profileSaved": "Sauvé avec succès !", + "profileSaveFailed": "Erreur dans la mise à jour du profil.", + "changeAccountToPublic": "Passer à un compte public", + "publicAccount": "Compte public", + "accountPrivacyChangeText": "Pour créer un widget de profil, vous devez avoir un compte public. En cliquant sur Continuer, vous changez vos paramètres de confidentialité en public.", + "continue": "Continuer", + "cancel": "Annuler", + "fieldLabels": { + "profileType": "Je suis un", + "name": "Nom de {{type}}", + "website": "Site web", + "privateAccount": "Compte privé", + "subscribe": "S'abonner aux actualités par email" + }, + "validationErrors": { + "nameRequired": "Saisir un nom", + "websiteInvalid": "Veuillez entrer une URL de site web valide" + } } } \ No newline at end of file diff --git a/public/static/locales/fr/giftfunds.json b/public/static/locales/fr/giftfunds.json index 6f31cf5a2e..b3f526f2ea 100644 --- a/public/static/locales/fr/giftfunds.json +++ b/public/static/locales/fr/giftfunds.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "Giftfunds": {} +} \ No newline at end of file diff --git a/public/static/locales/fr/leaderboard.json b/public/static/locales/fr/leaderboard.json index 805f6745ea..3da0238e6e 100644 --- a/public/static/locales/fr/leaderboard.json +++ b/public/static/locales/fr/leaderboard.json @@ -1,7 +1,9 @@ { - "forestFrontrunners": "Les pionniers de la forêt", - "mostRecent": "Les plus récentes", - "mostTrees": "La plupart des arbres", - "videoTitle": "Et enfin, ce/cette", - "searchUser": "Rechercher un utilisateur" + "Leaderboard": { + "forestFrontrunners": "Les pionniers de la forêt", + "mostRecent": "Les plus récentes", + "mostTrees": "La plupart des arbres", + "videoTitle": "Et enfin, ce/cette", + "searchUser": "Rechercher un utilisateur" + } } \ No newline at end of file diff --git a/public/static/locales/fr/login.json b/public/static/locales/fr/login.json index a5a164e275..ae54b6a904 100644 --- a/public/static/locales/fr/login.json +++ b/public/static/locales/fr/login.json @@ -1,14 +1,16 @@ { - "loginTitle": "{{log}} - Connexion", - "signUpText": "Inscription complète", - "profileTypes": "{{item.title}}", - "profileName": "Nom de {{type}}", - "createAccount": "Créer un compte", - "individual": "Individuel", - "tpo": "Organisation de reboisement", - "education": "École", - "organization": "Société", - "profileCreated": "Profil Créé avec succès !", - "profileCreationFailed": "Erreur dans la création du profil. Veuillez réessayer.", - "profileCreationError": "Erreur dans la création du profil." -} + "Login": { + "loginTitle": "{{log}} - Connexion", + "signUpText": "Inscription complète", + "profileTypes": "{{item.title}}", + "profileName": "Nom de {{type}}", + "createAccount": "Créer un compte", + "individual": "Individuel", + "tpo": "Organisation de reboisement", + "education": "École", + "organization": "Société", + "profileCreated": "Profil Créé avec succès !", + "profileCreationFailed": "Erreur dans la création du profil. Veuillez réessayer.", + "profileCreationError": "Erreur dans la création du profil." + } +} \ No newline at end of file diff --git a/public/static/locales/fr/managePayouts.json b/public/static/locales/fr/managePayouts.json index 6f31cf5a2e..21dfda5e63 100644 --- a/public/static/locales/fr/managePayouts.json +++ b/public/static/locales/fr/managePayouts.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "ManagePayouts": {} +} \ No newline at end of file diff --git a/public/static/locales/fr/manageProjects.json b/public/static/locales/fr/manageProjects.json index 266f8f0114..6043d5f929 100644 --- a/public/static/locales/fr/manageProjects.json +++ b/public/static/locales/fr/manageProjects.json @@ -1,122 +1,124 @@ { - "basicDetails": "Détails de base", - "projectMedia": "Projet Média", - "detailedAnalysis": "Analyse détaillée", - "projectSites": "Sites du projet", - "projectSpending": "Dépenses des projets", - "review": "Revue", - "name": "Nom du projet", - "nameValidation": "Entrer le nom du projet", - "slug": "URL du projet", - "slugValidation": "Entrer l'URL du projet", - "classification": "Type de projet", - "classificationValidation": "Sélectionner le type de projet", - "countTarget": "Cible d'arbres", - "countTargetValidation": "Entrer la cible d'arbres", - "countTargetValidation2": "L'objectif d'arbres devrait être supérieur à 1", - "website": "Site web", - "websiteValidationRequired": "Entrer l'URL du site web", - "websiteValidationInvalid": "URL du site web invalide", - "aboutProject": "À propos du projet", - "aboutProjectValidation": "Compléter À propos du projet", - "receiveDonations": "Recevoir des dons", - "receiveDonationsInfo": "Veuillez l'activer une fois que le profil du projet est complet. Plant-for-the-Planet examinera alors le profil et vous informera si vous êtes éligible pour recevoir un don par le biais de cette plateforme. Cela peut prendre quelques semaines.", - "unitCost": "Coût par arbre (en euros)", - "projectLocation": "Localisation du projet", - "visitorAssistanceLabel": "Je fournirai le logement, l'accès au site et le transport local si un examinateur est envoyé par Plant-pour-la-Planète.", - "publishProject": "Publier le projet", - "saveAndContinue": "Sauvegarder et continuer", - "youtubeURL": "Lien vidéo Youtube", - "youtubeURLValidation": "Lien vidéo Youtube invalide", - "addCaption": "Ajouter une légende", - "yearOfAbandonment": "Année approximative d'abandon", - "plantingDensity": "Densité de plantation", - "employeeCount": "Nombre d'employés", - "mainChallenge": "Principal défi", - "whyThisSite": "Pourquoi ce site ?", - "siteOwner": "Propriétaire du site", - "ownerName": "Nom du propriétaire", - "acquisitionDate": "Date d'acquisition", - "yearOfDegradation": "Année de dégradation", - "causeOfDegradation": "Cause de la dégradation", - "longTermPlan": "Plan à long terme pour le site", - "isCertified": "Ce projet a été certifié", - "certifierName": "Nom du certificateur", - "siteName": "Nom du site", - "spendingYear": "Année", - "spendingAmount": "Dépenses (en euros)", - "resetMessage": "Veuillez d'abord remplir les détails de base", - "uploadPhotos": "Télécharger des photos", - "dragIn": "ou faites-les glisser", - "backToBasic": "Retour aux détails de base", - "projectNotFound": "Projet non trouvé", - "siteOwnerPrivate": "Privé", - "siteOwnerPublic": "Bien public", - "siteOwnerSmallHolding": "Petite exploitation", - "siteOwnerCommunal": "Terre communale", - "siteOwnerOwned": "Propriété du propriétaire", - "siteOwnerOther": "Autres", - "yearAbandonedInfo": "Quand a eu lieu la dernière intervention humaine significative sur le site ? Y compris l'exploitation forestière, l'agriculture, le pâturage du bétail, l'incendie provoqué par l'homme.", - "treePerHa": "arbres par ha", - "employeesCountInfo": "Équivalent d'une semaine de 40 heures. C'est-à-dire que deux employés à mi-temps comptent pour un.", - "max300Chars": "300 caractères maximum autorisés", - "longTermPlanInfo": "Quelles sont les mesures en place pour projeter la forêt à long terme ? Comment ce projet est-il financé ? Quelles sont les ressources qui seront extraites du site ?", - "backToMedia": "Retour aux médias du projet", - "siteStatusPlanting": "Plantation", - "siteStatusPlanted": "Planté", - "siteStatusBarren": "Stérile", - "siteStatusReforestation": "Reboisement", - "siteStatus": "Statut du site", - "selectProjectStatus": "Sélectionner le statut du projet", - "saveAndAddSite": "Enregistrer et ajouter un autre site", - "addSite": "Ajouter un autre site", - "backToAnalysis": "Retour à l'analyse détaillée", - "spendingYearValidation": "Veuillez ajouter l'année de dépense", - "spendingAmountValidation": "Veuillez indiquer le montant dépensé", - "uploadReport": "Télécharger et sauver le rapport", - "dragInPdf": "ou glisser dans un pdf", - "addAnotherYear": "Ajouter une année supplémentaire", - "backToSites": "Retour aux sites des projets", - "certifiedBy": "Certifié par", - "certificationDateValidation": "Veuillez ajouter la date de certification", - "uploadCertificate": "Télécharger le certificat", - "addCertificate": "Ajouter une autre certification", - "dropGeoJson": "Supprimerr .geojson ou .kml", - "projectUnderReview": "Votre projet est en cours d'examen, veuillez patienter.", - "projectForReview": "Vous pouvez maintenant soumettre le projet pour examen.", - "backToSpending": "Retour aux dépenses de projets", - "pendingReview": "En cours d'examen", - "submitForReview": "Soumettre pour examen", - "addProject": "Ajouter un projet", - "abandonment": "Abandon", - "survivalRate": "Taux de reprise", - "survivalRateInfo": "Pourcentage d'arbres qui survivent à la première année de plantation", - "employees": "Employés", - "siteOwnership": "Propriété du site", - "longTermProtection": "Protection à long terme", - "externalCertifications": "Certifications externes", - "projectSpendingFinancial": "Dépenses financières des projets", - "issueDate": "Date d'émission", - "acquisitionYear": "Année d'acquisition", - "largeScalePlanting": "Plantation à grande échelle", - "agroforestry": "Agroforesterie", - "naturalRegeneration": "Régénération naturelle", - "managedRegeneration": "Régénération artificielle", - "urbanPlanting": "Plantation urbaine", - "otherPlanting": "Autres plantations", - "projectType": "Type de projet", - "polygonRequired": "Le polygone est nécessaire", - "fileSizeLimit": "Le fichier est supérieur à 10 mb", - "fileImageOnly": "Le type de fichier doit être une image", - "filePDFOnly": "Le type de fichier doit être PDF", - "acceptedReview": "Les modifications apportées à votre projet sont en direct", - "deniedReview": "Votre avis est refusé", - "saveSite": "Sauvegarder le site", - "latitude": "Latitude", - "longitude": "Longitude", - "latitudeRequired": "La latitude est requise", - "longitudeRequired": "La longitude est requise", - "manageProject": "Gérer les projets", - "descriptionForManageProjects": "Présentez votre travail de restauration pour le suivi et pour recevoir des dons.", - "manageProjects": "Gérer les projets" + "ManageProjects": { + "basicDetails": "Détails de base", + "projectMedia": "Projet Média", + "detailedAnalysis": "Analyse détaillée", + "projectSites": "Sites du projet", + "projectSpending": "Dépenses des projets", + "review": "Revue", + "name": "Nom du projet", + "nameValidation": "Entrer le nom du projet", + "slug": "URL du projet", + "slugValidation": "Entrer l'URL du projet", + "classification": "Type de projet", + "classificationValidation": "Sélectionner le type de projet", + "countTarget": "Cible d'arbres", + "countTargetValidation": "Entrer la cible d'arbres", + "countTargetValidation2": "L'objectif d'arbres devrait être supérieur à 1", + "website": "Site web", + "websiteValidationRequired": "Entrer l'URL du site web", + "websiteValidationInvalid": "URL du site web invalide", + "aboutProject": "À propos du projet", + "aboutProjectValidation": "Compléter À propos du projet", + "receiveDonations": "Recevoir des dons", + "receiveDonationsInfo": "Veuillez l'activer une fois que le profil du projet est complet. Plant-for-the-Planet examinera alors le profil et vous informera si vous êtes éligible pour recevoir un don par le biais de cette plateforme. Cela peut prendre quelques semaines.", + "unitCost": "Coût par arbre (en euros)", + "projectLocation": "Localisation du projet", + "visitorAssistanceLabel": "Je fournirai le logement, l'accès au site et le transport local si un examinateur est envoyé par Plant-pour-la-Planète.", + "publishProject": "Publier le projet", + "saveAndContinue": "Sauvegarder et continuer", + "youtubeURL": "Lien vidéo Youtube", + "youtubeURLValidation": "Lien vidéo Youtube invalide", + "addCaption": "Ajouter une légende", + "yearOfAbandonment": "Année approximative d'abandon", + "plantingDensity": "Densité de plantation", + "employeeCount": "Nombre d'employés", + "mainChallenge": "Principal défi", + "whyThisSite": "Pourquoi ce site ?", + "siteOwner": "Propriétaire du site", + "ownerName": "Nom du propriétaire", + "acquisitionDate": "Date d'acquisition", + "yearOfDegradation": "Année de dégradation", + "causeOfDegradation": "Cause de la dégradation", + "longTermPlan": "Plan à long terme pour le site", + "isCertified": "Ce projet a été certifié", + "certifierName": "Nom du certificateur", + "siteName": "Nom du site", + "spendingYear": "Année", + "spendingAmount": "Dépenses (en euros)", + "resetMessage": "Veuillez d'abord remplir les détails de base", + "uploadPhotos": "Télécharger des photos", + "dragIn": "ou faites-les glisser", + "backToBasic": "Retour aux détails de base", + "projectNotFound": "Projet non trouvé", + "siteOwnerPrivate": "Privé", + "siteOwnerPublic": "Bien public", + "siteOwnerSmallHolding": "Petite exploitation", + "siteOwnerCommunal": "Terre communale", + "siteOwnerOwned": "Propriété du propriétaire", + "siteOwnerOther": "Autres", + "yearAbandonedInfo": "Quand a eu lieu la dernière intervention humaine significative sur le site ? Y compris l'exploitation forestière, l'agriculture, le pâturage du bétail, l'incendie provoqué par l'homme.", + "treePerHa": "arbres par ha", + "employeesCountInfo": "Équivalent d'une semaine de 40 heures. C'est-à-dire que deux employés à mi-temps comptent pour un.", + "max300Chars": "300 caractères maximum autorisés", + "longTermPlanInfo": "Quelles sont les mesures en place pour projeter la forêt à long terme ? Comment ce projet est-il financé ? Quelles sont les ressources qui seront extraites du site ?", + "backToMedia": "Retour aux médias du projet", + "siteStatusPlanting": "Plantation", + "siteStatusPlanted": "Planté", + "siteStatusBarren": "Stérile", + "siteStatusReforestation": "Reboisement", + "siteStatus": "Statut du site", + "selectProjectStatus": "Sélectionner le statut du projet", + "saveAndAddSite": "Enregistrer et ajouter un autre site", + "addSite": "Ajouter un autre site", + "backToAnalysis": "Retour à l'analyse détaillée", + "spendingYearValidation": "Veuillez ajouter l'année de dépense", + "spendingAmountValidation": "Veuillez indiquer le montant dépensé", + "uploadReport": "Télécharger et sauver le rapport", + "dragInPdf": "ou glisser dans un pdf", + "addAnotherYear": "Ajouter une année supplémentaire", + "backToSites": "Retour aux sites des projets", + "certifiedBy": "Certifié par", + "certificationDateValidation": "Veuillez ajouter la date de certification", + "uploadCertificate": "Télécharger le certificat", + "addCertificate": "Ajouter une autre certification", + "dropGeoJson": "Supprimerr .geojson ou .kml", + "projectUnderReview": "Votre projet est en cours d'examen, veuillez patienter.", + "projectForReview": "Vous pouvez maintenant soumettre le projet pour examen.", + "backToSpending": "Retour aux dépenses de projets", + "pendingReview": "En cours d'examen", + "submitForReview": "Soumettre pour examen", + "addProject": "Ajouter un projet", + "abandonment": "Abandon", + "survivalRate": "Taux de reprise", + "survivalRateInfo": "Pourcentage d'arbres qui survivent à la première année de plantation", + "employees": "Employés", + "siteOwnership": "Propriété du site", + "longTermProtection": "Protection à long terme", + "externalCertifications": "Certifications externes", + "projectSpendingFinancial": "Dépenses financières des projets", + "issueDate": "Date d'émission", + "acquisitionYear": "Année d'acquisition", + "largeScalePlanting": "Plantation à grande échelle", + "agroforestry": "Agroforesterie", + "naturalRegeneration": "Régénération naturelle", + "managedRegeneration": "Régénération artificielle", + "urbanPlanting": "Plantation urbaine", + "otherPlanting": "Autres plantations", + "projectType": "Type de projet", + "polygonRequired": "Le polygone est nécessaire", + "fileSizeLimit": "Le fichier est supérieur à 10 mb", + "fileImageOnly": "Le type de fichier doit être une image", + "filePDFOnly": "Le type de fichier doit être PDF", + "acceptedReview": "Les modifications apportées à votre projet sont en direct", + "deniedReview": "Votre avis est refusé", + "saveSite": "Sauvegarder le site", + "latitude": "Latitude", + "longitude": "Longitude", + "latitudeRequired": "La latitude est requise", + "longitudeRequired": "La longitude est requise", + "manageProject": "Gérer les projets", + "descriptionForManageProjects": "Présentez votre travail de restauration pour le suivi et pour recevoir des dons.", + "manageProjects": "Gérer les projets" + } } \ No newline at end of file diff --git a/public/static/locales/fr/maps.json b/public/static/locales/fr/maps.json index 63d4531da5..0a8af0f1d8 100644 --- a/public/static/locales/fr/maps.json +++ b/public/static/locales/fr/maps.json @@ -1,45 +1,47 @@ { - "explore": "Explorer", - "forests": "Forêts actuelles", - "restoration": "Potentiel de restauration", - "deforestation": "Déforestation", - "planted": "Planté", - "projects": "Projets", - "3trilliontrees": "Le monde compte aujourd'hui environ 3 mille milliards d'arbres (\"Forêts\"). Et de l'espace suffisant pour mille milliards de plus (\"Potentiel de reboisement\").", - "high": "Haut", - "low": "Faible", - "forestInfo": "Il existe actuellement 3.04 mille milliards d'arbres dans le monde. il y en avait mille milliards avant que l'homme ne commence à abattre des forêts, il y a environ 11 000 ans. ", - "restorationInfo": " Un demi-milliard d'hectares se prêtent à la restauration à grande échelle de forêts fermées. En outre, un milliard et demi d'hectares sont mieux situés pour la restauration de la mosaïque, qui combine les forêts avec d'autres utilisations des terres comme l'agroforesterie, l'agriculture à petite échelle et les colonies.", - "location": "Lieu", - "timeTravel": "Voyage dans le temps", - "vegetationChange": "Changement de végétation", - "beta": "BETA", - "baseLayer": "Couche de base et cartes vectorielles", - "satelliteImagery": "Imagerie par satellite", - "fieldData": "Données de terrain", - "trees": "Arbres", - "ha": "ha", - "plantingDate": "Date de plantation", - "plantingDensity": "Densité de plantation", - "speciesPlanted": "Espèces plantées", - "sampleTrees": "Arbres échantillon", - "meterHigh": "m de haut", - "cmWide": "cm de large", - "treesPerHa": "arbres par ha", - "sampleTree": "Arbre échantillon", - "scientificName": "Nom scientifique", - "measurements": "Mesures", - "treeTag": "Étiquette d'arbre", - "1Tree": "1 arbre", - "plot": "Plot", - "tag": "Étiquette", - "plantingDensityInfo": "En cas d'enrichissement, la densité de plantation peut être plus faible.", - "plantationDensityFormula": "Densité de plantation = nombre d'arbres / surface de plantation", - "unknown": "Inconnu", - "showWholeArea": "Afficher toute la zone", - "daysAgo": "{{days}} jours", - "today": "Aujourd'hui", - "yesterday": "Hier", - "clickForDetails": "Cliquez pour plus de détails", - "treeMapper": "TreeMapper" + "Maps": { + "explore": "Explorer", + "forests": "Forêts actuelles", + "restoration": "Potentiel de restauration", + "deforestation": "Déforestation", + "planted": "Planté", + "projects": "Projets", + "3trilliontrees": "Le monde compte aujourd'hui environ 3 mille milliards d'arbres (\"Forêts\"). Et de l'espace suffisant pour mille milliards de plus (\"Potentiel de reboisement\").", + "high": "Haut", + "low": "Faible", + "forestInfo": "Il existe actuellement 3.04 mille milliards d'arbres dans le monde. il y en avait mille milliards avant que l'homme ne commence à abattre des forêts, il y a environ 11 000 ans. ", + "restorationInfo": " Un demi-milliard d'hectares se prêtent à la restauration à grande échelle de forêts fermées. En outre, un milliard et demi d'hectares sont mieux situés pour la restauration de la mosaïque, qui combine les forêts avec d'autres utilisations des terres comme l'agroforesterie, l'agriculture à petite échelle et les colonies.", + "location": "Lieu", + "timeTravel": "Voyage dans le temps", + "vegetationChange": "Changement de végétation", + "beta": "BETA", + "baseLayer": "Couche de base et cartes vectorielles", + "satelliteImagery": "Imagerie par satellite", + "fieldData": "Données de terrain", + "trees": "Arbres", + "ha": "ha", + "plantingDate": "Date de plantation", + "plantingDensity": "Densité de plantation", + "speciesPlanted": "Espèces plantées", + "sampleTrees": "Arbres échantillon", + "meterHigh": "m de haut", + "cmWide": "cm de large", + "treesPerHa": "arbres par ha", + "sampleTree": "Arbre échantillon", + "scientificName": "Nom scientifique", + "measurements": "Mesures", + "treeTag": "Étiquette d'arbre", + "1Tree": "1 arbre", + "plot": "Plot", + "tag": "Étiquette", + "plantingDensityInfo": "En cas d'enrichissement, la densité de plantation peut être plus faible.", + "plantationDensityFormula": "Densité de plantation = nombre d'arbres / surface de plantation", + "unknown": "Inconnu", + "showWholeArea": "Afficher toute la zone", + "daysAgo": "{{days}} jours", + "today": "Aujourd'hui", + "yesterday": "Hier", + "clickForDetails": "Cliquez pour plus de détails", + "treeMapper": "TreeMapper" + } } \ No newline at end of file diff --git a/public/static/locales/fr/me.json b/public/static/locales/fr/me.json index 7358f0db13..2242fca189 100644 --- a/public/static/locales/fr/me.json +++ b/public/static/locales/fr/me.json @@ -1,144 +1,146 @@ { - "treesPlanted": "Arbre planté", - "treesPlanted_plural": "Arbres plantés", - "target": "Cible", - "share": "Partager", - "registerTrees": "Enregistrer les arbres", - "registerTreesDescription": "Enregistrer les arbres que vous avez plantés vous-même, par exemple dans votre jardin.", - "redeem": "Redeem", - "myForest": "Ma forêt", - "giftToGiftee": "Cadeau à {{gifteeName}}", - "settingManageProject": "Gérer les projets", - "deleteAccount": "Supprimer le compte", - "userTree": "Enregistrer les arbres", - "accountHistory": "Historique du compte", - "logout": "Déconnexion", - "close": "Fermer", - "support": "Soutien", - "addTarget": "Ajouter une cible", - "noOfTrees": "Combien d'arbres?", - "datePlanted": "Date de plantation", - "speciesIsRequired": "L'espèce est obligatoire", - "treeSpecies": "Espèces d'arbres", - "drawPolygon": "Dessiner la zone où vous avez planté les arbres. Cliquer à nouveau sur le premier emplacement lorsque vous avez terminé.", - "selectLocation": "Sélectionner le lieu de plantation des arbres sur la carte", - "registerButton": "S'inscrire", - "startDrawing": "Commencer à dessiner", - "save": "Sauvegarder", - "treesRequired": "Le nombre d'arbres est requis", - "wentWrong": "Quelque chose a mal tourné. Contacter support@plant-for-the-planet.org", - "locationMissing": "Sélectionnez un lieu sur la carte", - "uploadPhotos": "Télécharger des photos", - "dragHere": "ou glisser ici", - "contribNotFound": "Contribution non trouvée", - "errorOccured": "Erreur commise", - "contribSuccess": "Ajouté avec succès {{treeCount}} {{treeSpecies}} 🌳 de {{plantDate}}", - "moreThanOne": "1 arbre minimum requis", - "registered": "Enregistré", - "receivedTrees": "Arbres reçus", - "receivedFrom": "Reçu de {{name}}", - "redeemedTrees": "Arbres rachetés", - "myAccount": "Mon compte", - "all": "Tous", - "noRecords": "Aucun enregistrement", - "filters": "Filtres", - "registeredTrees": "Arbres enregistrés", - "embedWidget": "Créer un widget de profil", - "tree-donation": "Don d'arbres", - "tree-gift": "Cadeau d'arbre", - "tree-cash": "TreeCash", - "trees": "Arbres", - "amount": "Montant", - "created": "Date de création", - "project": "Nom du projet", - "method": "Mode de paiement", - "treeCount": "Nombre d'arbres", - "lastUpdate": "Dernière mise à jour", - "donorCertificate": "Certificat de donateur", - "download": "Télécharger", - "donations": "Dons", - "in-progress": "En cours", - "donation-in-progress": "En cours", - "donation-tree-cash": "TreeCash", - "donation-success": "Réussite", - "cancelled": "Annulé", - "card": "Carte", - "sepa": "SEPA", - "success": "Succès", - "paid": "Succès", - "initiated": "Initiée", - "failed": "Échoué", - "pending": "En attente", - "refunded": "Remboursé", - "referred": "Référé", - "in-dispute": "En litige", - "dispute-lost": "Litige perdu", - "nameForest": "La forêt des {{name}}", - "taxReceipt": "Reçu fiscal", - "history": "Histoire", - "treemapper": "TreeMapper", - "register-trees": "Enregistrer les arbres", - "manage-projects": "Gérer les projets", - "app-payouts": "Paiements de l'application", - "app-payout-open": "Paiements en cours", - "app-payout-pending": "Paiements en attente", - "app-payout-assigned": "Paiements assignés", - "app-payout-complete": "Paiements terminés", - "app-payout": "Paiements de l'application", - "reference": "Référence", - "fee": "Frais d'inscription", - "net": "NET", - "status": "Statut", - "paymentDate": "Date de paiement", - "bankName": "Nom de la banque", - "accountHolder": "Titulaire du compte", - "aba": "ABA", - "bic": "BIC", - "iban": "IBAN", - "swift": "SWIFT", - "isDefault": "Compte par défaut", - "bankAccountCreated": "Compte bancaire créé", - "bankAccountUpdated": "Compte bancaire mis à jour", - "donation-all": "Dons", - "donation-canceled": "Annulé", - "payout-all": "Paiements", - "payout-action-required": "Action requise", - "payout-pending": "En attente", - "payout-completed": "Complété", - "donorName": "Nom du donateur", - "paidAmount": "Montant payé", - "projectGuid": "GUID du projet", - "totalAmount": "Montant total", - "disputeFee": "Frais de litige", - "planetFee": "Frais Planet", - "transactionFee": "Frais de transaction", - "transferFee": "Frais de transfert", - "open": "Ouvrir", - "downloads": "Télécharger", - "account": "Comptes", - "loadMore": "Charger plus", - "setTarget": "Fixer un objectif", - "targetSave": "Sauvegarder", - "targetErrorMessage": "Le nombre doit être supérieur à zéro", - "taxDeductibleReceipt": "Reçu déductible des impôts", - "giftCertificate": "Certificat de don", - "paypal-paypal": "Paypal", - "stripe-": "Stripe", - "unknown-method": "Inconnu", - "stripe-sofort": "Sofort (Stripe)", - "tree-cash-tree-cash": "TreeCash", - "stripe-card": "Carte de crédit/débit", - "stripe-giropay": "GiroPay (Stripe)", - "action-required": "Action requise", - "completed": "Complété", - "donationsSubTitle": "Gérez tous vos dons et paiements à partir d'un seul endroit.", - "payments": "Paiements", - "stripe-sepa_debit": "SEPA (Stripe)", - "offline-offline": "Hors ligne", - "profile": "Profil", - "projects": "Projets", - "settings": "Paramètres", - "editProfile": "Editer le profil", - "deleteProfile": "Supprimer le Profil", - "widgets": "Widgets" + "Me": { + "treesPlanted": "Arbre planté", + "treesPlanted_plural": "Arbres plantés", + "target": "Cible", + "share": "Partager", + "registerTrees": "Enregistrer les arbres", + "registerTreesDescription": "Enregistrer les arbres que vous avez plantés vous-même, par exemple dans votre jardin.", + "redeem": "Redeem", + "myForest": "Ma forêt", + "giftToGiftee": "Cadeau à {{gifteeName}}", + "settingManageProject": "Gérer les projets", + "deleteAccount": "Supprimer le compte", + "userTree": "Enregistrer les arbres", + "accountHistory": "Historique du compte", + "logout": "Déconnexion", + "close": "Fermer", + "support": "Soutien", + "addTarget": "Ajouter une cible", + "noOfTrees": "Combien d'arbres?", + "datePlanted": "Date de plantation", + "speciesIsRequired": "L'espèce est obligatoire", + "treeSpecies": "Espèces d'arbres", + "drawPolygon": "Dessiner la zone où vous avez planté les arbres. Cliquer à nouveau sur le premier emplacement lorsque vous avez terminé.", + "selectLocation": "Sélectionner le lieu de plantation des arbres sur la carte", + "registerButton": "S'inscrire", + "startDrawing": "Commencer à dessiner", + "save": "Sauvegarder", + "treesRequired": "Le nombre d'arbres est requis", + "wentWrong": "Quelque chose a mal tourné. Contacter support@plant-for-the-planet.org", + "locationMissing": "Sélectionnez un lieu sur la carte", + "uploadPhotos": "Télécharger des photos", + "dragHere": "ou glisser ici", + "contribNotFound": "Contribution non trouvée", + "errorOccured": "Erreur commise", + "contribSuccess": "Ajouté avec succès {{treeCount}} {{treeSpecies}} 🌳 de {{plantDate}}", + "moreThanOne": "1 arbre minimum requis", + "registered": "Enregistré", + "receivedTrees": "Arbres reçus", + "receivedFrom": "Reçu de {{name}}", + "redeemedTrees": "Arbres rachetés", + "myAccount": "Mon compte", + "all": "Tous", + "noRecords": "Aucun enregistrement", + "filters": "Filtres", + "registeredTrees": "Arbres enregistrés", + "embedWidget": "Créer un widget de profil", + "tree-donation": "Don d'arbres", + "tree-gift": "Cadeau d'arbre", + "tree-cash": "TreeCash", + "trees": "Arbres", + "amount": "Montant", + "created": "Date de création", + "project": "Nom du projet", + "method": "Mode de paiement", + "treeCount": "Nombre d'arbres", + "lastUpdate": "Dernière mise à jour", + "donorCertificate": "Certificat de donateur", + "download": "Télécharger", + "donations": "Dons", + "in-progress": "En cours", + "donation-in-progress": "En cours", + "donation-tree-cash": "TreeCash", + "donation-success": "Réussite", + "cancelled": "Annulé", + "card": "Carte", + "sepa": "SEPA", + "success": "Succès", + "paid": "Succès", + "initiated": "Initiée", + "failed": "Échoué", + "pending": "En attente", + "refunded": "Remboursé", + "referred": "Référé", + "in-dispute": "En litige", + "dispute-lost": "Litige perdu", + "nameForest": "La forêt des {{name}}", + "taxReceipt": "Reçu fiscal", + "history": "Histoire", + "treemapper": "TreeMapper", + "register-trees": "Enregistrer les arbres", + "manage-projects": "Gérer les projets", + "app-payouts": "Paiements de l'application", + "app-payout-open": "Paiements en cours", + "app-payout-pending": "Paiements en attente", + "app-payout-assigned": "Paiements assignés", + "app-payout-complete": "Paiements terminés", + "app-payout": "Paiements de l'application", + "reference": "Référence", + "fee": "Frais d'inscription", + "net": "NET", + "status": "Statut", + "paymentDate": "Date de paiement", + "bankName": "Nom de la banque", + "accountHolder": "Titulaire du compte", + "aba": "ABA", + "bic": "BIC", + "iban": "IBAN", + "swift": "SWIFT", + "isDefault": "Compte par défaut", + "bankAccountCreated": "Compte bancaire créé", + "bankAccountUpdated": "Compte bancaire mis à jour", + "donation-all": "Dons", + "donation-canceled": "Annulé", + "payout-all": "Paiements", + "payout-action-required": "Action requise", + "payout-pending": "En attente", + "payout-completed": "Complété", + "donorName": "Nom du donateur", + "paidAmount": "Montant payé", + "projectGuid": "GUID du projet", + "totalAmount": "Montant total", + "disputeFee": "Frais de litige", + "planetFee": "Frais Planet", + "transactionFee": "Frais de transaction", + "transferFee": "Frais de transfert", + "open": "Ouvrir", + "downloads": "Télécharger", + "account": "Comptes", + "loadMore": "Charger plus", + "setTarget": "Fixer un objectif", + "targetSave": "Sauvegarder", + "targetErrorMessage": "Le nombre doit être supérieur à zéro", + "taxDeductibleReceipt": "Reçu déductible des impôts", + "giftCertificate": "Certificat de don", + "paypal-paypal": "Paypal", + "stripe-": "Stripe", + "unknown-method": "Inconnu", + "stripe-sofort": "Sofort (Stripe)", + "tree-cash-tree-cash": "TreeCash", + "stripe-card": "Carte de crédit/débit", + "stripe-giropay": "GiroPay (Stripe)", + "action-required": "Action requise", + "completed": "Complété", + "donationsSubTitle": "Gérez tous vos dons et paiements à partir d'un seul endroit.", + "payments": "Paiements", + "stripe-sepa_debit": "SEPA (Stripe)", + "offline-offline": "Hors ligne", + "profile": "Profil", + "projects": "Projets", + "settings": "Paramètres", + "editProfile": "Editer le profil", + "deleteProfile": "Supprimer le Profil", + "widgets": "Widgets" + } } \ No newline at end of file diff --git a/public/static/locales/fr/planet.json b/public/static/locales/fr/planet.json index 6c44b4d3e3..61bae1120a 100644 --- a/public/static/locales/fr/planet.json +++ b/public/static/locales/fr/planet.json @@ -1,14 +1,16 @@ { - "treesDonated": "Arbres donnés depuis 2019", - "plantedByTPO": "Planté par plus de {{projects}}+ projets participants", - "plantedGlobally": "Arbres qui nous sont signalés depuis 2006", - "forestLoss": "Perte nette d'arbres par an", - "estimateOf": "Estimation de la perte annuelle d'arbres par", - "globallySince": "Nombre d'arbres signalés à la Campagne pour un milliard d'arbres (plus tard Campagne pour un milliard d'arbres) depuis sa création par le PNUE en 2006", - "restoreTrees": "Comment restaurer un trillion d'arbres ?", - "watchVideo": "Voir la vidéo", - "selectProjects": "Comment nous sélectionnons les projets", - "learnMore": "En savoir plus", - "treesDonatedDescription": "Tous les dons d'arbres traités par Plant-for-the-Planet depuis 2019. Comprend les arbres donnés directement par le biais de nos applis ainsi que les grands dons privés et d'entreprise. Ces dons ne sont pas tous allés à des projets gérés directement par Plant-for-the-Planet, mais à toutes les organisations de restauration participantes. Il se peut que certains arbres donnés ne soient pas encore plantés.", - "treesPlantedDescription": "Tous les arbres donnés par le biais de Plant-for-the-Planet et les autres arbres déclarés comme étant plantés par les organisations de restauration participantes" + "Planet": { + "treesDonated": "Arbres donnés depuis 2019", + "plantedByTPO": "Planté par plus de {{projects}}+ projets participants", + "plantedGlobally": "Arbres qui nous sont signalés depuis 2006", + "forestLoss": "Perte nette d'arbres par an", + "estimateOf": "Estimation de la perte annuelle d'arbres par", + "globallySince": "Nombre d'arbres signalés à la Campagne pour un milliard d'arbres (plus tard Campagne pour un milliard d'arbres) depuis sa création par le PNUE en 2006", + "restoreTrees": "Comment restaurer un trillion d'arbres ?", + "watchVideo": "Voir la vidéo", + "selectProjects": "Comment nous sélectionnons les projets", + "learnMore": "En savoir plus", + "treesDonatedDescription": "Tous les dons d'arbres traités par Plant-for-the-Planet depuis 2019. Comprend les arbres donnés directement par le biais de nos applis ainsi que les grands dons privés et d'entreprise. Ces dons ne sont pas tous allés à des projets gérés directement par Plant-for-the-Planet, mais à toutes les organisations de restauration participantes. Il se peut que certains arbres donnés ne soient pas encore plantés.", + "treesPlantedDescription": "Tous les arbres donnés par le biais de Plant-for-the-Planet et les autres arbres déclarés comme étant plantés par les organisations de restauration participantes" + } } \ No newline at end of file diff --git a/public/static/locales/fr/planetcash.json b/public/static/locales/fr/planetcash.json index 6f31cf5a2e..d716109ddb 100644 --- a/public/static/locales/fr/planetcash.json +++ b/public/static/locales/fr/planetcash.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "Planetcash": {} +} \ No newline at end of file diff --git a/public/static/locales/fr/redeem.json b/public/static/locales/fr/redeem.json index 7ed304c016..561360e9c0 100644 --- a/public/static/locales/fr/redeem.json +++ b/public/static/locales/fr/redeem.json @@ -1,11 +1,13 @@ { - "myPlantedTreesByOrg": "Mon {{formattedNumber}} arbre sera planté par {{tpoName}}", - "myPlantedTreesByOrg_plural": "Mes {{formattedNumber}} arbres seront plantés par {{tpoName}}", - "congratulations": "Félicitations !", - "addToMyTrees": "Ajouter à mes arbres", - "validateCode": "Valider le code", - "enterRedeemCode": "Veuillez entrer un code pour le rachat", - "validating": "Validation", - "invalidType": "Type non valide, vérifier à nouveau le lien", - "redeemDescription": "Échangez votre bon d'arbre et d'autres codes." + "Redeem": { + "myPlantedTreesByOrg": "Mon {{formattedNumber}} arbre sera planté par {{tpoName}}", + "myPlantedTreesByOrg_plural": "Mes {{formattedNumber}} arbres seront plantés par {{tpoName}}", + "congratulations": "Félicitations !", + "addToMyTrees": "Ajouter à mes arbres", + "validateCode": "Valider le code", + "enterRedeemCode": "Veuillez entrer un code pour le rachat", + "validating": "Validation", + "invalidType": "Type non valide, vérifier à nouveau le lien", + "redeemDescription": "Échangez votre bon d'arbre et d'autres codes." + } } \ No newline at end of file diff --git a/public/static/locales/fr/registerTrees.json b/public/static/locales/fr/registerTrees.json index 51cafac72e..3d6f53193c 100644 --- a/public/static/locales/fr/registerTrees.json +++ b/public/static/locales/fr/registerTrees.json @@ -1,11 +1,13 @@ { - "selectLocationMap": "Sélectionner un lieu sur la carte", - "requiredNumberOfTrees": "Le nombre d'arbres est requis", - "numberOfTrees": "Nombre d'arbres", - "datePlanted": "Date de plantation", - "treeSpecies": "Espèces d'arbres", - "speciesRequired": "L'espèce est obligatoire", - "drawPolygonMap": "Dessiner un polygone sur la carte", - "clickMapMark": "Cliquer sur la carte pour marquer un lieu", - "next": "Suivant" + "RegisterTrees": { + "selectLocationMap": "Sélectionner un lieu sur la carte", + "requiredNumberOfTrees": "Le nombre d'arbres est requis", + "numberOfTrees": "Nombre d'arbres", + "datePlanted": "Date de plantation", + "treeSpecies": "Espèces d'arbres", + "speciesRequired": "L'espèce est obligatoire", + "drawPolygonMap": "Dessiner un polygone sur la carte", + "clickMapMark": "Cliquer sur la carte pour marquer un lieu", + "next": "Suivant" + } } \ No newline at end of file diff --git a/public/static/locales/fr/tenants.json b/public/static/locales/fr/tenants.json index 28bd3080bb..c4af4d3b85 100644 --- a/public/static/locales/fr/tenants.json +++ b/public/static/locales/fr/tenants.json @@ -1,47 +1,49 @@ { - "nitrosb": { - "title": "Planter des arbres avec des snowboards Nitro", - "description": "Nitro Snowboards s'est fixé pour objectif de soutenir et de mobiliser la conservation, la restauration et la croissance d'une forêt." - }, - "energizer": { - "title": "Energizer ❤️ Baeume", - "description": "\"La richesse est pour nous, la centrale de l'Etat, une de nos priorités. Depuis la première batterie gratuite de 1989, nos batteries sont fabriquées avec des matériaux de haute qualité, de la langue et des matériaux de haute qualité. Notre partenariat avec l'association \"Une plante pour la planète\" s'inscrit dans cette tradition, qui vise à promouvoir l'environnement et à assurer la sécurité de mes enfants. Gemeinsam pflanzen wir Bäume und veranstalten Bildungsprogramme für Kinder und Jugendliche, um ein Bewusstsein für global Gerechtigkeit und die Klimakrise zu schaffen. Einbinden wollen wir dabei auch unsere Konsumenten und den Handel, denn nur gemeinsam kann diese zentrale Herausforderung unserer Zeit gelöst werden. Bist du dabei ?" - }, - "senatDerWirtschaft": { - "title": "Senat Der Wirtschaft", - "description": "Die Klimakrise ist eine der größten gesellschaftlichen Herausforderungen und es muss sich etwas ändern. Der Senat der Wirtschaft ist eine Wertegemeinschaft. Nous nous sommes engagés pour une vision motivée et respectueuse de l'environnement, avec une mise en œuvre pratique. Deshalb pflanzen immer mehr unserer Mitglieder Wälder, zusammen mit ihren Mitarbeiter, Geschäftspartnern und Kunden. La nouvelle directive sur les émissions de gaz à effet de serre lie le CO2 et réduit les émissions de gaz à effet de serre des hommes. Cette loi nous oblige à réduire considérablement nos émissions de CO2. Versprochen !" - }, - "pampers": { - "title": "Pampers ❤️ Wald", - "descriptionTitle": "Bäume pflanzen für eine nachhaltigere Zukunft", - "description": "Gemeinsam mit euch wollen wir dabei helfen, unseren Kleinsten eine bessere Zukunft zu ermöglichen. Deshalb arbeiten wir mit der Kinder- und Jugendorganisation Plant-for-the-Planet an einem tollen Projekt : dem Pampers Wald. Pour le projet \"Pampers Windeln\", nous dépensons 0,01 EUR/CHF et investissons jusqu'à 100.000 EUR dans un projet \"Plant-for-the-Planet\". Notre prix : 60.000 Bäume für eine nachhaltige Wiederaufforstung zu pflanzen. Auf der Karte seht ihr, wo das Projekt realisiert wird. Jetzt anschauen und mithelfen." - }, - "interactClub": { - "title": "Club Interact Wald", - "description": "Planter des arbres est un projet intergénérationnel de consolidation de la paix qui donne aux humains et en particulier aux jeunes espoir et courage. Nous avons besoin de courage pour aborder courageusement ensemble des solutions dans cette crise climatique. Notre secteur est aussi celui des enfants, des jeunes et des jeunes adultes qui se mobilisent pour 1 000 milliards de dollars pour faire face à ces défis, et ce jusqu'à 15 ans, où nous devons trouver des solutions pour réduire nos émissions de CO2. Une action mondiale peut être menée pour que les programmes de coopération entre les Länder des pays du Sud soient plus efficaces. La moitié des superficies sur lesquelles nous pouvons planter les 1 000 milliards d'arbres supplémentaires se trouvent en Afrique, le reste en Amérique latine et en Asie du Sud-Est, et donc dans les pays les plus durement touchés par la crise climatique. Ces deux pays se sont engagés à réduire leurs émissions de gaz à effet de serre et à lier le CO2. Le nouveau domaine d'action de la a famille rotarienne est: L'environnement. Nous nous engageons à ce que nos enfants puissent bénéficier de nos services. Plantez des arbres avec nous." - }, - "culchacandela": { - "title": "Culcha Candela X Plant-pour-la-Planète", - "description": "

Nous plantons des arbres pour un meilleur climat mondial afin de gagner un temps aussi important dans la course contre la crise climatique. Plantez ici avec nous!
Et tout en écoutant le nouveau \"Hamma (INVCTS & Dorfkind J-P Remix)\" sur Music-for-Nature et toutes les plateformes de streaming musical.
Nous reversons les revenus du streaming à Plant-for-the-Planet! !

" - }, - "lacoqueta": { - "title": "Planter des arbres avec La Coqueta", - "description": "En voyant ses propres enfants grandir et s'intéresser de plus en plus à la crise climatique, Celia a décidé d'utiliser sa marque comme une plateforme pour un changement positif. Après avoir appris que les arbres sont le moyen le plus économique et le plus efficace de fixer le CO2, ce qui leur laisse plus de temps pour réduire les émissions de gaz à effet de serre à zéro et atténuer la crise climatique, elles ont décidé de se lancer dans ce voyage passionnant avec \"Plant-for-the-Planet\". Vous pouvez également faire partie de ce voyage et faire don de quelques arbres - à Grenade, la ville natale de Celia, ou dans d'autres régions du monde." - }, - "xiting": { - "title": "Planter des arbres - Pour un avenir vert", - "description": "Avec cette plateforme, Xiting souhaite donner à ses partenaires, clients et sympathisants la possibilité de planter des arbres rapidement et facilement et de s'engager ainsi dans la protection du climat. Nous sommes convaincus que la protection du climat n'a de sens que si elle est soutenue par un large public et que nous travaillons ensemble à un avenir durable et vert Les arbres sont le moyen idéal et le plus naturel pour y parvenir, en filtrant le CO2 de l'air. Plantez avec nous dès maintenant ! Depuis 2019, Xiting poursuit avec succès l'objectif de fonctionner comme une entreprise 100 % neutre en CO2. Vous trouverez un aperçu de notre engagement ainsi que des partenariats climatiques existants ici ." - }, - "ulmpflanzt": { - "title": "Ulm plante des arbres", - "description": "124 781 arbres - un arbre pour chaque citoyen d'Ulm. C'est le but de \"Ulm plante des arbres\" - l'initiative climatique de Plant-for-the-Planet, l'UNW (Groupe Initiative Ulm pour le développement economique durable eV), la société Ulm pervormance international, Trivis, la Volksbank, la ville de Ulm et l'agenda 21 local de Ulm. Rejoignez-nous et aidez à réaliser le plus grand projet de reboisement de l'histoire de l'humanité. Pour vous - et pour nous tous !" - }, - "sitex": { - "title": "Sitex ❤️ Wald", - "description": "La lutte contre le changement climatique est une tâche globale et ne peut être envisagée que si nous la réalisons tous ensemble. Nous devons faire en sorte que nos enfants et nos petits-enfants vivent sur une planète intacte. C'est pour cette raison que nous vous présentons le projet Plant-for-the-Planet et la méthode de culture des plantes médicinales, qui permet de réduire la quantité de CO2 dans l'atmosphère. Notre contribution au groupe Sitex : nous dépenserons au moins 500 000 litres d'huile de palme d'ici à 2027 grâce à des plantes cultivées en continu." - }, - "3pleset": { - "title": "Alife & Kickin ❤️ Arbre", - "description": "

#WEAREALIFE Une faute d'ortographe? Non, c'est intentionnel !
C'est tout à fait dans l'esprit de la devise CHOISIR LA VIE qu'il vous faut maintenant.
En effet, dès maintenant, vous pouvez, avec Alife & Kickin et l'organisation Plant-for-the-Planet Arbres, choisir de planter et de vivre. Rejoignez-nous sur le terrain d'Alife & Kickin. Comment ?
Pour chaque commande en ligne, nous planterons un arbre avec Plant-for-the-Planet dans les deux prochains mois. Notre objectif : 50 000 graines pour une alimentation saine. Comment ?
Sur la carte, vous pouvez voir où sera plantée la forêt Alife & Kickin. Alors, prenez le temps d'écouter, d'écouter et de vivre votre vie. CHOISISSEZ LA VIE.
UNE COMMANDE, UN ARBRE
#WEAREALIFE

" + "Tenants": { + "nitrosb": { + "title": "Planter des arbres avec des snowboards Nitro", + "description": "Nitro Snowboards s'est fixé pour objectif de soutenir et de mobiliser la conservation, la restauration et la croissance d'une forêt." + }, + "energizer": { + "title": "Energizer ❤️ Baeume", + "description": "\"La richesse est pour nous, la centrale de l'Etat, une de nos priorités. Depuis la première batterie gratuite de 1989, nos batteries sont fabriquées avec des matériaux de haute qualité, de la langue et des matériaux de haute qualité. Notre partenariat avec l'association \"Une plante pour la planète\" s'inscrit dans cette tradition, qui vise à promouvoir l'environnement et à assurer la sécurité de mes enfants. Gemeinsam pflanzen wir Bäume und veranstalten Bildungsprogramme für Kinder und Jugendliche, um ein Bewusstsein für global Gerechtigkeit und die Klimakrise zu schaffen. Einbinden wollen wir dabei auch unsere Konsumenten und den Handel, denn nur gemeinsam kann diese zentrale Herausforderung unserer Zeit gelöst werden. Bist du dabei ?" + }, + "senatDerWirtschaft": { + "title": "Senat Der Wirtschaft", + "description": "Die Klimakrise ist eine der größten gesellschaftlichen Herausforderungen und es muss sich etwas ändern. Der Senat der Wirtschaft ist eine Wertegemeinschaft. Nous nous sommes engagés pour une vision motivée et respectueuse de l'environnement, avec une mise en œuvre pratique. Deshalb pflanzen immer mehr unserer Mitglieder Wälder, zusammen mit ihren Mitarbeiter, Geschäftspartnern und Kunden. La nouvelle directive sur les émissions de gaz à effet de serre lie le CO2 et réduit les émissions de gaz à effet de serre des hommes. Cette loi nous oblige à réduire considérablement nos émissions de CO2. Versprochen !" + }, + "pampers": { + "title": "Pampers ❤️ Wald", + "descriptionTitle": "Bäume pflanzen für eine nachhaltigere Zukunft", + "description": "Gemeinsam mit euch wollen wir dabei helfen, unseren Kleinsten eine bessere Zukunft zu ermöglichen. Deshalb arbeiten wir mit der Kinder- und Jugendorganisation Plant-for-the-Planet an einem tollen Projekt : dem Pampers Wald. Pour le projet \"Pampers Windeln\", nous dépensons 0,01 EUR/CHF et investissons jusqu'à 100.000 EUR dans un projet \"Plant-for-the-Planet\". Notre prix : 60.000 Bäume für eine nachhaltige Wiederaufforstung zu pflanzen. Auf der Karte seht ihr, wo das Projekt realisiert wird. Jetzt anschauen und mithelfen." + }, + "interactClub": { + "title": "Club Interact Wald", + "description": "Planter des arbres est un projet intergénérationnel de consolidation de la paix qui donne aux humains et en particulier aux jeunes espoir et courage. Nous avons besoin de courage pour aborder courageusement ensemble des solutions dans cette crise climatique. Notre secteur est aussi celui des enfants, des jeunes et des jeunes adultes qui se mobilisent pour 1 000 milliards de dollars pour faire face à ces défis, et ce jusqu'à 15 ans, où nous devons trouver des solutions pour réduire nos émissions de CO2. Une action mondiale peut être menée pour que les programmes de coopération entre les Länder des pays du Sud soient plus efficaces. La moitié des superficies sur lesquelles nous pouvons planter les 1 000 milliards d'arbres supplémentaires se trouvent en Afrique, le reste en Amérique latine et en Asie du Sud-Est, et donc dans les pays les plus durement touchés par la crise climatique. Ces deux pays se sont engagés à réduire leurs émissions de gaz à effet de serre et à lier le CO2. Le nouveau domaine d'action de la a famille rotarienne est: L'environnement. Nous nous engageons à ce que nos enfants puissent bénéficier de nos services. Plantez des arbres avec nous." + }, + "culchacandela": { + "title": "Culcha Candela X Plant-pour-la-Planète", + "description": "

Nous plantons des arbres pour un meilleur climat mondial afin de gagner un temps aussi important dans la course contre la crise climatique. Plantez ici avec nous!
Et tout en écoutant le nouveau \"Hamma (INVCTS & Dorfkind J-P Remix)\" sur Music-for-Nature et toutes les plateformes de streaming musical.
Nous reversons les revenus du streaming à Plant-for-the-Planet! !

" + }, + "lacoqueta": { + "title": "Planter des arbres avec La Coqueta", + "description": "En voyant ses propres enfants grandir et s'intéresser de plus en plus à la crise climatique, Celia a décidé d'utiliser sa marque comme une plateforme pour un changement positif. Après avoir appris que les arbres sont le moyen le plus économique et le plus efficace de fixer le CO2, ce qui leur laisse plus de temps pour réduire les émissions de gaz à effet de serre à zéro et atténuer la crise climatique, elles ont décidé de se lancer dans ce voyage passionnant avec \"Plant-for-the-Planet\". Vous pouvez également faire partie de ce voyage et faire don de quelques arbres - à Grenade, la ville natale de Celia, ou dans d'autres régions du monde." + }, + "xiting": { + "title": "Planter des arbres - Pour un avenir vert", + "description": "Avec cette plateforme, Xiting souhaite donner à ses partenaires, clients et sympathisants la possibilité de planter des arbres rapidement et facilement et de s'engager ainsi dans la protection du climat. Nous sommes convaincus que la protection du climat n'a de sens que si elle est soutenue par un large public et que nous travaillons ensemble à un avenir durable et vert Les arbres sont le moyen idéal et le plus naturel pour y parvenir, en filtrant le CO2 de l'air. Plantez avec nous dès maintenant ! Depuis 2019, Xiting poursuit avec succès l'objectif de fonctionner comme une entreprise 100 % neutre en CO2. Vous trouverez un aperçu de notre engagement ainsi que des partenariats climatiques existants ici ." + }, + "ulmpflanzt": { + "title": "Ulm plante des arbres", + "description": "124 781 arbres - un arbre pour chaque citoyen d'Ulm. C'est le but de \"Ulm plante des arbres\" - l'initiative climatique de Plant-for-the-Planet, l'UNW (Groupe Initiative Ulm pour le développement economique durable eV), la société Ulm pervormance international, Trivis, la Volksbank, la ville de Ulm et l'agenda 21 local de Ulm. Rejoignez-nous et aidez à réaliser le plus grand projet de reboisement de l'histoire de l'humanité. Pour vous - et pour nous tous !" + }, + "sitex": { + "title": "Sitex ❤️ Wald", + "description": "La lutte contre le changement climatique est une tâche globale et ne peut être envisagée que si nous la réalisons tous ensemble. Nous devons faire en sorte que nos enfants et nos petits-enfants vivent sur une planète intacte. C'est pour cette raison que nous vous présentons le projet Plant-for-the-Planet et la méthode de culture des plantes médicinales, qui permet de réduire la quantité de CO2 dans l'atmosphère. Notre contribution au groupe Sitex : nous dépenserons au moins 500 000 litres d'huile de palme d'ici à 2027 grâce à des plantes cultivées en continu." + }, + "3pleset": { + "title": "Alife & Kickin ❤️ Arbre", + "description": "

#WEAREALIFE Une faute d'ortographe? Non, c'est intentionnel !
C'est tout à fait dans l'esprit de la devise CHOISIR LA VIE qu'il vous faut maintenant.
En effet, dès maintenant, vous pouvez, avec Alife & Kickin et l'organisation Plant-for-the-Planet Arbres, choisir de planter et de vivre. Rejoignez-nous sur le terrain d'Alife & Kickin. Comment ?
Pour chaque commande en ligne, nous planterons un arbre avec Plant-for-the-Planet dans les deux prochains mois. Notre objectif : 50 000 graines pour une alimentation saine. Comment ?
Sur la carte, vous pouvez voir où sera plantée la forêt Alife & Kickin. Alors, prenez le temps d'écouter, d'écouter et de vivre votre vie. CHOISISSEZ LA VIE.
UNE COMMANDE, UN ARBRE
#WEAREALIFE

" + } } } \ No newline at end of file diff --git a/public/static/locales/fr/treemapper.json b/public/static/locales/fr/treemapper.json index c9d62ce6b9..eb2be0cf10 100644 --- a/public/static/locales/fr/treemapper.json +++ b/public/static/locales/fr/treemapper.json @@ -1,24 +1,26 @@ { - "trees": "Arbres", - "tree": "Arbre", - "on": "sur", - "partial": "Partiel", - "complete": "Complété", - "on-site": "Sur le site", - "off-site": "Hors site", - "captureMode": "Mode capture", - "captureStatus": "Statut de capture", - "coordinates": "Coordonnées", - "guid": "GUID", - "height": "Hauteur", - "width": "Largeur", - "plantDate": "Date de plantation", - "registrationDate": "Date d'inscription", - "plantProject": "Projet de Plantation", - "species": "Espèces", - "sampleTrees": "Echantillons d'arbres", - "loadMore": "Charger plus", - "treeMapper": "TreeMapper", - "cm": "cm", - "m": "m" + "Treemapper": { + "trees": "Arbres", + "tree": "Arbre", + "on": "sur", + "partial": "Partiel", + "complete": "Complété", + "on-site": "Sur le site", + "off-site": "Hors site", + "captureMode": "Mode capture", + "captureStatus": "Statut de capture", + "coordinates": "Coordonnées", + "guid": "GUID", + "height": "Hauteur", + "width": "Largeur", + "plantDate": "Date de plantation", + "registrationDate": "Date d'inscription", + "plantProject": "Projet de Plantation", + "species": "Espèces", + "sampleTrees": "Echantillons d'arbres", + "loadMore": "Charger plus", + "treeMapper": "TreeMapper", + "cm": "cm", + "m": "m" + } } \ No newline at end of file diff --git a/public/static/locales/fr/treemapperAnalytics.json b/public/static/locales/fr/treemapperAnalytics.json index 6f31cf5a2e..7e8da06585 100644 --- a/public/static/locales/fr/treemapperAnalytics.json +++ b/public/static/locales/fr/treemapperAnalytics.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "TreemapperAnalytics": {} +} \ No newline at end of file diff --git a/public/static/locales/it/bulkCodes.json b/public/static/locales/it/bulkCodes.json index 6f31cf5a2e..605168db0e 100644 --- a/public/static/locales/it/bulkCodes.json +++ b/public/static/locales/it/bulkCodes.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "BulkCodes": {} +} \ No newline at end of file diff --git a/public/static/locales/it/common.json b/public/static/locales/it/common.json index 5010c5f7f3..bc282660aa 100644 --- a/public/static/locales/it/common.json +++ b/public/static/locales/it/common.json @@ -1,75 +1,77 @@ { - "tree_one": "Albero", - "tree_other": "Alberi", - "by": "Di {{tpoName}}", - "to_project_by_tpo": "A {{projectName}} di {{tpoName}}", - "for": "per", - "trees": "Alberi", - "planted": "piantato", - "privacy": "Privacy", - "terms": "Termini", - "imprint": "Impronta", - "status": "Stato", - "contact": "Contatto", - "supportUs": "Sostienici", - "leaders": "Leader", - "leaderboard": "Classifica", - "me": "Montenegro", - "signIn": "Accedi", - "home": "Home", - "donate_gift": "Donazione/Dono", - "plant": "Stabilimento", - "donate": "Dona", - "gift": "Regalo", - "continue": "Continua", - "selectLanguage": "Seleziona una lingua", - "selectCountry": "Seleziona il paese", - "ok": "OK", - "cancel": "Annulla", - "delete": "Cancellare", - "deleteAccount": "Cancellare il conto", - "thankYou": "Grazie", - "privacyPolicyNotice": "Utilizzando questo sito web, l'utente accetta il nostro", - "privacyPolicy": "informativa sulla privacy", - "about_pftp": "Informazioni su Plant-for-the-Planet", - "january": "Gennaio", - "february": "Febbraio", - "march": "Marzo", - "april": "Aprile", - "may": "Maggio", - "june": "Giugno", - "july": "Luglio", - "august": "Agosto", - "september": "Settembre", - "october": "Ottobre", - "november": "Novembre", - "december": "Dicembre", - "approx": "Approssimativamente", - "view": "Vedi", - "verifyEmailHeader": "Si prega di confermare l'e-mail.", - "verifyEmailText": "Per proteggere il tuo account, dobbiamo verificare la tua email. Controlla la tua casella di posta in arrivo o la cartella spam/spam/junk per una e-mail di conferma e poi continua a effettuare il login.", - "verifyEmailInfo": "Se non hai ricevuto un'e-mail, prova ad effettuare nuovamente il login e ti invieremo un'altra e-mail.", - "continueToLogin": "Continua a Login", - "supportsUNEP": "Sostiene l'UNEP", - "plantedBy": "Piantato da", - "redeemPopup": "Hai ricevuto un Tree Gift? Effettua il login per riscattare i tuoi alberi.", - "login": "Login/Signup", - "shop": "Negozio", - "downloads": "Scaricare", - "team": "Squadra", - "jobs": "Offerte di lavoro", - "blogs": "Blog", - "faqs": "FAQ", - "annualReports": "Rapporti annuali", - "skipIntroVideo": "Salta l'introduzione", - "mapInfo": "Esri", - "aboutUs": "Chi siamo", - "alternativelyEditProfile": "In alternativa puoi marcare il tuo profilo come privato visitando Modifica profilo.", - "deleteAccountConsent": "Cliccando su cancella, chiedo a Plant-for-the-Planet di cancellare tutti i dati associati al mio account Plant-for-the-Planet. I dati delle donazioni possono essere conservati per un massimo di otto anni. Gli alberi che ho registrato non saranno rimossi, ma saranno resi anonimi e non potranno essere reclamati nuovamente.", - "deleteIrreversible": "Capisco anche che la cancellazione dell'account di {{email}} è irreversibile.", - "goBack": "Torna indietro", - "deleteAccountMessage": "Per continuare la cancellazione, digita `{{delete}}`", - "deleteAccountLabel": "Tipo: {{delete}}", - "howDoesThisWork": "Come funziona?", - "reviewInfo": "Il progetto è stato ispezionato nel corso di una revisione sul campo di più giorni nel <2>mese e soddisfa i nostri <5>standard." + "Common": { + "tree_one": "Albero", + "tree_other": "Alberi", + "by": "Di {{tpoName}}", + "to_project_by_tpo": "A {{projectName}} di {{tpoName}}", + "for": "per", + "trees": "Alberi", + "planted": "piantato", + "privacy": "Privacy", + "terms": "Termini", + "imprint": "Impronta", + "status": "Stato", + "contact": "Contatto", + "supportUs": "Sostienici", + "leaders": "Leader", + "leaderboard": "Classifica", + "me": "Montenegro", + "signIn": "Accedi", + "home": "Home", + "donate_gift": "Donazione/Dono", + "plant": "Stabilimento", + "donate": "Dona", + "gift": "Regalo", + "continue": "Continua", + "selectLanguage": "Seleziona una lingua", + "selectCountry": "Seleziona il paese", + "ok": "OK", + "cancel": "Annulla", + "delete": "Cancellare", + "deleteAccount": "Cancellare il conto", + "thankYou": "Grazie", + "privacyPolicyNotice": "Utilizzando questo sito web, l'utente accetta il nostro", + "privacyPolicy": "informativa sulla privacy", + "about_pftp": "Informazioni su Plant-for-the-Planet", + "january": "Gennaio", + "february": "Febbraio", + "march": "Marzo", + "april": "Aprile", + "may": "Maggio", + "june": "Giugno", + "july": "Luglio", + "august": "Agosto", + "september": "Settembre", + "october": "Ottobre", + "november": "Novembre", + "december": "Dicembre", + "approx": "Approssimativamente", + "view": "Vedi", + "verifyEmailHeader": "Si prega di confermare l'e-mail.", + "verifyEmailText": "Per proteggere il tuo account, dobbiamo verificare la tua email. Controlla la tua casella di posta in arrivo o la cartella spam/spam/junk per una e-mail di conferma e poi continua a effettuare il login.", + "verifyEmailInfo": "Se non hai ricevuto un'e-mail, prova ad effettuare nuovamente il login e ti invieremo un'altra e-mail.", + "continueToLogin": "Continua a Login", + "supportsUNEP": "Sostiene l'UNEP", + "plantedBy": "Piantato da", + "redeemPopup": "Hai ricevuto un Tree Gift? Effettua il login per riscattare i tuoi alberi.", + "login": "Login/Signup", + "shop": "Negozio", + "downloads": "Scaricare", + "team": "Squadra", + "jobs": "Offerte di lavoro", + "blogs": "Blog", + "faqs": "FAQ", + "annualReports": "Rapporti annuali", + "skipIntroVideo": "Salta l'introduzione", + "mapInfo": "Esri", + "aboutUs": "Chi siamo", + "alternativelyEditProfile": "In alternativa puoi marcare il tuo profilo come privato visitando Modifica profilo.", + "deleteAccountConsent": "Cliccando su cancella, chiedo a Plant-for-the-Planet di cancellare tutti i dati associati al mio account Plant-for-the-Planet. I dati delle donazioni possono essere conservati per un massimo di otto anni. Gli alberi che ho registrato non saranno rimossi, ma saranno resi anonimi e non potranno essere reclamati nuovamente.", + "deleteIrreversible": "Capisco anche che la cancellazione dell'account di {{email}} è irreversibile.", + "goBack": "Torna indietro", + "deleteAccountMessage": "Per continuare la cancellazione, digita `{{delete}}`", + "deleteAccountLabel": "Tipo: {{delete}}", + "howDoesThisWork": "Come funziona?", + "reviewInfo": "Il progetto è stato ispezionato nel corso di una revisione sul campo di più giorni nel <2>mese e soddisfa i nostri <5>standard." + } } \ No newline at end of file diff --git a/public/static/locales/it/country.json b/public/static/locales/it/country.json index bc9f040cb8..9220ab6041 100644 --- a/public/static/locales/it/country.json +++ b/public/static/locales/it/country.json @@ -1,261 +1,263 @@ { - "ac": "Ascension Island", - "af": "Afghanistan", - "ax": "Isole Åland", - "al": "Albania", - "dz": "Algeria", - "as": "Samoa americane", - "ad": "Andorra", - "ao": "Angola", - "ai": "Anguilla", - "aq": "Antartide", - "ag": "Antigua e Barbuda", - "ar": "Argentina", - "am": "Armenia", - "aw": "Aruba", - "au": "Australia", - "at": "Austria", - "az": "Azerbaigian", - "bs": "Bahamas", - "bh": "Bahrain", - "bd": "Bangladesh", - "bb": "Barbados", - "by": "Bielorussia", - "be": "Belgio", - "bz": "Belize", - "bj": "Benin", - "bm": "Bermuda", - "bt": "Bhutan", - "bo": "Bolivia", - "bq": "Bonaire, Sint Eustatius e Saba", - "ba": "Bosnia ed Erzegovina", - "bw": "Botswana", - "bv": "Isola di Bouvet", - "br": "Brasile", - "io": "Territorio britannico dell'Oceano Indiano", - "bn": "Brunei Darussalam", - "bg": "Bulgaria", - "bf": "Burkina Faso", - "bi": "Burundi", - "cv": "Cabo Verde", - "kh": "Cambogia", - "cm": "Camerun", - "ca": "Canada", - "ic": "Isole Canarie", - "ky": "Isole Cayman", - "cf": "Repubblica Centrafricana", - "ea": "Ceuta e Melilla", - "td": "Ciad", - "cl": "Cile", - "cn": "Cina", - "cx": "Isola di Natale", - "cc": "Isole Cocos (Keeling)", - "co": "Colombia", - "km": "Comore", - "cg": "Congo", - "cd": "Congo, Repubblica Democratica del", - "ck": "Isole Cook", - "cr": "Costa Rica", - "ci": "Costa d'Avorio", - "hr": "Croazia", - "cu": "Cuba", - "cw": "Curaçao", - "cy": "Cipro", - "cz": "Czechia", - "dk": "Danimarca", - "dg": "Diego Garcia", - "dj": "Gibuti", - "dm": "Dominica", - "do": "Repubblica Dominicana", - "tp": "Timor Est", - "ec": "Ecuador", - "eg": "Egitto", - "sv": "El Salvador", - "gq": "Guinea Equatoriale", - "er": "Eritrea", - "ee": "Estonia", - "sz": "Eswatini", - "et": "Etiopia", - "ez": "Eurozona", - "fk": "Isole Falkland (Malvinas)", - "fo": "Isole Faroe", - "fj": "Figi", - "fi": "Finlandia", - "fr": "Francia", - "gf": "Guyana Francese", - "pf": "Polinesia Francese", - "tf": "Territori francesi del Sud", - "ga": "Gabon", - "gm": "Gambia", - "ge": "Georgia", - "de": "Germania", - "gh": "Ghana", - "gi": "Gibilterra", - "gr": "Grecia", - "gl": "Groenlandia", - "gd": "Grenada", - "gp": "Guadalupa", - "gu": "Guam", - "gt": "Guatemala", - "gg": "Guernsey", - "gn": "Guinea", - "gw": "Guinea-Bissau", - "gy": "Guyana", - "ht": "Haiti", - "hm": "Isola di Heard e Isole McDonald", - "va": "Santa Sede", - "hn": "Honduras", - "hk": "Hong Kong", - "hu": "Ungheria", - "is": "Islanda", - "in": "India", - "id": "Indonesia", - "ir": "Iran (Repubblica Islamica di)", - "iq": "Iraq", - "ie": "Irlanda", - "im": "Isola di Man", - "il": "Israele", - "it": "Italia", - "jm": "Giamaica", - "jp": "Giappone", - "je": "Jersey", - "jo": "Giordania", - "kz": "Kazakistan", - "ke": "Kenya", - "ki": "Kiribati", - "xk": "Kosovo", - "kp": "Corea (Repubblica Democratica Popolare di)", - "kr": "Corea, Repubblica di", - "kw": "Kuwait", - "kg": "Kirghizistan", - "la": "Repubblica Democratica Popolare del Laos", - "lv": "Lettonia", - "lb": "Libano", - "ls": "Lesotho", - "lr": "Liberia", - "ly": "Libia", - "li": "Liechtenstein", - "lt": "Lituania", - "lu": "Lussemburgo", - "mo": "Macao", - "mg": "Madagascar", - "mw": "Malawi", - "my": "Malesia", - "mv": "Maldive", - "ml": "Mali", - "mt": "Malta", - "mh": "Isole Marshall", - "mq": "Martinica", - "mr": "Mauritania", - "mu": "Mauritius", - "yt": "Mayotte", - "mx": "Messico", - "fm": "Micronesia (Stati Federati di)", - "md": "Moldavia, Repubblica di", - "mc": "Monaco", - "mn": "Mongolia", - "me": "Montenegro", - "ms": "Montserrat", - "ma": "Marocco", - "mz": "Mozambico", - "mm": "Myanmar", - "na": "Namibia", - "nr": "Nauru", - "np": "Nepal", - "nl": "Paesi Bassi", - "an": "Antille olandesi", - "nc": "Nuova Caledonia", - "nz": "Nuova Zelanda", - "ni": "Nicaragua", - "ne": "Niger", - "ng": "Nigeria", - "nu": "Niue", - "nf": "Isola di Norfolk", - "mk": "Macedonia del Nord", - "mp": "Isole Marianne Settentrionali", - "no": "Norvegia", - "om": "Oman", - "pk": "Pakistan", - "pw": "Palau", - "ps": "Palestina, Stato di", - "pa": "Panama", - "pg": "Papua Nuova Guinea", - "py": "Paraguay", - "pe": "Perù", - "ph": "Filippine", - "pn": "Pitcairn", - "pl": "Polonia", - "pt": "Portogallo", - "pr": "Porto Rico", - "qa": "Qatar", - "re": "Riunione", - "ro": "Romania", - "ru": "Federazione Russa", - "rw": "Ruanda", - "bl": "San Bartolomeo", - "sh": "Sant'Elena, l'Ascensione e Tristano da Cunha", - "kn": "Saint Kitts e Nevis", - "lc": "Santa Lucia", - "mf": "Saint Martin (parte francese)", - "pm": "San Pietro e Miquelon", - "vc": "San Vincenzo e le Grenadine", - "ws": "Samoa", - "sm": "San Marino", - "st": "Sao Tome e Principe", - "sa": "Arabia Saudita", - "sn": "Senegal", - "rs": "Serbia", - "sc": "Seychelles", - "sl": "Sierra Leone", - "sg": "Singapore", - "sx": "Sint Maarten (parte olandese)", - "sk": "Slovacchia", - "si": "Slovenia", - "sb": "Isole Salomone", - "so": "Somalia", - "za": "Sudafrica", - "gs": "Georgia del Sud e Isole Sandwich del Sud", - "ss": "Sud Sudan", - "es": "Spagna", - "lk": "Sri Lanka", - "sd": "Sudan", - "sr": "Suriname", - "sj": "Svalbard e Jan Mayen", - "se": "Svezia", - "ch": "Svizzera", - "sy": "Repubblica Araba Siriana", - "tw": "Taiwan", - "tj": "Tajikistan", - "tz": "Tanzania, Repubblica Unita di", - "th": "Thailandia", - "tl": "Timor-Leste", - "tg": "Togo", - "tk": "Tokelau", - "to": "Tonga", - "tt": "Trinidad e Tobago", - "ta": "Tristan da Cunha", - "tn": "Tunisia", - "tr": "Turchia", - "tm": "Turkmenistan", - "tc": "Isole Turks e Caicos", - "tv": "Tuvalu", - "ug": "Uganda", - "ua": "Ucraina", - "ae": "Emirati Arabi Uniti", - "gb": "Regno Unito di Gran Bretagna e Irlanda del Nord", - "un": "Nazioni Unite", - "us": "Stati Uniti d'America", - "um": "Isole Minori lontane degli Stati Uniti", - "uy": "Uruguay", - "uz": "Uzbekistan", - "vu": "Vanuatu", - "ve": "Venezuela (Repubblica Bolivariana di)", - "vn": "Vietnam", - "vg": "Isole Vergini (Britanniche)", - "vi": "Isole Vergini (USA)", - "wf": "Wallis e Futuna", - "eh": "Sahara occidentale", - "ye": "Yemen", - "zm": "Zambia", - "zw": "Zimbabwe" + "Country": { + "ac": "Ascension Island", + "af": "Afghanistan", + "ax": "Isole Åland", + "al": "Albania", + "dz": "Algeria", + "as": "Samoa americane", + "ad": "Andorra", + "ao": "Angola", + "ai": "Anguilla", + "aq": "Antartide", + "ag": "Antigua e Barbuda", + "ar": "Argentina", + "am": "Armenia", + "aw": "Aruba", + "au": "Australia", + "at": "Austria", + "az": "Azerbaigian", + "bs": "Bahamas", + "bh": "Bahrain", + "bd": "Bangladesh", + "bb": "Barbados", + "by": "Bielorussia", + "be": "Belgio", + "bz": "Belize", + "bj": "Benin", + "bm": "Bermuda", + "bt": "Bhutan", + "bo": "Bolivia", + "bq": "Bonaire, Sint Eustatius e Saba", + "ba": "Bosnia ed Erzegovina", + "bw": "Botswana", + "bv": "Isola di Bouvet", + "br": "Brasile", + "io": "Territorio britannico dell'Oceano Indiano", + "bn": "Brunei Darussalam", + "bg": "Bulgaria", + "bf": "Burkina Faso", + "bi": "Burundi", + "cv": "Cabo Verde", + "kh": "Cambogia", + "cm": "Camerun", + "ca": "Canada", + "ic": "Isole Canarie", + "ky": "Isole Cayman", + "cf": "Repubblica Centrafricana", + "ea": "Ceuta e Melilla", + "td": "Ciad", + "cl": "Cile", + "cn": "Cina", + "cx": "Isola di Natale", + "cc": "Isole Cocos (Keeling)", + "co": "Colombia", + "km": "Comore", + "cg": "Congo", + "cd": "Congo, Repubblica Democratica del", + "ck": "Isole Cook", + "cr": "Costa Rica", + "ci": "Costa d'Avorio", + "hr": "Croazia", + "cu": "Cuba", + "cw": "Curaçao", + "cy": "Cipro", + "cz": "Czechia", + "dk": "Danimarca", + "dg": "Diego Garcia", + "dj": "Gibuti", + "dm": "Dominica", + "do": "Repubblica Dominicana", + "tp": "Timor Est", + "ec": "Ecuador", + "eg": "Egitto", + "sv": "El Salvador", + "gq": "Guinea Equatoriale", + "er": "Eritrea", + "ee": "Estonia", + "sz": "Eswatini", + "et": "Etiopia", + "ez": "Eurozona", + "fk": "Isole Falkland (Malvinas)", + "fo": "Isole Faroe", + "fj": "Figi", + "fi": "Finlandia", + "fr": "Francia", + "gf": "Guyana Francese", + "pf": "Polinesia Francese", + "tf": "Territori francesi del Sud", + "ga": "Gabon", + "gm": "Gambia", + "ge": "Georgia", + "de": "Germania", + "gh": "Ghana", + "gi": "Gibilterra", + "gr": "Grecia", + "gl": "Groenlandia", + "gd": "Grenada", + "gp": "Guadalupa", + "gu": "Guam", + "gt": "Guatemala", + "gg": "Guernsey", + "gn": "Guinea", + "gw": "Guinea-Bissau", + "gy": "Guyana", + "ht": "Haiti", + "hm": "Isola di Heard e Isole McDonald", + "va": "Santa Sede", + "hn": "Honduras", + "hk": "Hong Kong", + "hu": "Ungheria", + "is": "Islanda", + "in": "India", + "id": "Indonesia", + "ir": "Iran (Repubblica Islamica di)", + "iq": "Iraq", + "ie": "Irlanda", + "im": "Isola di Man", + "il": "Israele", + "it": "Italia", + "jm": "Giamaica", + "jp": "Giappone", + "je": "Jersey", + "jo": "Giordania", + "kz": "Kazakistan", + "ke": "Kenya", + "ki": "Kiribati", + "xk": "Kosovo", + "kp": "Corea (Repubblica Democratica Popolare di)", + "kr": "Corea, Repubblica di", + "kw": "Kuwait", + "kg": "Kirghizistan", + "la": "Repubblica Democratica Popolare del Laos", + "lv": "Lettonia", + "lb": "Libano", + "ls": "Lesotho", + "lr": "Liberia", + "ly": "Libia", + "li": "Liechtenstein", + "lt": "Lituania", + "lu": "Lussemburgo", + "mo": "Macao", + "mg": "Madagascar", + "mw": "Malawi", + "my": "Malesia", + "mv": "Maldive", + "ml": "Mali", + "mt": "Malta", + "mh": "Isole Marshall", + "mq": "Martinica", + "mr": "Mauritania", + "mu": "Mauritius", + "yt": "Mayotte", + "mx": "Messico", + "fm": "Micronesia (Stati Federati di)", + "md": "Moldavia, Repubblica di", + "mc": "Monaco", + "mn": "Mongolia", + "me": "Montenegro", + "ms": "Montserrat", + "ma": "Marocco", + "mz": "Mozambico", + "mm": "Myanmar", + "na": "Namibia", + "nr": "Nauru", + "np": "Nepal", + "nl": "Paesi Bassi", + "an": "Antille olandesi", + "nc": "Nuova Caledonia", + "nz": "Nuova Zelanda", + "ni": "Nicaragua", + "ne": "Niger", + "ng": "Nigeria", + "nu": "Niue", + "nf": "Isola di Norfolk", + "mk": "Macedonia del Nord", + "mp": "Isole Marianne Settentrionali", + "no": "Norvegia", + "om": "Oman", + "pk": "Pakistan", + "pw": "Palau", + "ps": "Palestina, Stato di", + "pa": "Panama", + "pg": "Papua Nuova Guinea", + "py": "Paraguay", + "pe": "Perù", + "ph": "Filippine", + "pn": "Pitcairn", + "pl": "Polonia", + "pt": "Portogallo", + "pr": "Porto Rico", + "qa": "Qatar", + "re": "Riunione", + "ro": "Romania", + "ru": "Federazione Russa", + "rw": "Ruanda", + "bl": "San Bartolomeo", + "sh": "Sant'Elena, l'Ascensione e Tristano da Cunha", + "kn": "Saint Kitts e Nevis", + "lc": "Santa Lucia", + "mf": "Saint Martin (parte francese)", + "pm": "San Pietro e Miquelon", + "vc": "San Vincenzo e le Grenadine", + "ws": "Samoa", + "sm": "San Marino", + "st": "Sao Tome e Principe", + "sa": "Arabia Saudita", + "sn": "Senegal", + "rs": "Serbia", + "sc": "Seychelles", + "sl": "Sierra Leone", + "sg": "Singapore", + "sx": "Sint Maarten (parte olandese)", + "sk": "Slovacchia", + "si": "Slovenia", + "sb": "Isole Salomone", + "so": "Somalia", + "za": "Sudafrica", + "gs": "Georgia del Sud e Isole Sandwich del Sud", + "ss": "Sud Sudan", + "es": "Spagna", + "lk": "Sri Lanka", + "sd": "Sudan", + "sr": "Suriname", + "sj": "Svalbard e Jan Mayen", + "se": "Svezia", + "ch": "Svizzera", + "sy": "Repubblica Araba Siriana", + "tw": "Taiwan", + "tj": "Tajikistan", + "tz": "Tanzania, Repubblica Unita di", + "th": "Thailandia", + "tl": "Timor-Leste", + "tg": "Togo", + "tk": "Tokelau", + "to": "Tonga", + "tt": "Trinidad e Tobago", + "ta": "Tristan da Cunha", + "tn": "Tunisia", + "tr": "Turchia", + "tm": "Turkmenistan", + "tc": "Isole Turks e Caicos", + "tv": "Tuvalu", + "ug": "Uganda", + "ua": "Ucraina", + "ae": "Emirati Arabi Uniti", + "gb": "Regno Unito di Gran Bretagna e Irlanda del Nord", + "un": "Nazioni Unite", + "us": "Stati Uniti d'America", + "um": "Isole Minori lontane degli Stati Uniti", + "uy": "Uruguay", + "uz": "Uzbekistan", + "vu": "Vanuatu", + "ve": "Venezuela (Repubblica Bolivariana di)", + "vn": "Vietnam", + "vg": "Isole Vergini (Britanniche)", + "vi": "Isole Vergini (USA)", + "wf": "Wallis e Futuna", + "eh": "Sahara occidentale", + "ye": "Yemen", + "zm": "Zambia", + "zw": "Zimbabwe" + } } \ No newline at end of file diff --git a/public/static/locales/it/donate.json b/public/static/locales/it/donate.json index 02220a1eed..d6178565dd 100644 --- a/public/static/locales/it/donate.json +++ b/public/static/locales/it/donate.json @@ -1,99 +1,101 @@ { - "fortreeCountTrees": "per {{treeCount}} Albero", - "fortreeCountTrees_plural": "per {{treeCount}} Alberi", - "yourTreesPlantedByOnLocation": "I vostri alberi {{treeCount}} saranno piantati da {{projectName}} in {{location}}.", - "yourTreesPlantedByOnLocation_plural": "I vostri alberi {{treeCount}} saranno piantati da {{projectName}} in {{location}}.", - "myTreesPlantedByOnLocation": "I miei {{treeCount}} alberi sono stati piantati in {{location}}.", - "myTreesPlantedByOnLocation_plural": "I miei {{treeCount}} alberi sono stati piantati in {{location}}.", - "topProjects": "Progetti Top", - "allCountProjects": "Tutti {{projectCount}} Progetti", - "searchProjects": "Ricerca progetti", - "viewProfile": "Visualizza il profilo", - "contactDetails": "Dettagli di contatto", - "readMore": "Per saperne di più", - "readLess": "Leggi di meno", - "treeDonation": "Donazione degli alberi", - "myDonationGiftToSomeone": "La mia donazione è dedicata a qualcuno", - "taxDeductionNotYetAvailable": "La detrazione fiscale non è ancora disponibile per ", - "taxDeductionNotAvailableForProject": "La detrazione fiscale non è ancora disponibile per questo progetto", - "youWillReceiveTaxDeduction": "Riceverete una ricevuta di detrazione fiscale per ", - "toProjectByOrganization": "A {{projectName}} di {{organizationName}}", - "firstName": "Nome", - "lastName": "Cognome", - "email": "Invia un'e-mail a", - "address": "Indirizzo", - "city": "Città", - "zipCode": "Codice postale", - "zipCodeAlphaNumValidation": "ZipCode non è valido", - "country": "Paese", - "isACompanyDonation": "Questa donazione è fatta da una società", - "companyName": "Nome dell'azienda", - "giftRecipient": "Destinatario del regalo", - "directGiftRecipient": "Questa donazione sostiene", - "recipientName": "Nome del destinatario", - "recipientNameRequired": "Il nome del destinatario è richiesto", - "removeRecipient": "Rimuovere", - "giftMessage": "Messaggio regalo", - "firstNameRequired": "Il campo Nome è obbligatorio", - "lastNameRequired": "Il campo Cognome è obbligatorio", - "emailRequired": "L'e-mail è richiesta", - "addressRequired": "L'indirizzo è richiesto", - "cityRequired": "La città è richiesta", - "countryRequired": "Il paese è richiesto", - "companyRequired": "Il nome dell'azienda è obbligatorio", - "paymentDetails": "Dettagli di pagamento", - "validationFailed": "Convalida non riuscita", - "seedingYourDonation": "Seminare la tua donazione", - "pleaseDoNotCloseThisTab": "Si prega di non chiudere questa scheda!", - "perTree": "/ albero", - "stopTalkingStartPlanting": "Smettila di parlare. Inizia a piantare.", - "creditDebitCard": "Carta di credito/debito", - "cardNumber": "Numero della carta", - "expDate": "Exp. Data (MM/AAA)", - "selectCurrency": "Seleziona la tua valuta", - "treeDonationWithPFP": "Donazione di alberi con Plant-for-the-Planet", - "unavailable": "non disponibile", - "donationSuccessfulWith": "La tua {{currency}} {{totalAmount}} la donazione è stata pagata con successo con {{paymentTypeUsed}}.", - "donationSuccessful": "La tua {{currency}} {{totalAmount}} La donazione ha avuto successo.", - "giftSentMessage": "Abbiamo inviato un'e-mail a {{recipientName}} sul regalo.", - "contributionMessage": "Forse un giorno andrai a trovarli? Nel frattempo, potresti far conoscere ai tuoi amici alcuni dei loro alberi raccontando loro i tuoi?", - "plantTreesAtURL": "Piantate alberi a {{url}}", - "copiedToClipboard": "Testo copiato negli Appunti!", - "noProjectsFound": "Nessun progetto trovato", - "inTimeOfTaxReturns": "in tempo per la dichiarazione dei redditi.", - "titleToShare": "Piantare alberi contro la crisi climatica!", - "giftToName": "Regalo a", - "thisDonationSupports": "Questa donazione sostiene", - "plantTreesWith": "Pianta alberi con", - "textToShare": "Unisciti a {{name}} e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "thankyouHeaderText": "Siamo sulla strada di un \n

Trilione di alberi

", - "shareTextTitle": "Smettila di parlare. Avviare l'impianto", - "textToShareLinkedin": "Unisciti a {{name}} e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica", - "textToShareForMe": "Unisciti a me e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica", - "donationTokenInvalid": "Il gettone di donazione fornito non è valido.", - "giftTo": "Regalo a", - "supporting": "Supporto", - "selectProject": "Seleziona un progetto", - "giftValidation": "Si prega di inserire i dettagli del regalo", - "minDonate": "L'importo minimo della donazione è", - "noPaymentMethodError": "Impossibile elaborare il pagamento, si prega di riprovare.", - "somethingWentWrong": "Qualcosa è andato storto, per favore riprova presto!", - "underMaintenance": "L'applicazione è in fase di manutenzione, si prega di controllare status.plant-for-the-planet.org per i dettagli", - "waitingConfirmation": "Siamo attualmente in attesa di una conferma da parte della sua banca e le invieremo un'e-mail a breve. Si senta libero di chiudere questa pagina.", - "yourDonationRef": "Il riferimento della tua donazione è {{donationID}}", - "payWithGiroPay": "Paga con GiroPay", - "payWithSofort": "Paga con SOFORT", - "donationFailed": "Donazione fallita", - "donationFailedMessage": "Qualcosa è andato storto durante il completamento del pagamento. Se continui ad avere problemi, contattaci all'indirizzo support@plant-for-the-planet.org", - "donationPending": "Completare la sua donazione", - "donationPendingMessage": "Attualmente stiamo aspettando la conferma dalla sua banca. Questo potrebbe richiedere un po' di tempo quindi, per favore, sentiti libero di chiudere questa pagina. Ti invieremo la tua ricevuta via e-mail a breve.", - "sepaMessage": "Fornendo il tuo IBAN e confermando questo pagamento, autorizzi Plant-for-the-Planet e Stripe, il nostro fornitore di servizi di pagamento, a inviare istruzioni alla tua banca per addebitare il tuo conto. Hai diritto a un rimborso dalla tua banca secondo i termini e le condizioni del tuo accordo con la tua banca. Se hai qualche problema con la tua donazione, inviaci una mail a support@plant-for-the-planet.org", - "donationRef": "Rif. donazione", - "sepaDisclaimer": "I pagamenti SEPA richiedono 2-14 giorni lavorativi (di solito 3-5 giorni). Non appena arriva ti mandiamo una mail di conferma con il tuo certificato dell'albero e alziamo il contatore dell'albero.", - "sofortDisclaimer": "I pagamenti SOFORT richiedono 2-14 giorni lavorativi (di solito 2-3 giorni). Appena arriva ti mandiamo una mail di conferma con il tuo certificato dell'albero e alziamo il contatore dell'albero.", - "askPublishName": "Desidero pubblicare il mio nome completo nella classifica e nelle App di Plant-for-the-Planet. Opzionale", - "nameAlreadyPublished": "Il tuo nome completo apparirà nella classifica poiché il tuo profilo Plant-for-the-Planet è attualmente pubblico.", - "orgNamePublishedTax": "Il nome dell'azienda è visibile sulla nostra classifica e sull'app. Le ricevute delle detrazioni fiscali saranno emesse per lo stesso nome.", - "orgNamePublished": "Il nome dell'azienda è visibile sulla nostra classifica e sull'app.", - "aboutProject": "Circa il progetto" + "Donate": { + "fortreeCountTrees": "per {{treeCount}} Albero", + "fortreeCountTrees_plural": "per {{treeCount}} Alberi", + "yourTreesPlantedByOnLocation": "I vostri alberi {{treeCount}} saranno piantati da {{projectName}} in {{location}}.", + "yourTreesPlantedByOnLocation_plural": "I vostri alberi {{treeCount}} saranno piantati da {{projectName}} in {{location}}.", + "myTreesPlantedByOnLocation": "I miei {{treeCount}} alberi sono stati piantati in {{location}}.", + "myTreesPlantedByOnLocation_plural": "I miei {{treeCount}} alberi sono stati piantati in {{location}}.", + "topProjects": "Progetti Top", + "allCountProjects": "Tutti {{projectCount}} Progetti", + "searchProjects": "Ricerca progetti", + "viewProfile": "Visualizza il profilo", + "contactDetails": "Dettagli di contatto", + "readMore": "Per saperne di più", + "readLess": "Leggi di meno", + "treeDonation": "Donazione degli alberi", + "myDonationGiftToSomeone": "La mia donazione è dedicata a qualcuno", + "taxDeductionNotYetAvailable": "La detrazione fiscale non è ancora disponibile per ", + "taxDeductionNotAvailableForProject": "La detrazione fiscale non è ancora disponibile per questo progetto", + "youWillReceiveTaxDeduction": "Riceverete una ricevuta di detrazione fiscale per ", + "toProjectByOrganization": "A {{projectName}} di {{organizationName}}", + "firstName": "Nome", + "lastName": "Cognome", + "email": "Invia un'e-mail a", + "address": "Indirizzo", + "city": "Città", + "zipCode": "Codice postale", + "zipCodeAlphaNumValidation": "ZipCode non è valido", + "country": "Paese", + "isACompanyDonation": "Questa donazione è fatta da una società", + "companyName": "Nome dell'azienda", + "giftRecipient": "Destinatario del regalo", + "directGiftRecipient": "Questa donazione sostiene", + "recipientName": "Nome del destinatario", + "recipientNameRequired": "Il nome del destinatario è richiesto", + "removeRecipient": "Rimuovere", + "giftMessage": "Messaggio regalo", + "firstNameRequired": "Il campo Nome è obbligatorio", + "lastNameRequired": "Il campo Cognome è obbligatorio", + "emailRequired": "L'e-mail è richiesta", + "addressRequired": "L'indirizzo è richiesto", + "cityRequired": "La città è richiesta", + "countryRequired": "Il paese è richiesto", + "companyRequired": "Il nome dell'azienda è obbligatorio", + "paymentDetails": "Dettagli di pagamento", + "validationFailed": "Convalida non riuscita", + "seedingYourDonation": "Seminare la tua donazione", + "pleaseDoNotCloseThisTab": "Si prega di non chiudere questa scheda!", + "perTree": "/ albero", + "stopTalkingStartPlanting": "Smettila di parlare. Inizia a piantare.", + "creditDebitCard": "Carta di credito/debito", + "cardNumber": "Numero della carta", + "expDate": "Exp. Data (MM/AAA)", + "selectCurrency": "Seleziona la tua valuta", + "treeDonationWithPFP": "Donazione di alberi con Plant-for-the-Planet", + "unavailable": "non disponibile", + "donationSuccessfulWith": "La tua {{currency}} {{totalAmount}} la donazione è stata pagata con successo con {{paymentTypeUsed}}.", + "donationSuccessful": "La tua {{currency}} {{totalAmount}} La donazione ha avuto successo.", + "giftSentMessage": "Abbiamo inviato un'e-mail a {{recipientName}} sul regalo.", + "contributionMessage": "Forse un giorno andrai a trovarli? Nel frattempo, potresti far conoscere ai tuoi amici alcuni dei loro alberi raccontando loro i tuoi?", + "plantTreesAtURL": "Piantate alberi a {{url}}", + "copiedToClipboard": "Testo copiato negli Appunti!", + "noProjectsFound": "Nessun progetto trovato", + "inTimeOfTaxReturns": "in tempo per la dichiarazione dei redditi.", + "titleToShare": "Piantare alberi contro la crisi climatica!", + "giftToName": "Regalo a", + "thisDonationSupports": "Questa donazione sostiene", + "plantTreesWith": "Pianta alberi con", + "textToShare": "Unisciti a {{name}} e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica #StopTalkingStartPlanting #TrillionTrees @trilliontrees", + "thankyouHeaderText": "Siamo sulla strada di un \n

Trilione di alberi

", + "shareTextTitle": "Smettila di parlare. Avviare l'impianto", + "textToShareLinkedin": "Unisciti a {{name}} e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica", + "textToShareForMe": "Unisciti a me e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica", + "donationTokenInvalid": "Il gettone di donazione fornito non è valido.", + "giftTo": "Regalo a", + "supporting": "Supporto", + "selectProject": "Seleziona un progetto", + "giftValidation": "Si prega di inserire i dettagli del regalo", + "minDonate": "L'importo minimo della donazione è", + "noPaymentMethodError": "Impossibile elaborare il pagamento, si prega di riprovare.", + "somethingWentWrong": "Qualcosa è andato storto, per favore riprova presto!", + "underMaintenance": "L'applicazione è in fase di manutenzione, si prega di controllare status.plant-for-the-planet.org per i dettagli", + "waitingConfirmation": "Siamo attualmente in attesa di una conferma da parte della sua banca e le invieremo un'e-mail a breve. Si senta libero di chiudere questa pagina.", + "yourDonationRef": "Il riferimento della tua donazione è {{donationID}}", + "payWithGiroPay": "Paga con GiroPay", + "payWithSofort": "Paga con SOFORT", + "donationFailed": "Donazione fallita", + "donationFailedMessage": "Qualcosa è andato storto durante il completamento del pagamento. Se continui ad avere problemi, contattaci all'indirizzo support@plant-for-the-planet.org", + "donationPending": "Completare la sua donazione", + "donationPendingMessage": "Attualmente stiamo aspettando la conferma dalla sua banca. Questo potrebbe richiedere un po' di tempo quindi, per favore, sentiti libero di chiudere questa pagina. Ti invieremo la tua ricevuta via e-mail a breve.", + "sepaMessage": "Fornendo il tuo IBAN e confermando questo pagamento, autorizzi Plant-for-the-Planet e Stripe, il nostro fornitore di servizi di pagamento, a inviare istruzioni alla tua banca per addebitare il tuo conto. Hai diritto a un rimborso dalla tua banca secondo i termini e le condizioni del tuo accordo con la tua banca. Se hai qualche problema con la tua donazione, inviaci una mail a support@plant-for-the-planet.org", + "donationRef": "Rif. donazione", + "sepaDisclaimer": "I pagamenti SEPA richiedono 2-14 giorni lavorativi (di solito 3-5 giorni). Non appena arriva ti mandiamo una mail di conferma con il tuo certificato dell'albero e alziamo il contatore dell'albero.", + "sofortDisclaimer": "I pagamenti SOFORT richiedono 2-14 giorni lavorativi (di solito 2-3 giorni). Appena arriva ti mandiamo una mail di conferma con il tuo certificato dell'albero e alziamo il contatore dell'albero.", + "askPublishName": "Desidero pubblicare il mio nome completo nella classifica e nelle App di Plant-for-the-Planet. Opzionale", + "nameAlreadyPublished": "Il tuo nome completo apparirà nella classifica poiché il tuo profilo Plant-for-the-Planet è attualmente pubblico.", + "orgNamePublishedTax": "Il nome dell'azienda è visibile sulla nostra classifica e sull'app. Le ricevute delle detrazioni fiscali saranno emesse per lo stesso nome.", + "orgNamePublished": "Il nome dell'azienda è visibile sulla nostra classifica e sull'app.", + "aboutProject": "Circa il progetto" + } } \ No newline at end of file diff --git a/public/static/locales/it/donationLink.json b/public/static/locales/it/donationLink.json index 6f31cf5a2e..fa17184690 100644 --- a/public/static/locales/it/donationLink.json +++ b/public/static/locales/it/donationLink.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "DonationLink": {} +} \ No newline at end of file diff --git a/public/static/locales/it/editProfile.json b/public/static/locales/it/editProfile.json index 70a1150ba0..424bb8c2f1 100644 --- a/public/static/locales/it/editProfile.json +++ b/public/static/locales/it/editProfile.json @@ -1,35 +1,37 @@ { - "loginTitle": "{{log}} - Login", - "signUpText": "Completa l'iscrizione", - "profileTypes": "{{item.title}}", - "createAccount": "Crea un conto", - "individual": "Individuale", - "tpo": "Organizzazione di riforestazione", - "education": "Scuola", - "organization": "Azienda", - "profileCreated": "Profilo creato con successo!", - "profileCreationFailed": "Errore nella creazione del profilo. Riprovare.", - "profileCreationError": "Errore nella creazione del profilo.", - "edit": "Modifica profilo", - "privateAccountTxt": "Il tuo profilo è nascosto e nella classifica appare solo il tuo nome di battesimo", - "save": "Salva", - "profilePicUpdated": "L'immagine del profilo è in fase di aggiornamento...", - "profileSaved": "Salvato con successo!", - "profileSaveFailed": "Errore nell'aggiornamento del profilo.", - "changeAccountToPublic": "Passare a un account pubblico", - "publicAccount": "Conto pubblico", - "accountPrivacyChangeText": "Per creare un widget di profilo devi avere un account pubblico. Cliccando su continua cambi le tue impostazioni di privacy in pubblico.", - "continue": "Continua", - "cancel": "Annulla", - "fieldLabels": { - "profileType": "Sono un", - "name": "Nome di {{type}}", - "website": "Sito web", - "privateAccount": "Conto privato", - "subscribe": "Iscriviti alle notizie via e-mail" - }, - "validationErrors": { - "nameRequired": "Si prega di inserire un nome", - "websiteInvalid": "Inserire l'URL del sito web valido" + "EditProfile": { + "loginTitle": "{{log}} - Login", + "signUpText": "Completa l'iscrizione", + "profileTypes": "{{item.title}}", + "createAccount": "Crea un conto", + "individual": "Individuale", + "tpo": "Organizzazione di riforestazione", + "education": "Scuola", + "organization": "Azienda", + "profileCreated": "Profilo creato con successo!", + "profileCreationFailed": "Errore nella creazione del profilo. Riprovare.", + "profileCreationError": "Errore nella creazione del profilo.", + "edit": "Modifica profilo", + "privateAccountTxt": "Il tuo profilo è nascosto e nella classifica appare solo il tuo nome di battesimo", + "save": "Salva", + "profilePicUpdated": "L'immagine del profilo è in fase di aggiornamento...", + "profileSaved": "Salvato con successo!", + "profileSaveFailed": "Errore nell'aggiornamento del profilo.", + "changeAccountToPublic": "Passare a un account pubblico", + "publicAccount": "Conto pubblico", + "accountPrivacyChangeText": "Per creare un widget di profilo devi avere un account pubblico. Cliccando su continua cambi le tue impostazioni di privacy in pubblico.", + "continue": "Continua", + "cancel": "Annulla", + "fieldLabels": { + "profileType": "Sono un", + "name": "Nome di {{type}}", + "website": "Sito web", + "privateAccount": "Conto privato", + "subscribe": "Iscriviti alle notizie via e-mail" + }, + "validationErrors": { + "nameRequired": "Si prega di inserire un nome", + "websiteInvalid": "Inserire l'URL del sito web valido" + } } } \ No newline at end of file diff --git a/public/static/locales/it/giftfunds.json b/public/static/locales/it/giftfunds.json index 6f31cf5a2e..b3f526f2ea 100644 --- a/public/static/locales/it/giftfunds.json +++ b/public/static/locales/it/giftfunds.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "Giftfunds": {} +} \ No newline at end of file diff --git a/public/static/locales/it/leaderboard.json b/public/static/locales/it/leaderboard.json index f29984e226..169b26a6e7 100644 --- a/public/static/locales/it/leaderboard.json +++ b/public/static/locales/it/leaderboard.json @@ -1,7 +1,9 @@ { - "forestFrontrunners": "Frontiere della foresta", - "mostRecent": "I più recenti", - "mostTrees": "La maggior parte degli alberi", - "videoTitle": "E infine, questo", - "searchUser": "Ricerca utente" + "Leaderboard": { + "forestFrontrunners": "Frontiere della foresta", + "mostRecent": "I più recenti", + "mostTrees": "La maggior parte degli alberi", + "videoTitle": "E infine, questo", + "searchUser": "Ricerca utente" + } } \ No newline at end of file diff --git a/public/static/locales/it/login.json b/public/static/locales/it/login.json index 0967ef424b..d5ced69eb6 100644 --- a/public/static/locales/it/login.json +++ b/public/static/locales/it/login.json @@ -1 +1,3 @@ -{} +{ + "Login": {} +} \ No newline at end of file diff --git a/public/static/locales/it/managePayouts.json b/public/static/locales/it/managePayouts.json index 6f31cf5a2e..21dfda5e63 100644 --- a/public/static/locales/it/managePayouts.json +++ b/public/static/locales/it/managePayouts.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "ManagePayouts": {} +} \ No newline at end of file diff --git a/public/static/locales/it/manageProjects.json b/public/static/locales/it/manageProjects.json index 09d3071fba..45d49fdbf7 100644 --- a/public/static/locales/it/manageProjects.json +++ b/public/static/locales/it/manageProjects.json @@ -1,119 +1,121 @@ { - "basicDetails": "Dettagli di base", - "projectMedia": "Media del progetto", - "detailedAnalysis": "Analisi dettagliata", - "projectSites": "Siti del progetto", - "projectSpending": "Spesa del progetto", - "review": "Recensione", - "name": "Nome del progetto", - "nameValidation": "Inserire il nome del progetto", - "slug": "URL del progetto", - "slugValidation": "Inserire l'URL del progetto", - "classification": "Tipo di progetto", - "classificationValidation": "Selezionare il tipo di progetto", - "countTarget": "Obiettivo Albero", - "countTargetValidation": "Inserire l'obiettivo dell'albero", - "countTargetValidation2": "L'obiettivo dell'albero dovrebbe essere più di 1", - "website": "Sito web", - "websiteValidationRequired": "Inserire l'URL del sito web", - "websiteValidationInvalid": "URL del sito web non valido", - "aboutProject": "Informazioni sul progetto", - "aboutProjectValidation": "Inserisci Informazioni sul progetto", - "receiveDonations": "Ricevere donazioni", - "receiveDonationsInfo": "Attivare una volta completato il profilo del progetto. Plant-for-the-Planet esaminerà il profilo e vi informerà se siete idonei a ricevere donazioni attraverso questa piattaforma. Questo potrebbe richiedere alcune settimane.", - "unitCost": "Costo per albero (in EUR)", - "projectLocation": "Ubicazione del progetto", - "visitorAssistanceLabel": "Fornirò alloggio, accesso al sito e trasporto locale se un recensore verrà inviato da Plant-for-the-Planet.", - "publishProject": "Pubblicare il progetto", - "saveAndContinue": "Salva e continua", - "youtubeURL": "Collegamento video Youtube", - "youtubeURLValidation": "Collegamento video Youtube non valido", - "addCaption": "Aggiungi didascalia", - "yearOfAbandonment": "Circa anno di abbandono", - "plantingDensity": "Densità di impianto", - "employeeCount": "Conteggio dei dipendenti", - "mainChallenge": "Sfida principale", - "whyThisSite": "Perché questo sito?", - "siteOwner": "Proprietario del sito", - "ownerName": "Nome del proprietario", - "acquisitionDate": "Data di acquisizione", - "yearOfDegradation": "Anno di degrado", - "causeOfDegradation": "Causa del degrado", - "longTermPlan": "Piano a lungo termine per il sito", - "isCertified": "Questo progetto è stato certificato", - "certifierName": "Nome del certificatore", - "siteName": "Nome del sito", - "spendingYear": "Anno", - "spendingAmount": "Spesa (in EUR)", - "resetMessage": "Si prega di compilare prima i dettagli di base", - "uploadPhotos": "Carica foto", - "dragIn": "o trascinarli dentro", - "backToBasic": "Torna ai dettagli di base", - "projectNotFound": "Progetto non trovato", - "siteOwnerPrivate": "Privato", - "siteOwnerPublic": "Proprietà pubblica", - "siteOwnerSmallHolding": "Piccola azienda", - "siteOwnerCommunal": "Terreno comunale", - "siteOwnerOwned": "Di proprietà del proprietario", - "siteOwnerOther": "Altro", - "yearAbandonedInfo": "Quando è stato l'ultimo intervento umano significativo nel sito? Incluso il disboscamento, l'agricoltura, il pascolo del bestiame, la combustione indotta dall'uomo.", - "treePerHa": "alberi per ha", - "employeesCountInfo": "Equivalente a una settimana di 40 ore. Vale a dire che due dipendenti a metà tempo contano come uno.", - "max300Chars": "Massimo 300 caratteri ammessi", - "longTermPlanInfo": "Quali misure sono in atto per proiettare la foresta a lungo termine? Come si finanzia? Quali risorse saranno estratte dal sito?", - "backToMedia": "Torna ai media del progetto", - "siteStatusPlanting": "Piantare", - "siteStatusPlanted": "Piantato", - "siteStatusBarren": "Arido", - "siteStatusReforestation": "Riforestazione", - "siteStatus": "Stato del sito", - "selectProjectStatus": "Selezionare lo stato del progetto", - "saveAndAddSite": "Salva e aggiungi un altro sito", - "addSite": "Aggiungi un altro sito", - "backToAnalysis": "Torna all'analisi dettagliata", - "spendingYearValidation": "Si prega di aggiungere Anno di spesa", - "spendingAmountValidation": "Si prega di inserire l'Importo Speso", - "uploadReport": "Carica il rapporto", - "dragInPdf": "o trascinare in un pdf", - "addAnotherYear": "Aggiungi un altro anno", - "backToSites": "Torna ai siti del progetto", - "certifiedBy": "Certificato da", - "certificationDateValidation": "Si prega di aggiungere la data di certificazione", - "uploadCertificate": "Carica il certificato", - "addCertificate": "Aggiungere un'altra certificazione", - "dropGeoJson": "Drop .geojson o .kml", - "projectUnderReview": "Il vostro progetto è in fase di revisione, vi preghiamo di attendere.", - "projectForReview": "Ora è possibile presentare il progetto per la revisione.", - "backToSpending": "Torna alla spesa per il progetto", - "pendingReview": "In attesa di revisione", - "submitForReview": "Invia per la revisione", - "addProject": "Aggiungi progetto", - "abandonment": "Abbandono", - "survivalRate": "Tasso di sopravvivenza", - "survivalRateInfo": "Percentuale di alberi che sopravvivono al primo anno di piantagione", - "employees": "Dipendenti", - "siteOwnership": "Proprietà del sito", - "longTermProtection": "Protezione a lungo termine", - "externalCertifications": "Certificazioni esterne", - "projectSpendingFinancial": "Spesa per progetti finanziari", - "issueDate": "Data di emissione", - "acquisitionYear": "Anno di acquisizione", - "largeScalePlanting": "Impianto su larga scala", - "agroforestry": "Agroforesteria", - "naturalRegeneration": "Rigenerazione naturale", - "managedRegeneration": "Rigenerazione gestita", - "urbanPlanting": "Piantumazione urbana", - "otherPlanting": "Altri impianti", - "projectType": "Tipo di progetto", - "polygonRequired": "Il poligono è richiesto", - "fileSizeLimit": "Il file è più grande di 10 mb", - "fileImageOnly": "Il tipo di file deve essere immagine", - "filePDFOnly": "Il tipo di file deve essere PDF", - "acceptedReview": "Le modifiche al tuo progetto sono Live", - "deniedReview": "La tua recensione è negata", - "saveSite": "Salvare il sito", - "latitude": "Latitudine", - "longitude": "Longitudine", - "latitudeRequired": "La latitudine è richiesta", - "longitudeRequired": "La longitudine è richiesta" + "ManageProjects": { + "basicDetails": "Dettagli di base", + "projectMedia": "Media del progetto", + "detailedAnalysis": "Analisi dettagliata", + "projectSites": "Siti del progetto", + "projectSpending": "Spesa del progetto", + "review": "Recensione", + "name": "Nome del progetto", + "nameValidation": "Inserire il nome del progetto", + "slug": "URL del progetto", + "slugValidation": "Inserire l'URL del progetto", + "classification": "Tipo di progetto", + "classificationValidation": "Selezionare il tipo di progetto", + "countTarget": "Obiettivo Albero", + "countTargetValidation": "Inserire l'obiettivo dell'albero", + "countTargetValidation2": "L'obiettivo dell'albero dovrebbe essere più di 1", + "website": "Sito web", + "websiteValidationRequired": "Inserire l'URL del sito web", + "websiteValidationInvalid": "URL del sito web non valido", + "aboutProject": "Informazioni sul progetto", + "aboutProjectValidation": "Inserisci Informazioni sul progetto", + "receiveDonations": "Ricevere donazioni", + "receiveDonationsInfo": "Attivare una volta completato il profilo del progetto. Plant-for-the-Planet esaminerà il profilo e vi informerà se siete idonei a ricevere donazioni attraverso questa piattaforma. Questo potrebbe richiedere alcune settimane.", + "unitCost": "Costo per albero (in EUR)", + "projectLocation": "Ubicazione del progetto", + "visitorAssistanceLabel": "Fornirò alloggio, accesso al sito e trasporto locale se un recensore verrà inviato da Plant-for-the-Planet.", + "publishProject": "Pubblicare il progetto", + "saveAndContinue": "Salva e continua", + "youtubeURL": "Collegamento video Youtube", + "youtubeURLValidation": "Collegamento video Youtube non valido", + "addCaption": "Aggiungi didascalia", + "yearOfAbandonment": "Circa anno di abbandono", + "plantingDensity": "Densità di impianto", + "employeeCount": "Conteggio dei dipendenti", + "mainChallenge": "Sfida principale", + "whyThisSite": "Perché questo sito?", + "siteOwner": "Proprietario del sito", + "ownerName": "Nome del proprietario", + "acquisitionDate": "Data di acquisizione", + "yearOfDegradation": "Anno di degrado", + "causeOfDegradation": "Causa del degrado", + "longTermPlan": "Piano a lungo termine per il sito", + "isCertified": "Questo progetto è stato certificato", + "certifierName": "Nome del certificatore", + "siteName": "Nome del sito", + "spendingYear": "Anno", + "spendingAmount": "Spesa (in EUR)", + "resetMessage": "Si prega di compilare prima i dettagli di base", + "uploadPhotos": "Carica foto", + "dragIn": "o trascinarli dentro", + "backToBasic": "Torna ai dettagli di base", + "projectNotFound": "Progetto non trovato", + "siteOwnerPrivate": "Privato", + "siteOwnerPublic": "Proprietà pubblica", + "siteOwnerSmallHolding": "Piccola azienda", + "siteOwnerCommunal": "Terreno comunale", + "siteOwnerOwned": "Di proprietà del proprietario", + "siteOwnerOther": "Altro", + "yearAbandonedInfo": "Quando è stato l'ultimo intervento umano significativo nel sito? Incluso il disboscamento, l'agricoltura, il pascolo del bestiame, la combustione indotta dall'uomo.", + "treePerHa": "alberi per ha", + "employeesCountInfo": "Equivalente a una settimana di 40 ore. Vale a dire che due dipendenti a metà tempo contano come uno.", + "max300Chars": "Massimo 300 caratteri ammessi", + "longTermPlanInfo": "Quali misure sono in atto per proiettare la foresta a lungo termine? Come si finanzia? Quali risorse saranno estratte dal sito?", + "backToMedia": "Torna ai media del progetto", + "siteStatusPlanting": "Piantare", + "siteStatusPlanted": "Piantato", + "siteStatusBarren": "Arido", + "siteStatusReforestation": "Riforestazione", + "siteStatus": "Stato del sito", + "selectProjectStatus": "Selezionare lo stato del progetto", + "saveAndAddSite": "Salva e aggiungi un altro sito", + "addSite": "Aggiungi un altro sito", + "backToAnalysis": "Torna all'analisi dettagliata", + "spendingYearValidation": "Si prega di aggiungere Anno di spesa", + "spendingAmountValidation": "Si prega di inserire l'Importo Speso", + "uploadReport": "Carica il rapporto", + "dragInPdf": "o trascinare in un pdf", + "addAnotherYear": "Aggiungi un altro anno", + "backToSites": "Torna ai siti del progetto", + "certifiedBy": "Certificato da", + "certificationDateValidation": "Si prega di aggiungere la data di certificazione", + "uploadCertificate": "Carica il certificato", + "addCertificate": "Aggiungere un'altra certificazione", + "dropGeoJson": "Drop .geojson o .kml", + "projectUnderReview": "Il vostro progetto è in fase di revisione, vi preghiamo di attendere.", + "projectForReview": "Ora è possibile presentare il progetto per la revisione.", + "backToSpending": "Torna alla spesa per il progetto", + "pendingReview": "In attesa di revisione", + "submitForReview": "Invia per la revisione", + "addProject": "Aggiungi progetto", + "abandonment": "Abbandono", + "survivalRate": "Tasso di sopravvivenza", + "survivalRateInfo": "Percentuale di alberi che sopravvivono al primo anno di piantagione", + "employees": "Dipendenti", + "siteOwnership": "Proprietà del sito", + "longTermProtection": "Protezione a lungo termine", + "externalCertifications": "Certificazioni esterne", + "projectSpendingFinancial": "Spesa per progetti finanziari", + "issueDate": "Data di emissione", + "acquisitionYear": "Anno di acquisizione", + "largeScalePlanting": "Impianto su larga scala", + "agroforestry": "Agroforesteria", + "naturalRegeneration": "Rigenerazione naturale", + "managedRegeneration": "Rigenerazione gestita", + "urbanPlanting": "Piantumazione urbana", + "otherPlanting": "Altri impianti", + "projectType": "Tipo di progetto", + "polygonRequired": "Il poligono è richiesto", + "fileSizeLimit": "Il file è più grande di 10 mb", + "fileImageOnly": "Il tipo di file deve essere immagine", + "filePDFOnly": "Il tipo di file deve essere PDF", + "acceptedReview": "Le modifiche al tuo progetto sono Live", + "deniedReview": "La tua recensione è negata", + "saveSite": "Salvare il sito", + "latitude": "Latitudine", + "longitude": "Longitudine", + "latitudeRequired": "La latitudine è richiesta", + "longitudeRequired": "La longitudine è richiesta" + } } \ No newline at end of file diff --git a/public/static/locales/it/maps.json b/public/static/locales/it/maps.json index d42f089a68..390715ceea 100644 --- a/public/static/locales/it/maps.json +++ b/public/static/locales/it/maps.json @@ -1,44 +1,46 @@ { - "explore": "Esplora", - "forests": "Foreste attuali", - "restoration": "Potenziale di restauro", - "deforestation": "Deforestazione", - "planted": "Piantato", - "projects": "Progetti", - "3trilliontrees": "Il mondo ha circa 3 trilioni di alberi oggi (\"Foreste\"). E lo spazio per un altro trilione (\"Potenziale di riforestazione\").", - "high": "Alto", - "low": "Basso", - "forestInfo": "Attualmente esistono 3,04 trilioni di alberi a livello globale. Abbattuti da sei trilioni di alberi prima che l'uomo iniziasse ad abbattere le foreste, circa 11.000 anni fa. La mappa mostra il numero di alberi per km2.", - "restorationInfo": " Mezzo miliardo di ettari sono adatti per il restauro su larga scala di foreste chiuse. Altri mezzo miliardo e mezzo di ettari sono adatti per il restauro di mosaici, che combinano le foreste con altri usi del suolo come l'agroforesteria, l'agricoltura di piccoli agricoltori e gli insediamenti.", - "location": "Posizione", - "timeTravel": "Viaggio nel tempo", - "vegetationChange": "Cambiamento della vegetazione", - "beta": "BETA", - "baseLayer": "Strato di base e mappe vettoriali", - "satelliteImagery": "Immagini satellitari", - "fieldData": "Dati sul campo", - "trees": "Alberi", - "ha": "ha", - "plantingDate": "Data di semina", - "plantingDensity": "Densità di piantagione", - "speciesPlanted": "Specie piantate", - "sampleTrees": "Alberi campione", - "meterHigh": "m alto", - "cmWide": "larghezza cm", - "treesPerHa": "alberi per ha", - "sampleTree": "Albero campione", - "scientificName": "Nome scientifico", - "measurements": "Misure", - "treeTag": "Etichetta dell'albero", - "1Tree": "1 Albero", - "plot": "Trama", - "tag": "Etichetta", - "plantingDensityInfo": "In caso di arricchimento, la densità di piantagione può essere inferiore.", - "plantationDensityFormula": "Densità di piantagione = No. di alberi / area di piantagione", - "unknown": "Sconosciuto", - "showWholeArea": "Mostra tutta l'area", - "daysAgo": "{{days}} giorni fa", - "today": "Oggi", - "yesterday": "Ieri", - "clickForDetails": "Clicca per i dettagli" + "Maps": { + "explore": "Esplora", + "forests": "Foreste attuali", + "restoration": "Potenziale di restauro", + "deforestation": "Deforestazione", + "planted": "Piantato", + "projects": "Progetti", + "3trilliontrees": "Il mondo ha circa 3 trilioni di alberi oggi (\"Foreste\"). E lo spazio per un altro trilione (\"Potenziale di riforestazione\").", + "high": "Alto", + "low": "Basso", + "forestInfo": "Attualmente esistono 3,04 trilioni di alberi a livello globale. Abbattuti da sei trilioni di alberi prima che l'uomo iniziasse ad abbattere le foreste, circa 11.000 anni fa. La mappa mostra il numero di alberi per km2.", + "restorationInfo": " Mezzo miliardo di ettari sono adatti per il restauro su larga scala di foreste chiuse. Altri mezzo miliardo e mezzo di ettari sono adatti per il restauro di mosaici, che combinano le foreste con altri usi del suolo come l'agroforesteria, l'agricoltura di piccoli agricoltori e gli insediamenti.", + "location": "Posizione", + "timeTravel": "Viaggio nel tempo", + "vegetationChange": "Cambiamento della vegetazione", + "beta": "BETA", + "baseLayer": "Strato di base e mappe vettoriali", + "satelliteImagery": "Immagini satellitari", + "fieldData": "Dati sul campo", + "trees": "Alberi", + "ha": "ha", + "plantingDate": "Data di semina", + "plantingDensity": "Densità di piantagione", + "speciesPlanted": "Specie piantate", + "sampleTrees": "Alberi campione", + "meterHigh": "m alto", + "cmWide": "larghezza cm", + "treesPerHa": "alberi per ha", + "sampleTree": "Albero campione", + "scientificName": "Nome scientifico", + "measurements": "Misure", + "treeTag": "Etichetta dell'albero", + "1Tree": "1 Albero", + "plot": "Trama", + "tag": "Etichetta", + "plantingDensityInfo": "In caso di arricchimento, la densità di piantagione può essere inferiore.", + "plantationDensityFormula": "Densità di piantagione = No. di alberi / area di piantagione", + "unknown": "Sconosciuto", + "showWholeArea": "Mostra tutta l'area", + "daysAgo": "{{days}} giorni fa", + "today": "Oggi", + "yesterday": "Ieri", + "clickForDetails": "Clicca per i dettagli" + } } \ No newline at end of file diff --git a/public/static/locales/it/me.json b/public/static/locales/it/me.json index ceec81b614..aa9331c8c7 100644 --- a/public/static/locales/it/me.json +++ b/public/static/locales/it/me.json @@ -1,77 +1,79 @@ { - "treesPlanted": "Albero piantato", - "treesPlanted_plural": "Alberi piantati", - "target": "Destinatario", - "share": "Condividi", - "registerTrees": "Registrare gli alberi", - "registerTreesDescription": "Registrate gli alberi che avete piantato voi stessi, ad esempio nel vostro giardino.", - "redeem": "Riscatta", - "myForest": "La mia foresta", - "giftToGiftee": "Regalo a {{gifteeName}}", - "settingManageProject": "Gestire progetti", - "deleteAccount": "Cancellare il conto", - "userTree": "Registrare gli alberi", - "accountHistory": "Storia dell'account", - "logout": "Logout", - "close": "Chiudere", - "support": "Supporto", - "addTarget": "Aggiungi obiettivo", - "noOfTrees": "No di alberi", - "datePlanted": "Data prevista", - "speciesIsRequired": "La specie è richiesta", - "treeSpecies": "Specie arboree", - "drawPolygon": "Si prega di disegnare un poligono per localizzare i vostri alberi", - "selectLocation": "Selezionare la posizione di piantagione degli alberi sulla mappa", - "registerButton": "Registrati", - "startDrawing": "Inizia a disegnare", - "save": "Salva", - "treesRequired": "Numero di alberi è richiesto", - "wentWrong": "Qualcosa è andato storto. Si prega di contattare support@plant-for-the-planet.org", - "locationMissing": "Seleziona la posizione sulla mappa", - "uploadPhotos": "Carica foto", - "dragHere": "o trascinare qui", - "contribNotFound": "Contributo non trovato", - "errorOccured": "Errore avvenuto", - "contribSuccess": "Aggiunto con successo {{treeCount}} {{treeSpecies}} 🌳 da {{plantDate}}", - "moreThanOne": "minimo 1 albero richiesto", - "registered": "Registrato", - "receivedTrees": "Alberi ricevuti", - "receivedFrom": "Ricevuto da {{name}}", - "redeemedTrees": "Alberi Riscattati", - "myAccount": "Il mio conto", - "all": "Tutti", - "noRecords": "Nessun record", - "filters": "Filtri", - "registeredTrees": "Alberi registrati", - "embedWidget": "Embed Widget", - "tree-donation": "Donazione di alberi", - "tree-gift": "Regalo dell'albero", - "trees": "Alberi", - "amount": "Importo", - "created": "Data di creazione", - "project": "Nome del progetto", - "method": "Metodo di pagamento", - "treeCount": "Conteggio degli alberi", - "lastUpdate": "Ultimo aggiornamento", - "donorCertificate": "Certificato del donatore", - "download": "Scaricare", - "donations": "Donazioni", - "in-progress": "In corso", - "cancelled": "Cancellato", - "card": "Scheda", - "sepa": "SEPA", - "success": "Successo", - "paid": "Successo", - "initiated": "Iniziato", - "failed": "Fallito", - "pending": "In attesa di", - "refunded": "Rimborsato", - "referred": "Riferito a", - "in-dispute": "In discussione", - "dispute-lost": "Disputa persa", - "nameForest": "{{name}}'s Forest", - "taxReceipt": "Ricevuta fiscale", - "setTarget": "Impostare l'obiettivo", - "targetSave": "Salva", - "targetErrorMessage": "Il numero deve essere positivo o superiore a zero" + "Me": { + "treesPlanted": "Albero piantato", + "treesPlanted_plural": "Alberi piantati", + "target": "Destinatario", + "share": "Condividi", + "registerTrees": "Registrare gli alberi", + "registerTreesDescription": "Registrate gli alberi che avete piantato voi stessi, ad esempio nel vostro giardino.", + "redeem": "Riscatta", + "myForest": "La mia foresta", + "giftToGiftee": "Regalo a {{gifteeName}}", + "settingManageProject": "Gestire progetti", + "deleteAccount": "Cancellare il conto", + "userTree": "Registrare gli alberi", + "accountHistory": "Storia dell'account", + "logout": "Logout", + "close": "Chiudere", + "support": "Supporto", + "addTarget": "Aggiungi obiettivo", + "noOfTrees": "No di alberi", + "datePlanted": "Data prevista", + "speciesIsRequired": "La specie è richiesta", + "treeSpecies": "Specie arboree", + "drawPolygon": "Si prega di disegnare un poligono per localizzare i vostri alberi", + "selectLocation": "Selezionare la posizione di piantagione degli alberi sulla mappa", + "registerButton": "Registrati", + "startDrawing": "Inizia a disegnare", + "save": "Salva", + "treesRequired": "Numero di alberi è richiesto", + "wentWrong": "Qualcosa è andato storto. Si prega di contattare support@plant-for-the-planet.org", + "locationMissing": "Seleziona la posizione sulla mappa", + "uploadPhotos": "Carica foto", + "dragHere": "o trascinare qui", + "contribNotFound": "Contributo non trovato", + "errorOccured": "Errore avvenuto", + "contribSuccess": "Aggiunto con successo {{treeCount}} {{treeSpecies}} 🌳 da {{plantDate}}", + "moreThanOne": "minimo 1 albero richiesto", + "registered": "Registrato", + "receivedTrees": "Alberi ricevuti", + "receivedFrom": "Ricevuto da {{name}}", + "redeemedTrees": "Alberi Riscattati", + "myAccount": "Il mio conto", + "all": "Tutti", + "noRecords": "Nessun record", + "filters": "Filtri", + "registeredTrees": "Alberi registrati", + "embedWidget": "Embed Widget", + "tree-donation": "Donazione di alberi", + "tree-gift": "Regalo dell'albero", + "trees": "Alberi", + "amount": "Importo", + "created": "Data di creazione", + "project": "Nome del progetto", + "method": "Metodo di pagamento", + "treeCount": "Conteggio degli alberi", + "lastUpdate": "Ultimo aggiornamento", + "donorCertificate": "Certificato del donatore", + "download": "Scaricare", + "donations": "Donazioni", + "in-progress": "In corso", + "cancelled": "Cancellato", + "card": "Scheda", + "sepa": "SEPA", + "success": "Successo", + "paid": "Successo", + "initiated": "Iniziato", + "failed": "Fallito", + "pending": "In attesa di", + "refunded": "Rimborsato", + "referred": "Riferito a", + "in-dispute": "In discussione", + "dispute-lost": "Disputa persa", + "nameForest": "{{name}}'s Forest", + "taxReceipt": "Ricevuta fiscale", + "setTarget": "Impostare l'obiettivo", + "targetSave": "Salva", + "targetErrorMessage": "Il numero deve essere positivo o superiore a zero" + } } \ No newline at end of file diff --git a/public/static/locales/it/planet.json b/public/static/locales/it/planet.json index 2a1629e554..87e8592235 100644 --- a/public/static/locales/it/planet.json +++ b/public/static/locales/it/planet.json @@ -1,14 +1,16 @@ { - "treesDonated": "Alberi donati dal 2019", - "plantedByTPO": "Pianificato dalle {{projects}}+ organizzazioni partecipanti", - "plantedGlobally": "Alberi, che sono riportati a noi da 2006", - "forestLoss": "Perdita netta di foreste negli ultimi 12 mesi", - "estimateOf": "Stima della perdita annuale dell'albero di", - "globallySince": "Numero di alberi dichiarati alla Billion Tree Campaign (poi Trillion Tree Campaign) dalla sua fondazione da parte dell'UNEP nel 2006", - "restoreTrees": "Come possiamo ripristinare un trilione di alberi?", - "watchVideo": "Guarda il video", - "selectProjects": "Come selezioniamo i progetti", - "learnMore": "Per saperne di più", - "treesDonatedDescription": "Tutte le donazioni di alberi elaborate da Plant-for-the-Planet dal 2019. Include alberi donati direttamente attraverso le nostre app, nonché grandi donazioni private e aziendali. Queste donazioni non sono andate tutte a progetti gestiti direttamente da Plant-for-the-Planet, ma tutte le organizzazioni di restauro partecipanti. Alcuni alberi donati potrebbero non essere ancora stati piantati.", - "treesPlantedDescription": "Tutti gli alberi donati attraverso Plant-for-the-Planet e altri alberi segnalati come piantati dalle organizzazioni di restauro partecipanti" + "Planet": { + "treesDonated": "Alberi donati dal 2019", + "plantedByTPO": "Pianificato dalle {{projects}}+ organizzazioni partecipanti", + "plantedGlobally": "Alberi, che sono riportati a noi da 2006", + "forestLoss": "Perdita netta di foreste negli ultimi 12 mesi", + "estimateOf": "Stima della perdita annuale dell'albero di", + "globallySince": "Numero di alberi dichiarati alla Billion Tree Campaign (poi Trillion Tree Campaign) dalla sua fondazione da parte dell'UNEP nel 2006", + "restoreTrees": "Come possiamo ripristinare un trilione di alberi?", + "watchVideo": "Guarda il video", + "selectProjects": "Come selezioniamo i progetti", + "learnMore": "Per saperne di più", + "treesDonatedDescription": "Tutte le donazioni di alberi elaborate da Plant-for-the-Planet dal 2019. Include alberi donati direttamente attraverso le nostre app, nonché grandi donazioni private e aziendali. Queste donazioni non sono andate tutte a progetti gestiti direttamente da Plant-for-the-Planet, ma tutte le organizzazioni di restauro partecipanti. Alcuni alberi donati potrebbero non essere ancora stati piantati.", + "treesPlantedDescription": "Tutti gli alberi donati attraverso Plant-for-the-Planet e altri alberi segnalati come piantati dalle organizzazioni di restauro partecipanti" + } } \ No newline at end of file diff --git a/public/static/locales/it/planetcash.json b/public/static/locales/it/planetcash.json index 6f31cf5a2e..d716109ddb 100644 --- a/public/static/locales/it/planetcash.json +++ b/public/static/locales/it/planetcash.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "Planetcash": {} +} \ No newline at end of file diff --git a/public/static/locales/it/redeem.json b/public/static/locales/it/redeem.json index cf95c4bde4..06b0e8c041 100644 --- a/public/static/locales/it/redeem.json +++ b/public/static/locales/it/redeem.json @@ -1,9 +1,11 @@ { - "congratulations": "Congratulazioni!", - "addToMyTrees": "Aggiungi ai miei alberi", - "validateCode": "Convalidare il codice", - "enterRedeemCode": "Si prega di inserire un codice per riscattare", - "validating": "Convalida", - "invalidType": "Tipo non valido, si prega di controllare di nuovo il link", - "redeemDescription": "Riscatta il tuo buono per l'albero e altri codici." + "Redeem": { + "congratulations": "Congratulazioni!", + "addToMyTrees": "Aggiungi ai miei alberi", + "validateCode": "Convalidare il codice", + "enterRedeemCode": "Si prega di inserire un codice per riscattare", + "validating": "Convalida", + "invalidType": "Tipo non valido, si prega di controllare di nuovo il link", + "redeemDescription": "Riscatta il tuo buono per l'albero e altri codici." + } } \ No newline at end of file diff --git a/public/static/locales/it/registerTrees.json b/public/static/locales/it/registerTrees.json index 048baa8a93..97b757d7de 100644 --- a/public/static/locales/it/registerTrees.json +++ b/public/static/locales/it/registerTrees.json @@ -1,11 +1,13 @@ { - "selectLocationMap": "Seleziona la posizione sulla mappa", - "requiredNumberOfTrees": "Numero di alberi è richiesto", - "numberOfTrees": "Numero di alberi", - "datePlanted": "Data prevista", - "treeSpecies": "Specie arboree", - "speciesRequired": "La specie è richiesta", - "drawPolygonMap": "Disegnare un poligono sulla mappa", - "clickMapMark": "Clicca sulla mappa per contrassegnare una posizione", - "next": "Avanti" + "RegisterTrees": { + "selectLocationMap": "Seleziona la posizione sulla mappa", + "requiredNumberOfTrees": "Numero di alberi è richiesto", + "numberOfTrees": "Numero di alberi", + "datePlanted": "Data prevista", + "treeSpecies": "Specie arboree", + "speciesRequired": "La specie è richiesta", + "drawPolygonMap": "Disegnare un poligono sulla mappa", + "clickMapMark": "Clicca sulla mappa per contrassegnare una posizione", + "next": "Avanti" + } } \ No newline at end of file diff --git a/public/static/locales/it/tenants.json b/public/static/locales/it/tenants.json index 7859ea2e8b..4e23853966 100644 --- a/public/static/locales/it/tenants.json +++ b/public/static/locales/it/tenants.json @@ -1,47 +1,49 @@ { - "nitrosb": { - "title": "Piantare alberi con Nitro Snowboards", - "description": "Nitro Snowboards ha fissato un obiettivo per sostenere e mobilitare la conservazione, il restauro e la crescita di una foresta." - }, - "energizer": { - "title": "Energizer ❤️ Baeume", - "description": "Il \"Richtige tun\" è per noi il principale punto di riferimento, che ci permette di migliorare il nostro lavoro. Dalla prima batteria priva di sostanze nocive nell'anno 1989, siamo convinti che le nostre batterie debbano essere sempre più potenti, più longeve e quindi più sicure. La nostra collaborazione con Plant-for-the-Planet si inserisce in questa tradizione, per rendere l'ambiente più sano e per una maggiore sostenibilità. Insieme, pflanziamo i fiori e organizziamo programmi di formazione per bambini e ragazzi, per dare un impulso alla Gerechtigkeit globale e al Klimakrise. Einbinden wollen wir dabei auch unsere Konsumenten und den Handel, denn nur gemeinsam kann diese zentrale Herausforderung unser Zeit gelöst werden. Bist du dabei?" - }, - "senatDerWirtschaft": { - "title": "Senato dell'economia", - "description": "Il Klimakrise è una delle più grandi esigenze gesellschaftlichen ed es muss sich etwas ändern. Der Senat der Wirtschaft ist eine Wertegemeinschaft. Noi ci impegniamo per una visione motivante e concorde, con un'applicazione pratica. Per questo motivo, i nostri collaboratori sono sempre più numerosi, insieme ai loro collaboratori, collaboratori e clienti. Jeder gepflanzte Baum bindet CO2 und schenkt uns Menschen wertvolle Zeit. Questo tempo ci permette di ridurre le nostre emissioni di CO2 in modo massiccio. Versprochen!" - }, - "pampers": { - "title": "Pampers ❤️ Wald", - "descriptionTitle": "Bäume pflanzen für eine nachhaltigere Zukunft", - "description": "Insieme a voi vogliamo aiutare i nostri figli a raggiungere un futuro migliore. Per questo motivo lavoriamo con l'organizzazione per bambini e ragazzi Plant-for-the-Planet in un progetto molto importante: il Pampers Wald. Per l'imballaggio di Pampers Windeln spendiamo 0,01 EUR/CHF e complessivamente fino a 100.000 EUR per Plant-for-the-Planet. Unser Ziel: 60.000 Bäume für eine nachhaltige Wiederaufforstung zu pflanzen. Auf der Karte seht ihr, wo das Projekt realisiert wird. Jetzt anschauen und mithelfen." - }, - "interactClub": { - "title": "Interact Club Wald", - "description": "Bäume pflanzen è un progetto legato alla generazione e all'ambiente, che offre agli uomini e in particolare agli uomini più giovani la possibilità di avere un'idea e anche di cambiare. Mut brauchen wir, um gemeinsam in dieser Klimakrise Lösungen beherzt anzupacken. Il nostro scopo è che come bambini, ragazzi e giovani adulti il mondo possa mobilitare 1.000.000 di miliardi di piante da pascere, in modo che queste piante possano avere un tempo più lungo, circa 15 anni, per ridurre le nostre emissioni di CO2. Wiederaufforstung, global skaliert, kann so zum größten Konjunkturprogramm besonders für Länder des Globalen Südens werden. Die Flächen, auf denen wir die 1.000 Milliarden zusätzlichen Bäume pflanzen können, liegen zur Hälfte in Afrika, der Rest in Lateinamerika und Südostasien, und damit in Ländern, die von der Klimakrise am stärksten betroffen sind. Questi paesi offrono opportunità di lavoro, sono utili per l'agricoltura e legano il gas di scarico CO2. La nuova area di interesse della famiglia Rotarischen si chiama: Umwelt. Noi abbiamo già parlato del nostro contributo. Pflanz gemeinsam mit uns Bäume." - }, - "culchacandela": { - "title": "Culcha Candela X Pianta-per-il-Pianeta", - "description": "

Wir pflanzen Bäume für ein besseres Weltklima, um uns so wichtige Zeit im Wettlauf gegen die Klimakrise zu verschaffen. Pflanz' hier mit!
...und beim Hören des neuen \"Hamma (INVCTS &Dorfkind J-P Remix)\" auf sämtlichen Musik Streaming-Plattformen.
Wir spenden die kompletten Streaming Einnahmen des Songs an Plant-for-the-Planet! Powered by music-for-nature!

" - }, - "lacoqueta": { - "title": "Piantare alberi con La Coqueta", - "description": "Vedere i propri figli crescere e diventare sempre più interessati alla crisi climatica ha ispirato Celia a usare il suo marchio come piattaforma per un cambiamento positivo. Dopo aver appreso che gli alberi sono il mezzo più economico ed efficace per legare la CO2, consentendo più tempo per ridurre a zero le emissioni di gas serra e mitigare la crisi climatica, hanno deciso di intraprendere questo emozionante viaggio con Plant-for-the-Planet. Anche tu puoi diventare parte di questo viaggio e donare alcuni alberi - a Granada, la città natale di Celia, o in altre zone del mondo." - }, - "xiting": { - "title": "Piantare alberi - Per un futuro verde", - "description": "Con questa piattaforma, noi di Xiting vorremmo dare ai nostri partner, clienti e sostenitori la possibilità di piantare alberi in modo rapido e semplice e quindi unirsi al nostro impegno per la protezione del clima. Siamo convinti che la protezione del clima ha senso solo se è sostenuta da un vasto pubblico e lavoriamo insieme per un futuro sostenibile e verde Gli alberi sono il mezzo ideale e più naturale per questo, filtrando CO2 dall'aria. Pianta con noi ora! Dal 2019, Xiting ha perseguito con successo l'obiettivo di operare come un'azienda 100% CO2-neutrale. Potete trovare una panoramica del nostro impegno e delle partnership esistenti per il clima qui ." - }, - "ulmpflanzt": { - "title": "Ulm pflanzt Bäume", - "description": "124.781 Bäume - für jede/n Ulmer Bürger/in einen. Das ist das Ziel von \"Ulm pflanzt Bäume\" - der Klima-Initiative von Plant-for-the-Planet , dem unw (Ulmer Initiativkreis nachhaltige Wirtschaftsentwicklung e. V.), den Ulmer Unternehmen pervormance international, Trivis und der Volksbank Ulm sowie der Stadt Ulm und der lokalen agenda ulm 21. Pflanzen auch Sie mit und helfen Sie, das größte Aufforstungsprojekt der Menschheitsgeschichte zu realisieren. Per te - e per tutti noi!" - }, - "sitex": { - "title": "Sitex ❤️ Wald", - "description": "La Klimarettung è un'azione globale e non può essere considerata solo se tutti noi, insieme, lo facciamo. Vogliamo che i nostri figli e i nostri parenti abbiano un pianeta pulito e pulito. Darum unterstützen wir Plant-for-the-Planet und die Methode des Bäume-Pflanzens, um möglichst viel CO² aus der Atmosphäre zu binden. Unser Beitrag in der Sitex-Gruppe: attraverso la continua coltivazione di piante spendiamo almeno 500.000 Bäume fino al 2027." - }, - "3pleset": { - "title": "Alife & Kickin ❤️ Bäume", - "description": "

#WEAREALIFE Schreibfehler? No, Absicht!
Ganz nach dem Motto CHOOSE LIFE seid ihr jetzt dran.
Denn ab sofort könnt ihr mit Alife & Kickin und der Organisation Plant-for-the-Planet Bäume pflanzen und Leben schenken. Erschafft mit uns den Alife & Kickin Wald. Come?
Pro Onlinebestellung pflanzen wir in den nächsten 2 Monaten einen Baum mit Plant-for-the-Planet. Unser Ziel: 50.000 Bäume für eine nachhaltige Wiederaufforstung. Dove?
Auf der Karte seht ihr, wo unser Alife & Kickin Wald realisiert wird. Jetzt anschauen, mithelfen und noch mehr Leben schenken. SCEGLIERE LA VITA.
UN ORDINE UN ALBERO
#WEAREALIFE

" + "Tenants": { + "nitrosb": { + "title": "Piantare alberi con Nitro Snowboards", + "description": "Nitro Snowboards ha fissato un obiettivo per sostenere e mobilitare la conservazione, il restauro e la crescita di una foresta." + }, + "energizer": { + "title": "Energizer ❤️ Baeume", + "description": "Il \"Richtige tun\" è per noi il principale punto di riferimento, che ci permette di migliorare il nostro lavoro. Dalla prima batteria priva di sostanze nocive nell'anno 1989, siamo convinti che le nostre batterie debbano essere sempre più potenti, più longeve e quindi più sicure. La nostra collaborazione con Plant-for-the-Planet si inserisce in questa tradizione, per rendere l'ambiente più sano e per una maggiore sostenibilità. Insieme, pflanziamo i fiori e organizziamo programmi di formazione per bambini e ragazzi, per dare un impulso alla Gerechtigkeit globale e al Klimakrise. Einbinden wollen wir dabei auch unsere Konsumenten und den Handel, denn nur gemeinsam kann diese zentrale Herausforderung unser Zeit gelöst werden. Bist du dabei?" + }, + "senatDerWirtschaft": { + "title": "Senato dell'economia", + "description": "Il Klimakrise è una delle più grandi esigenze gesellschaftlichen ed es muss sich etwas ändern. Der Senat der Wirtschaft ist eine Wertegemeinschaft. Noi ci impegniamo per una visione motivante e concorde, con un'applicazione pratica. Per questo motivo, i nostri collaboratori sono sempre più numerosi, insieme ai loro collaboratori, collaboratori e clienti. Jeder gepflanzte Baum bindet CO2 und schenkt uns Menschen wertvolle Zeit. Questo tempo ci permette di ridurre le nostre emissioni di CO2 in modo massiccio. Versprochen!" + }, + "pampers": { + "title": "Pampers ❤️ Wald", + "descriptionTitle": "Bäume pflanzen für eine nachhaltigere Zukunft", + "description": "Insieme a voi vogliamo aiutare i nostri figli a raggiungere un futuro migliore. Per questo motivo lavoriamo con l'organizzazione per bambini e ragazzi Plant-for-the-Planet in un progetto molto importante: il Pampers Wald. Per l'imballaggio di Pampers Windeln spendiamo 0,01 EUR/CHF e complessivamente fino a 100.000 EUR per Plant-for-the-Planet. Unser Ziel: 60.000 Bäume für eine nachhaltige Wiederaufforstung zu pflanzen. Auf der Karte seht ihr, wo das Projekt realisiert wird. Jetzt anschauen und mithelfen." + }, + "interactClub": { + "title": "Interact Club Wald", + "description": "Bäume pflanzen è un progetto legato alla generazione e all'ambiente, che offre agli uomini e in particolare agli uomini più giovani la possibilità di avere un'idea e anche di cambiare. Mut brauchen wir, um gemeinsam in dieser Klimakrise Lösungen beherzt anzupacken. Il nostro scopo è che come bambini, ragazzi e giovani adulti il mondo possa mobilitare 1.000.000 di miliardi di piante da pascere, in modo che queste piante possano avere un tempo più lungo, circa 15 anni, per ridurre le nostre emissioni di CO2. Wiederaufforstung, global skaliert, kann so zum größten Konjunkturprogramm besonders für Länder des Globalen Südens werden. Die Flächen, auf denen wir die 1.000 Milliarden zusätzlichen Bäume pflanzen können, liegen zur Hälfte in Afrika, der Rest in Lateinamerika und Südostasien, und damit in Ländern, die von der Klimakrise am stärksten betroffen sind. Questi paesi offrono opportunità di lavoro, sono utili per l'agricoltura e legano il gas di scarico CO2. La nuova area di interesse della famiglia Rotarischen si chiama: Umwelt. Noi abbiamo già parlato del nostro contributo. Pflanz gemeinsam mit uns Bäume." + }, + "culchacandela": { + "title": "Culcha Candela X Pianta-per-il-Pianeta", + "description": "

Wir pflanzen Bäume für ein besseres Weltklima, um uns so wichtige Zeit im Wettlauf gegen die Klimakrise zu verschaffen. Pflanz' hier mit!
...und beim Hören des neuen \"Hamma (INVCTS &Dorfkind J-P Remix)\" auf sämtlichen Musik Streaming-Plattformen.
Wir spenden die kompletten Streaming Einnahmen des Songs an Plant-for-the-Planet! Powered by music-for-nature!

" + }, + "lacoqueta": { + "title": "Piantare alberi con La Coqueta", + "description": "Vedere i propri figli crescere e diventare sempre più interessati alla crisi climatica ha ispirato Celia a usare il suo marchio come piattaforma per un cambiamento positivo. Dopo aver appreso che gli alberi sono il mezzo più economico ed efficace per legare la CO2, consentendo più tempo per ridurre a zero le emissioni di gas serra e mitigare la crisi climatica, hanno deciso di intraprendere questo emozionante viaggio con Plant-for-the-Planet. Anche tu puoi diventare parte di questo viaggio e donare alcuni alberi - a Granada, la città natale di Celia, o in altre zone del mondo." + }, + "xiting": { + "title": "Piantare alberi - Per un futuro verde", + "description": "Con questa piattaforma, noi di Xiting vorremmo dare ai nostri partner, clienti e sostenitori la possibilità di piantare alberi in modo rapido e semplice e quindi unirsi al nostro impegno per la protezione del clima. Siamo convinti che la protezione del clima ha senso solo se è sostenuta da un vasto pubblico e lavoriamo insieme per un futuro sostenibile e verde Gli alberi sono il mezzo ideale e più naturale per questo, filtrando CO2 dall'aria. Pianta con noi ora! Dal 2019, Xiting ha perseguito con successo l'obiettivo di operare come un'azienda 100% CO2-neutrale. Potete trovare una panoramica del nostro impegno e delle partnership esistenti per il clima qui ." + }, + "ulmpflanzt": { + "title": "Ulm pflanzt Bäume", + "description": "124.781 Bäume - für jede/n Ulmer Bürger/in einen. Das ist das Ziel von \"Ulm pflanzt Bäume\" - der Klima-Initiative von Plant-for-the-Planet , dem unw (Ulmer Initiativkreis nachhaltige Wirtschaftsentwicklung e. V.), den Ulmer Unternehmen pervormance international, Trivis und der Volksbank Ulm sowie der Stadt Ulm und der lokalen agenda ulm 21. Pflanzen auch Sie mit und helfen Sie, das größte Aufforstungsprojekt der Menschheitsgeschichte zu realisieren. Per te - e per tutti noi!" + }, + "sitex": { + "title": "Sitex ❤️ Wald", + "description": "La Klimarettung è un'azione globale e non può essere considerata solo se tutti noi, insieme, lo facciamo. Vogliamo che i nostri figli e i nostri parenti abbiano un pianeta pulito e pulito. Darum unterstützen wir Plant-for-the-Planet und die Methode des Bäume-Pflanzens, um möglichst viel CO² aus der Atmosphäre zu binden. Unser Beitrag in der Sitex-Gruppe: attraverso la continua coltivazione di piante spendiamo almeno 500.000 Bäume fino al 2027." + }, + "3pleset": { + "title": "Alife & Kickin ❤️ Bäume", + "description": "

#WEAREALIFE Schreibfehler? No, Absicht!
Ganz nach dem Motto CHOOSE LIFE seid ihr jetzt dran.
Denn ab sofort könnt ihr mit Alife & Kickin und der Organisation Plant-for-the-Planet Bäume pflanzen und Leben schenken. Erschafft mit uns den Alife & Kickin Wald. Come?
Pro Onlinebestellung pflanzen wir in den nächsten 2 Monaten einen Baum mit Plant-for-the-Planet. Unser Ziel: 50.000 Bäume für eine nachhaltige Wiederaufforstung. Dove?
Auf der Karte seht ihr, wo unser Alife & Kickin Wald realisiert wird. Jetzt anschauen, mithelfen und noch mehr Leben schenken. SCEGLIERE LA VITA.
UN ORDINE UN ALBERO
#WEAREALIFE

" + } } } \ No newline at end of file diff --git a/public/static/locales/it/treemapper.json b/public/static/locales/it/treemapper.json index 6f31cf5a2e..0d138993cc 100644 --- a/public/static/locales/it/treemapper.json +++ b/public/static/locales/it/treemapper.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "Treemapper": {} +} \ No newline at end of file diff --git a/public/static/locales/it/treemapperAnalytics.json b/public/static/locales/it/treemapperAnalytics.json index 6f31cf5a2e..7e8da06585 100644 --- a/public/static/locales/it/treemapperAnalytics.json +++ b/public/static/locales/it/treemapperAnalytics.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "TreemapperAnalytics": {} +} \ No newline at end of file diff --git a/public/static/locales/pt-BR/bulkCodes.json b/public/static/locales/pt-BR/bulkCodes.json index 6f31cf5a2e..605168db0e 100644 --- a/public/static/locales/pt-BR/bulkCodes.json +++ b/public/static/locales/pt-BR/bulkCodes.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "BulkCodes": {} +} \ No newline at end of file diff --git a/public/static/locales/pt-BR/common.json b/public/static/locales/pt-BR/common.json index 463a6b0c68..2dd9b5dd1f 100644 --- a/public/static/locales/pt-BR/common.json +++ b/public/static/locales/pt-BR/common.json @@ -1,95 +1,97 @@ { - "tree_one": "Árvore", - "tree_other": "Árvores", - "by": "Por {{tpoName}}", - "to_project_by_tpo": "Para {{projectName}} por {{tpoName}}", - "for": "para", - "trees": "Árvores", - "planted": "plantadas", - "privacy": "Privacidade", - "terms": "Termos", - "imprint": "Impresso", - "status": "Status", - "contact": "Contato", - "supportUs": "Apoie-nos", - "leaders": "Líderes", - "leaderboard": "Ranking", - "me": "Eu", - "signIn": "Inscreva-se", - "home": "Início", - "donate_gift": "Doar/Presente", - "plant": "Plantar", - "donate": "Doar", - "gift": "Presente", - "continue": "Continuar", - "selectLanguage": "Selecione um Idioma", - "selectCountry": "Selecione o país", - "ok": "OK", - "cancel": "Cancelar", - "delete": "Excluir", - "deleteAccount": "Excluir conta", - "thankYou": "Obrigado", - "privacyPolicyNotice": "Ao utilizar este site, você concorda com a Plant-for-the-Planet", - "privacyPolicy": "política de privacidade e cookies", - "about_pftp": "Sobre Plant-for-the-Planet", - "january": "Janeiro", - "february": "Fevereiro", - "march": "Março", - "april": "Abril", - "may": "Maio", - "june": "Junho", - "july": "Julho", - "august": "Agosto", - "september": "Setembro", - "october": "Outubro", - "november": "Novembro", - "december": "Dezembro", - "approx": "Aprox.", - "view": "Ver", - "verifyEmailHeader": "Por favor, confirme o seu e-mail.", - "verifyEmailText": "Para proteger a sua conta, precisamos de verificar o seu e-mail. Por favor verifique a sua caixa de entrada ou pasta de spam/junk para um e-mail de confirmação e depois continue a fazer login.", - "verifyEmailInfo": "Se você não recebeu um e-mail, por favor tente entrar novamente e nós lhe enviaremos outro e-mail.", - "continueToLogin": "Continuar para Iniciar Sessão", - "supportsUNEP": "Apoia o PNUMA", - "plantedBy": "Plantado por", - "redeemPopup": "Recebeu um presente de árvore? Por favor, faça o login para resgatar as suas árvores.", - "login": "Login/Signup", - "shop": "Loja", - "downloads": "Downloads", - "team": "Equipe", - "jobs": "Empregos", - "blogs": "Blogs", - "faqs": "FAQs", - "annualReports": "Relatórios anuais", - "skipIntroVideo": "Pular Introdução", - "mapInfo": "Créditos do Mapa", - "aboutUs": "Sobre nós", - "alternativelyEditProfile": "Alternativamente, você pode marcar seu perfil como privado, visitando Editar Perfil.", - "deleteAccountConsent": "Ao clicar em excluir, estou solicitando que Plant-for-the-Planet exclua todos os dados associados à minha conta. Os dados das doações podem ser mantidos por até oito anos. As árvores que eu tenha registrado não serão removidas, no entanto, serão anônimas e não poderão ser reclamadas novamente.", - "deleteIrreversible": "Eu também entendo que a exclusão de conta do {{email}} é irreversível.", - "goBack": "Voltar", - "deleteAccountMessage": "Para continuar com a exclusão, por favor digite `{{delete}}`", - "deleteAccountLabel": "Tipo: {{delete}}", - "edit": "Editar", - "howDoesThisWork": "Como que funciona?", - "copiedToClipboard": "Copiado para o clipboard!", - "close": "Fechar", - "logout": "Sair", - "featured": "Em destaque", - "treeMapper": "TreeMapper", - "overview": "Visão geral", - "childrenAndYouth": "Crianças e Jovens", - "trillionTrees": "Trilhão de Árvores", - "yucatan": "Restauração de Yucatán", - "partners": "Parceiros", - "changeChocolate": "O Chocolate da Mudança", - "stopTalkingStartPlanting": "Pare de falar. Comece a plantar.", - "underMaintenance": "Em Manutenção", - "forbidden": "Não está autorizado a ver esta página!", - "validationFailed": "Validação falhou!", - "add": "Adicionar", - "notFound": "A página solicitada não foi encontrada.", - "unauthorized": "Alguma coisa correu mal. Por favor, tente sair e volte a entrar novamente.", - "internalServerError": "Erro do Servidor Interno - Por favor tente novamente mais tarde!", - "reviewInfo": " O projeto foi inspecionado em uma revisão de campo de vários dias em <2>mês e atende aos nossos <5>padrões." + "Common": { + "tree_one": "Árvore", + "tree_other": "Árvores", + "by": "Por {{tpoName}}", + "to_project_by_tpo": "Para {{projectName}} por {{tpoName}}", + "for": "para", + "trees": "Árvores", + "planted": "plantadas", + "privacy": "Privacidade", + "terms": "Termos", + "imprint": "Impresso", + "status": "Status", + "contact": "Contato", + "supportUs": "Apoie-nos", + "leaders": "Líderes", + "leaderboard": "Ranking", + "me": "Eu", + "signIn": "Inscreva-se", + "home": "Início", + "donate_gift": "Doar/Presente", + "plant": "Plantar", + "donate": "Doar", + "gift": "Presente", + "continue": "Continuar", + "selectLanguage": "Selecione um Idioma", + "selectCountry": "Selecione o país", + "ok": "OK", + "cancel": "Cancelar", + "delete": "Excluir", + "deleteAccount": "Excluir conta", + "thankYou": "Obrigado", + "privacyPolicyNotice": "Ao utilizar este site, você concorda com a Plant-for-the-Planet", + "privacyPolicy": "política de privacidade e cookies", + "about_pftp": "Sobre Plant-for-the-Planet", + "january": "Janeiro", + "february": "Fevereiro", + "march": "Março", + "april": "Abril", + "may": "Maio", + "june": "Junho", + "july": "Julho", + "august": "Agosto", + "september": "Setembro", + "october": "Outubro", + "november": "Novembro", + "december": "Dezembro", + "approx": "Aprox.", + "view": "Ver", + "verifyEmailHeader": "Por favor, confirme o seu e-mail.", + "verifyEmailText": "Para proteger a sua conta, precisamos de verificar o seu e-mail. Por favor verifique a sua caixa de entrada ou pasta de spam/junk para um e-mail de confirmação e depois continue a fazer login.", + "verifyEmailInfo": "Se você não recebeu um e-mail, por favor tente entrar novamente e nós lhe enviaremos outro e-mail.", + "continueToLogin": "Continuar para Iniciar Sessão", + "supportsUNEP": "Apoia o PNUMA", + "plantedBy": "Plantado por", + "redeemPopup": "Recebeu um presente de árvore? Por favor, faça o login para resgatar as suas árvores.", + "login": "Login/Signup", + "shop": "Loja", + "downloads": "Downloads", + "team": "Equipe", + "jobs": "Empregos", + "blogs": "Blogs", + "faqs": "FAQs", + "annualReports": "Relatórios anuais", + "skipIntroVideo": "Pular Introdução", + "mapInfo": "Créditos do Mapa", + "aboutUs": "Sobre nós", + "alternativelyEditProfile": "Alternativamente, você pode marcar seu perfil como privado, visitando Editar Perfil.", + "deleteAccountConsent": "Ao clicar em excluir, estou solicitando que Plant-for-the-Planet exclua todos os dados associados à minha conta. Os dados das doações podem ser mantidos por até oito anos. As árvores que eu tenha registrado não serão removidas, no entanto, serão anônimas e não poderão ser reclamadas novamente.", + "deleteIrreversible": "Eu também entendo que a exclusão de conta do {{email}} é irreversível.", + "goBack": "Voltar", + "deleteAccountMessage": "Para continuar com a exclusão, por favor digite `{{delete}}`", + "deleteAccountLabel": "Tipo: {{delete}}", + "edit": "Editar", + "howDoesThisWork": "Como que funciona?", + "copiedToClipboard": "Copiado para o clipboard!", + "close": "Fechar", + "logout": "Sair", + "featured": "Em destaque", + "treeMapper": "TreeMapper", + "overview": "Visão geral", + "childrenAndYouth": "Crianças e Jovens", + "trillionTrees": "Trilhão de Árvores", + "yucatan": "Restauração de Yucatán", + "partners": "Parceiros", + "changeChocolate": "O Chocolate da Mudança", + "stopTalkingStartPlanting": "Pare de falar. Comece a plantar.", + "underMaintenance": "Em Manutenção", + "forbidden": "Não está autorizado a ver esta página!", + "validationFailed": "Validação falhou!", + "add": "Adicionar", + "notFound": "A página solicitada não foi encontrada.", + "unauthorized": "Alguma coisa correu mal. Por favor, tente sair e volte a entrar novamente.", + "internalServerError": "Erro do Servidor Interno - Por favor tente novamente mais tarde!", + "reviewInfo": " O projeto foi inspecionado em uma revisão de campo de vários dias em <2>mês e atende aos nossos <5>padrões." + } } \ No newline at end of file diff --git a/public/static/locales/pt-BR/country.json b/public/static/locales/pt-BR/country.json index 16c1624541..a7cdedd182 100644 --- a/public/static/locales/pt-BR/country.json +++ b/public/static/locales/pt-BR/country.json @@ -1,261 +1,263 @@ { - "ac": "Ilha de Ascensão", - "af": "Afeganistão", - "ax": "Ilhas Åland", - "al": "Albânia", - "dz": "Argélia", - "as": "Samoa Americana", - "ad": "Andorra", - "ao": "Angola", - "ai": "Anguila", - "aq": "Antártida", - "ag": "Antígua e Barbuda", - "ar": "Argentina", - "am": "Armênia", - "aw": "Aruba", - "au": "Austrália", - "at": "Áustria", - "az": "Azerbaijão", - "bs": "Bahamas", - "bh": "Bahrein", - "bd": "Bangladesh", - "bb": "Barbados", - "by": "Bielorrússia", - "be": "Bélgica", - "bz": "Belize", - "bj": "Benim", - "bm": "Bermudas", - "bt": "Butão", - "bo": "Bolívia", - "bq": "Bonaire, Sint Eustatius e Saba", - "ba": "Bósnia e Herzegovina", - "bw": "Botsuana", - "bv": "Ilha Bouvet", - "br": "Brasil", - "io": "Território Britânico do Oceano Índico", - "bn": "Brunei Darussalam", - "bg": "Bulgária", - "bf": "Burkina Faso", - "bi": "Burundi", - "cv": "Cabo Verde", - "kh": "Camboja", - "cm": "Camarões", - "ca": "Canadá", - "ic": "Ilhas Canárias", - "ky": "Ilhas Caimão", - "cf": "República Centro-Africana", - "ea": "Ceuta e Melilla", - "td": "Chade", - "cl": "Chile", - "cn": "China", - "cx": "Ilha de Natal", - "cc": "Ilhas Cocos (Keeling)", - "co": "Colômbia", - "km": "Comores", - "cg": "Congo", - "cd": "República Democrática do Congo", - "ck": "Ilhas Cook", - "cr": "Costa Rica", - "ci": "Costa do Marfim", - "hr": "Croácia", - "cu": "Cuba", - "cw": "Curaçau", - "cy": "Chipre", - "cz": "República TCheca", - "dk": "Dinamarca", - "dg": "Diego Garcia", - "dj": "Djibuti", - "dm": "Dominica", - "do": "República Dominicana", - "tp": "Timor Leste", - "ec": "Equador", - "eg": "Egito", - "sv": "El Salvador", - "gq": "Guiné Equatorial", - "er": "Eritreia", - "ee": "Estônia", - "sz": "Eswatini", - "et": "Etiópia", - "ez": "Zona Euro", - "fk": "Ilhas Malvinas (Malvinas)", - "fo": "Ilhas Faroe", - "fj": "Fiji", - "fi": "Finlândia", - "fr": "França", - "gf": "Guiana Francesa", - "pf": "Polinésia Francesa", - "tf": "Territórios Franceses do Sul", - "ga": "Gabão", - "gm": "Gâmbia", - "ge": "Geórgia", - "de": "Alemanha", - "gh": "Gana", - "gi": "Gibraltar", - "gr": "Grécia", - "gl": "Groenlândia", - "gd": "Grenada", - "gp": "Guadalupe", - "gu": "Guam", - "gt": "Guatemala", - "gg": "Guernsey", - "gn": "Guiné", - "gw": "Guiné-Bissau", - "gy": "Guiana", - "ht": "Haiti", - "hm": "Ilha Heard e Ilhas McDonald", - "va": "Santa Sé", - "hn": "Honduras", - "hk": "Hong Kong", - "hu": "Hungria", - "is": "Islândia", - "in": "Índia", - "id": "Indonésia", - "ir": "Irã", - "iq": "Iraque", - "ie": "Irlanda", - "im": "Ilha de Man", - "il": "Israel", - "it": "Itália", - "jm": "Jamaica", - "jp": "Japão", - "je": "Jersey", - "jo": "Jordânia", - "kz": "Cazaquistão", - "ke": "Quênia", - "ki": "Kiribati", - "xk": "Kosovo", - "kp": "Coreia (República Popular Democrática da)", - "kr": "Coreia, República da", - "kw": "Kuwait", - "kg": "Quirguizistão", - "la": "República Democrática Popular do Laos", - "lv": "Letônia", - "lb": "Líbano", - "ls": "Lesotho", - "lr": "Libéria", - "ly": "Líbia", - "li": "Liechtenstein", - "lt": "Lituânia", - "lu": "Luxemburgo", - "mo": "Macau", - "mg": "Madagascar", - "mw": "Malawi", - "my": "Malásia", - "mv": "Maldivas", - "ml": "Mali", - "mt": "Malta", - "mh": "Ilhas Marshall", - "mq": "Martinica", - "mr": "Mauritânia", - "mu": "Maurício", - "yt": "Mayotte", - "mx": "México", - "fm": "Micronésia (Estados Federados da)", - "md": "Moldávia, República da", - "mc": "Mônaco", - "mn": "Mongólia", - "me": "Montenegro", - "ms": "Montserrat", - "ma": "Marrocos", - "mz": "Moçambique", - "mm": "Myanmar", - "na": "Namíbia", - "nr": "Nauru", - "np": "Nepal", - "nl": "Países Baixos", - "an": "Antilhas Holandesas", - "nc": "Nova Caledónia", - "nz": "Nova Zelândia", - "ni": "Nicarágua", - "ne": "Níger", - "ng": "Nigéria", - "nu": "Niue", - "nf": "Ilha Norfolk", - "mk": "Macedônia do Norte", - "mp": "Ilhas Marianas do Norte", - "no": "Noruega", - "om": "Omã", - "pk": "Paquistão", - "pw": "Palau", - "ps": "Palestina", - "pa": "Panamá", - "pg": "Papua-Nova Guiné", - "py": "Paraguai", - "pe": "Peru", - "ph": "Filipinas", - "pn": "Pitcairn", - "pl": "Polônia", - "pt": "Portugal", - "pr": "Porto Rico", - "qa": "Qatar", - "re": "Reunião", - "ro": "Romênia", - "ru": "Rússia", - "rw": "Ruanda", - "bl": "São Bartolomeu", - "sh": "Santa Helena, Ascensão e Tristão da Cunha", - "kn": "São Cristóvão e Nevis", - "lc": "Santa Lúcia", - "mf": "São Martinho (parte francesa)", - "pm": "São Pedro e Miquelon", - "vc": "São Vicente e as Granadinas", - "ws": "Samoa", - "sm": "São Marino", - "st": "São Tomé e Príncipe", - "sa": "Arábia Saudita", - "sn": "Senegal", - "rs": "Sérvia", - "sc": "Seychelles", - "sl": "Serra Leoa", - "sg": "Singapura", - "sx": "São Martinho (parte holandesa)", - "sk": "Eslováquia", - "si": "Eslovênia", - "sb": "Ilhas Salomão", - "so": "Somália", - "za": "África do Sul", - "gs": "Geórgia do Sul e as Ilhas Sandwich do Sul", - "ss": "Sul do Sudão", - "es": "Espanha", - "lk": "Sri Lanka", - "sd": "Sudão", - "sr": "Suriname", - "sj": "Svalbard e Jan Mayen", - "se": "Suécia", - "ch": "Suíça", - "sy": "República Árabe da Síria", - "tw": "Taiwan", - "tj": "Tajiquistão", - "tz": "Tanzânia", - "th": "Tailândia", - "tl": "Timor-Leste", - "tg": "Togo", - "tk": "Tokelau", - "to": "Tonga", - "tt": "Trinidad e Tobago", - "ta": "Tristão da Cunha", - "tn": "Tunísia", - "tr": "Turquia", - "tm": "Turcomenistão", - "tc": "Ilhas Turcas e Caicos", - "tv": "Tuvalu", - "ug": "Uganda", - "ua": "Ucrânia", - "ae": "Emirados Árabes Unidos", - "gb": "Reino Unido da Grã-Bretanha e Irlanda do Norte", - "un": "Nações Unidas", - "us": "Estados Unidos da América", - "um": "Ilhas Menores Distantes dos Estados Unidos", - "uy": "Uruguai", - "uz": "Uzbequistão", - "vu": "Vanuatu", - "ve": "Venezuela", - "vn": "Vietnã", - "vg": "Ilhas Virgens (Britânicas)", - "vi": "Ilhas Virgens (E.U.A.)", - "wf": "Wallis e Futuna", - "eh": "Saara Ocidental", - "ye": "Iêmen", - "zm": "Zâmbia", - "zw": "Zimbabue" + "Country": { + "ac": "Ilha de Ascensão", + "af": "Afeganistão", + "ax": "Ilhas Åland", + "al": "Albânia", + "dz": "Argélia", + "as": "Samoa Americana", + "ad": "Andorra", + "ao": "Angola", + "ai": "Anguila", + "aq": "Antártida", + "ag": "Antígua e Barbuda", + "ar": "Argentina", + "am": "Armênia", + "aw": "Aruba", + "au": "Austrália", + "at": "Áustria", + "az": "Azerbaijão", + "bs": "Bahamas", + "bh": "Bahrein", + "bd": "Bangladesh", + "bb": "Barbados", + "by": "Bielorrússia", + "be": "Bélgica", + "bz": "Belize", + "bj": "Benim", + "bm": "Bermudas", + "bt": "Butão", + "bo": "Bolívia", + "bq": "Bonaire, Sint Eustatius e Saba", + "ba": "Bósnia e Herzegovina", + "bw": "Botsuana", + "bv": "Ilha Bouvet", + "br": "Brasil", + "io": "Território Britânico do Oceano Índico", + "bn": "Brunei Darussalam", + "bg": "Bulgária", + "bf": "Burkina Faso", + "bi": "Burundi", + "cv": "Cabo Verde", + "kh": "Camboja", + "cm": "Camarões", + "ca": "Canadá", + "ic": "Ilhas Canárias", + "ky": "Ilhas Caimão", + "cf": "República Centro-Africana", + "ea": "Ceuta e Melilla", + "td": "Chade", + "cl": "Chile", + "cn": "China", + "cx": "Ilha de Natal", + "cc": "Ilhas Cocos (Keeling)", + "co": "Colômbia", + "km": "Comores", + "cg": "Congo", + "cd": "República Democrática do Congo", + "ck": "Ilhas Cook", + "cr": "Costa Rica", + "ci": "Costa do Marfim", + "hr": "Croácia", + "cu": "Cuba", + "cw": "Curaçau", + "cy": "Chipre", + "cz": "República TCheca", + "dk": "Dinamarca", + "dg": "Diego Garcia", + "dj": "Djibuti", + "dm": "Dominica", + "do": "República Dominicana", + "tp": "Timor Leste", + "ec": "Equador", + "eg": "Egito", + "sv": "El Salvador", + "gq": "Guiné Equatorial", + "er": "Eritreia", + "ee": "Estônia", + "sz": "Eswatini", + "et": "Etiópia", + "ez": "Zona Euro", + "fk": "Ilhas Malvinas (Malvinas)", + "fo": "Ilhas Faroe", + "fj": "Fiji", + "fi": "Finlândia", + "fr": "França", + "gf": "Guiana Francesa", + "pf": "Polinésia Francesa", + "tf": "Territórios Franceses do Sul", + "ga": "Gabão", + "gm": "Gâmbia", + "ge": "Geórgia", + "de": "Alemanha", + "gh": "Gana", + "gi": "Gibraltar", + "gr": "Grécia", + "gl": "Groenlândia", + "gd": "Grenada", + "gp": "Guadalupe", + "gu": "Guam", + "gt": "Guatemala", + "gg": "Guernsey", + "gn": "Guiné", + "gw": "Guiné-Bissau", + "gy": "Guiana", + "ht": "Haiti", + "hm": "Ilha Heard e Ilhas McDonald", + "va": "Santa Sé", + "hn": "Honduras", + "hk": "Hong Kong", + "hu": "Hungria", + "is": "Islândia", + "in": "Índia", + "id": "Indonésia", + "ir": "Irã", + "iq": "Iraque", + "ie": "Irlanda", + "im": "Ilha de Man", + "il": "Israel", + "it": "Itália", + "jm": "Jamaica", + "jp": "Japão", + "je": "Jersey", + "jo": "Jordânia", + "kz": "Cazaquistão", + "ke": "Quênia", + "ki": "Kiribati", + "xk": "Kosovo", + "kp": "Coreia (República Popular Democrática da)", + "kr": "Coreia, República da", + "kw": "Kuwait", + "kg": "Quirguizistão", + "la": "República Democrática Popular do Laos", + "lv": "Letônia", + "lb": "Líbano", + "ls": "Lesotho", + "lr": "Libéria", + "ly": "Líbia", + "li": "Liechtenstein", + "lt": "Lituânia", + "lu": "Luxemburgo", + "mo": "Macau", + "mg": "Madagascar", + "mw": "Malawi", + "my": "Malásia", + "mv": "Maldivas", + "ml": "Mali", + "mt": "Malta", + "mh": "Ilhas Marshall", + "mq": "Martinica", + "mr": "Mauritânia", + "mu": "Maurício", + "yt": "Mayotte", + "mx": "México", + "fm": "Micronésia (Estados Federados da)", + "md": "Moldávia, República da", + "mc": "Mônaco", + "mn": "Mongólia", + "me": "Montenegro", + "ms": "Montserrat", + "ma": "Marrocos", + "mz": "Moçambique", + "mm": "Myanmar", + "na": "Namíbia", + "nr": "Nauru", + "np": "Nepal", + "nl": "Países Baixos", + "an": "Antilhas Holandesas", + "nc": "Nova Caledónia", + "nz": "Nova Zelândia", + "ni": "Nicarágua", + "ne": "Níger", + "ng": "Nigéria", + "nu": "Niue", + "nf": "Ilha Norfolk", + "mk": "Macedônia do Norte", + "mp": "Ilhas Marianas do Norte", + "no": "Noruega", + "om": "Omã", + "pk": "Paquistão", + "pw": "Palau", + "ps": "Palestina", + "pa": "Panamá", + "pg": "Papua-Nova Guiné", + "py": "Paraguai", + "pe": "Peru", + "ph": "Filipinas", + "pn": "Pitcairn", + "pl": "Polônia", + "pt": "Portugal", + "pr": "Porto Rico", + "qa": "Qatar", + "re": "Reunião", + "ro": "Romênia", + "ru": "Rússia", + "rw": "Ruanda", + "bl": "São Bartolomeu", + "sh": "Santa Helena, Ascensão e Tristão da Cunha", + "kn": "São Cristóvão e Nevis", + "lc": "Santa Lúcia", + "mf": "São Martinho (parte francesa)", + "pm": "São Pedro e Miquelon", + "vc": "São Vicente e as Granadinas", + "ws": "Samoa", + "sm": "São Marino", + "st": "São Tomé e Príncipe", + "sa": "Arábia Saudita", + "sn": "Senegal", + "rs": "Sérvia", + "sc": "Seychelles", + "sl": "Serra Leoa", + "sg": "Singapura", + "sx": "São Martinho (parte holandesa)", + "sk": "Eslováquia", + "si": "Eslovênia", + "sb": "Ilhas Salomão", + "so": "Somália", + "za": "África do Sul", + "gs": "Geórgia do Sul e as Ilhas Sandwich do Sul", + "ss": "Sul do Sudão", + "es": "Espanha", + "lk": "Sri Lanka", + "sd": "Sudão", + "sr": "Suriname", + "sj": "Svalbard e Jan Mayen", + "se": "Suécia", + "ch": "Suíça", + "sy": "República Árabe da Síria", + "tw": "Taiwan", + "tj": "Tajiquistão", + "tz": "Tanzânia", + "th": "Tailândia", + "tl": "Timor-Leste", + "tg": "Togo", + "tk": "Tokelau", + "to": "Tonga", + "tt": "Trinidad e Tobago", + "ta": "Tristão da Cunha", + "tn": "Tunísia", + "tr": "Turquia", + "tm": "Turcomenistão", + "tc": "Ilhas Turcas e Caicos", + "tv": "Tuvalu", + "ug": "Uganda", + "ua": "Ucrânia", + "ae": "Emirados Árabes Unidos", + "gb": "Reino Unido da Grã-Bretanha e Irlanda do Norte", + "un": "Nações Unidas", + "us": "Estados Unidos da América", + "um": "Ilhas Menores Distantes dos Estados Unidos", + "uy": "Uruguai", + "uz": "Uzbequistão", + "vu": "Vanuatu", + "ve": "Venezuela", + "vn": "Vietnã", + "vg": "Ilhas Virgens (Britânicas)", + "vi": "Ilhas Virgens (E.U.A.)", + "wf": "Wallis e Futuna", + "eh": "Saara Ocidental", + "ye": "Iêmen", + "zm": "Zâmbia", + "zw": "Zimbabue" + } } \ No newline at end of file diff --git a/public/static/locales/pt-BR/donate.json b/public/static/locales/pt-BR/donate.json index b659c71c91..6e97108de2 100644 --- a/public/static/locales/pt-BR/donate.json +++ b/public/static/locales/pt-BR/donate.json @@ -1,115 +1,117 @@ { - "fortreeCountTrees": "para {{treeCount}} Árvore", - "fortreeCountTrees_plural": "para {{treeCount}} Árvores", - "yourTreesPlantedByOnLocation": "A sua {{treeCount}} árvore será plantada por {{projectName}} em {{location}}.", - "yourTreesPlantedByOnLocation_plural": "As suas {{treeCount}} árvores serão plantadas por {{projectName}} em {{location}}.", - "myTreesPlantedByOnLocation": "A minha {{treeCount}} árvore está sendo plantada em {{location}}.", - "myTreesPlantedByOnLocation_plural": "Minhas {{treeCount}} árvores estão sendo plantadas em {{location}}.", - "topProjects": "Principais projetos", - "allCountProjects": "Todos {{projectCount}} Projetos", - "searchProjects": "Pesquisar Projetos", - "viewProfile": "Ver Perfil", - "contactDetails": "Detalhes para contato", - "readMore": "Ler mais", - "readLess": "Ler menos", - "treeDonation": "Doação de Árvores", - "myDonationGiftToSomeone": "A minha doação é dedicada a alguém", - "taxDeductionNotYetAvailable": "A dedução fiscal ainda não está disponível para ", - "taxDeductionNotAvailableForProject": "A dedução fiscal ainda não está disponível para este projeto", - "youWillReceiveTaxDeduction": "Você receberá um recibo de dedução de imposto para ", - "toProjectByOrganization": "Para {{projectName}} por {{organizationName}}", - "firstName": "Nome", - "lastName": "Sobrenome", - "email": "Email", - "address": "Endereço", - "city": "Cidade", - "zipCode": "CEP/Código Postal", - "zipCodeAlphaNumValidation": "Código postal inválido", - "country": "País", - "isACompanyDonation": "Esta doação é feita por uma empresa", - "companyName": "Nome da Empresa", - "giftRecipient": "Destinatário do presente", - "directGiftRecipient": "Esta doação apoia", - "recipientName": "Nome do Destinatário", - "recipientNameRequired": "Nome do Destinatário é necessário", - "removeRecipient": "Remover", - "giftMessage": "Mensagem de Presente", - "firstNameRequired": "O campo Nome é obrigatório", - "lastNameRequired": "O campo Sobrenome é obrigatório", - "emailRequired": "O e-mail é obrigatório", - "addressRequired": "O endereço é obrigatório", - "cityRequired": "O nome da cidade é obrigatório", - "countryRequired": "País é um campo obrigatório", - "companyRequired": "Nome da empresa é obrigatório", - "paymentDetails": "Detalhes de Pagamento", - "validationFailed": "Validação Falhou", - "seedingYourDonation": "Semeando a sua doação", - "pleaseDoNotCloseThisTab": "Por favor, não feche esta aba!", - "perTree": "/ árvore", - "stopTalkingStartPlanting": "Pare de falar. Comece a plantar.", - "creditDebitCard": "Cartão de Crédito/Débito", - "cardNumber": "Número do cartão", - "expDate": "Valido até (MM/AAA)", - "selectCurrency": "Selecione a sua moeda", - "treeDonationWithPFP": "Doação de árvores com Plant-for-the-Planet", - "unavailable": "não disponível", - "donationSuccessfulWith": "A sua doação de {{currency}} {{totalAmount}}foi realizada com sucesso com {{paymentTypeUsed}}.", - "donationSuccessful": "A sua doação de {{currency}}{{totalAmount}} deu certo!", - "giftSentMessage": "Enviamos um e-mail para {{recipientName}} sobre o presente.", - "contributionMessage": "Talvez você vai visitá-los um dia destes? Nesse meio tempo, que tal conectar os seus amigos a algumas árvores, depois de contar um pouco sobre as suas?", - "plantTreesAtURL": "Plante árvores em {{url}}", - "copiedToClipboard": "Texto copiado para o Clipboard!", - "noProjectsFound": "Nenhum projeto encontrado", - "inTimeOfTaxReturns": "a tempo das declarações de impostos.", - "titleToShare": "Plantar árvores contra a crise climática!", - "giftToName": "Presente para", - "thisDonationSupports": "Esta doação apoia", - "plantTreesWith": "Plante árvores com", - "textToShare": "Junte-se a {{name}} e a milhares de outras pessoas que estão plantando um trilhão de árvores para enfrentar a crise climática #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "thankyouHeaderText": "Estamos a caminho de um \n

Trilhão de Árvores

", - "shareTextTitle": "Pare de falar. Comece a plantar", - "textToShareLinkedin": "Junte-se a {{name}} e a milhares de outras pessoas que estão plantando um trilhão de árvores para enfrentar a crise climática", - "textToShareForMe": "Junte-se a mim e a milhares de outras pessoas para plantar um trilhão de árvores e assim enfrentar a crise climática", - "donationTokenInvalid": "O token de doação fornecido é inválida.", - "giftTo": "Presente para", - "supporting": "Apoiando", - "selectProject": "Selecione um projeto", - "giftValidation": "Por favor, introduza os detalhes do presente", - "minDonate": "O valor mínimo de doação é", - "noPaymentMethodError": "Não conseguimos processar o seu pagamento, por favor tente novamente.", - "somethingWentWrong": "Algo deu errado, por favor tente novamente em breve!", - "underMaintenance": "App está em manutenção, por favor acesse status.plant-for-the-planet.org para mais detalhes", - "waitingConfirmation": "Estamos atualmente à espera de uma confirmação do seu banco e te enviaremos um e-mail em breve. Por favor, sinta-se à vontade para fechar esta página.", - "yourDonationRef": "A sua referência de doação é {{donationID}}", - "payWithGiroPay": "Doe com GiroPay", - "payWithSofort": "Doe com SOFORT", - "donationFailed": "Doação falhou", - "donationFailedMessage": "Alguma coisa deu errado ao completar o seu pagamento. Se continuar a ter problemas, por favor contacte-nos em support@plant-for-the-planet.org", - "donationPending": "Concluindo a sua doação", - "donationPendingMessage": "Estamos à espera da confirmação do seu banco. Isto pode demorar algum tempo, por favor, sinta-se à vontade para fechar esta página. Nós enviaremos seu recibo por e-mail em breve.", - "sepaMessage": "Ao fornecer seu IBAN e confirmar este pagamento, você autoriza Plant-for-the-Planet e Stripe, nosso provedor de serviços de pagamento, a enviar instruções ao seu banco para debitar sua conta. Você tem direito a um reembolso do seu banco nos termos e condições do seu acordo com o seu banco. Se você tiver algum problema com a sua doação, envie um e-mail para support@plant-for-the-planet.org", - "donationRef": "Ref. Doação", - "sepaDisclaimer": "Os pagamentos SEPA demoram 2-14 dias úteis (normalmente 3-5 dias). Assim que for concluído, enviaremos um e-mail de confirmação com o seu certificado de árvore e com a atualização do contador de árvore.", - "sofortDisclaimer": "Os pagamentos SOFORT demoram 2-14 dias úteis (geralmente 2-3 dias). Assim que for concluído, enviaremos um e-mail de confirmação com o seu certificado de árvore e com a atualização do contador de árvore.", - "askPublishName": "Gostaria de publicar o meu nome completo no quadro de líderes & no app Plant-for-the-Planet. ", - "nameAlreadyPublished": "O seu nome completo aparecerá no quadro de líderes, uma vez que o seu perfil Plant-for-the-Planet é atualmente público.", - "orgNamePublishedTax": "O nome da empresa é visível no nosso app e nosso quadro de líderes. Recibos de dedução de impostos serão emitidos com o mesmo nome.", - "orgNamePublished": "O nome da empresa é visível no nosso quadro de líderes e no nosso aplicativo.", - "aboutProject": "Sobre o Projeto", - "acceptingDonations": "Aceitando Doações", - "natural-regeneration": "Regeneração Natural", - "managed-regeneration": "Regeneração Gerenciada", - "large-scale-planting": "Restauração em Grande Escala", - "agroforestry": "Agrofloresta", - "urban-planting": "Restauração Urbana", - "other-planting": "Restauração", - "mangroves": "Manguezais", - "purpose": "Propósito", - "projectPurpose": "Objetivo do projeto", - "type": "Tipo", - "projectType": "Tipo de projeto", - "conservation": "Conservação", - "restoration": "Restauração", - "filters": "Filtros", - "perM2": "por m²" + "Donate": { + "fortreeCountTrees": "para {{treeCount}} Árvore", + "fortreeCountTrees_plural": "para {{treeCount}} Árvores", + "yourTreesPlantedByOnLocation": "A sua {{treeCount}} árvore será plantada por {{projectName}} em {{location}}.", + "yourTreesPlantedByOnLocation_plural": "As suas {{treeCount}} árvores serão plantadas por {{projectName}} em {{location}}.", + "myTreesPlantedByOnLocation": "A minha {{treeCount}} árvore está sendo plantada em {{location}}.", + "myTreesPlantedByOnLocation_plural": "Minhas {{treeCount}} árvores estão sendo plantadas em {{location}}.", + "topProjects": "Principais projetos", + "allCountProjects": "Todos {{projectCount}} Projetos", + "searchProjects": "Pesquisar Projetos", + "viewProfile": "Ver Perfil", + "contactDetails": "Detalhes para contato", + "readMore": "Ler mais", + "readLess": "Ler menos", + "treeDonation": "Doação de Árvores", + "myDonationGiftToSomeone": "A minha doação é dedicada a alguém", + "taxDeductionNotYetAvailable": "A dedução fiscal ainda não está disponível para ", + "taxDeductionNotAvailableForProject": "A dedução fiscal ainda não está disponível para este projeto", + "youWillReceiveTaxDeduction": "Você receberá um recibo de dedução de imposto para ", + "toProjectByOrganization": "Para {{projectName}} por {{organizationName}}", + "firstName": "Nome", + "lastName": "Sobrenome", + "email": "Email", + "address": "Endereço", + "city": "Cidade", + "zipCode": "CEP/Código Postal", + "zipCodeAlphaNumValidation": "Código postal inválido", + "country": "País", + "isACompanyDonation": "Esta doação é feita por uma empresa", + "companyName": "Nome da Empresa", + "giftRecipient": "Destinatário do presente", + "directGiftRecipient": "Esta doação apoia", + "recipientName": "Nome do Destinatário", + "recipientNameRequired": "Nome do Destinatário é necessário", + "removeRecipient": "Remover", + "giftMessage": "Mensagem de Presente", + "firstNameRequired": "O campo Nome é obrigatório", + "lastNameRequired": "O campo Sobrenome é obrigatório", + "emailRequired": "O e-mail é obrigatório", + "addressRequired": "O endereço é obrigatório", + "cityRequired": "O nome da cidade é obrigatório", + "countryRequired": "País é um campo obrigatório", + "companyRequired": "Nome da empresa é obrigatório", + "paymentDetails": "Detalhes de Pagamento", + "validationFailed": "Validação Falhou", + "seedingYourDonation": "Semeando a sua doação", + "pleaseDoNotCloseThisTab": "Por favor, não feche esta aba!", + "perTree": "/ árvore", + "stopTalkingStartPlanting": "Pare de falar. Comece a plantar.", + "creditDebitCard": "Cartão de Crédito/Débito", + "cardNumber": "Número do cartão", + "expDate": "Valido até (MM/AAA)", + "selectCurrency": "Selecione a sua moeda", + "treeDonationWithPFP": "Doação de árvores com Plant-for-the-Planet", + "unavailable": "não disponível", + "donationSuccessfulWith": "A sua doação de {{currency}} {{totalAmount}}foi realizada com sucesso com {{paymentTypeUsed}}.", + "donationSuccessful": "A sua doação de {{currency}}{{totalAmount}} deu certo!", + "giftSentMessage": "Enviamos um e-mail para {{recipientName}} sobre o presente.", + "contributionMessage": "Talvez você vai visitá-los um dia destes? Nesse meio tempo, que tal conectar os seus amigos a algumas árvores, depois de contar um pouco sobre as suas?", + "plantTreesAtURL": "Plante árvores em {{url}}", + "copiedToClipboard": "Texto copiado para o Clipboard!", + "noProjectsFound": "Nenhum projeto encontrado", + "inTimeOfTaxReturns": "a tempo das declarações de impostos.", + "titleToShare": "Plantar árvores contra a crise climática!", + "giftToName": "Presente para", + "thisDonationSupports": "Esta doação apoia", + "plantTreesWith": "Plante árvores com", + "textToShare": "Junte-se a {{name}} e a milhares de outras pessoas que estão plantando um trilhão de árvores para enfrentar a crise climática #StopTalkingStartPlanting #TrillionTrees @trilliontrees", + "thankyouHeaderText": "Estamos a caminho de um \n

Trilhão de Árvores

", + "shareTextTitle": "Pare de falar. Comece a plantar", + "textToShareLinkedin": "Junte-se a {{name}} e a milhares de outras pessoas que estão plantando um trilhão de árvores para enfrentar a crise climática", + "textToShareForMe": "Junte-se a mim e a milhares de outras pessoas para plantar um trilhão de árvores e assim enfrentar a crise climática", + "donationTokenInvalid": "O token de doação fornecido é inválida.", + "giftTo": "Presente para", + "supporting": "Apoiando", + "selectProject": "Selecione um projeto", + "giftValidation": "Por favor, introduza os detalhes do presente", + "minDonate": "O valor mínimo de doação é", + "noPaymentMethodError": "Não conseguimos processar o seu pagamento, por favor tente novamente.", + "somethingWentWrong": "Algo deu errado, por favor tente novamente em breve!", + "underMaintenance": "App está em manutenção, por favor acesse status.plant-for-the-planet.org para mais detalhes", + "waitingConfirmation": "Estamos atualmente à espera de uma confirmação do seu banco e te enviaremos um e-mail em breve. Por favor, sinta-se à vontade para fechar esta página.", + "yourDonationRef": "A sua referência de doação é {{donationID}}", + "payWithGiroPay": "Doe com GiroPay", + "payWithSofort": "Doe com SOFORT", + "donationFailed": "Doação falhou", + "donationFailedMessage": "Alguma coisa deu errado ao completar o seu pagamento. Se continuar a ter problemas, por favor contacte-nos em support@plant-for-the-planet.org", + "donationPending": "Concluindo a sua doação", + "donationPendingMessage": "Estamos à espera da confirmação do seu banco. Isto pode demorar algum tempo, por favor, sinta-se à vontade para fechar esta página. Nós enviaremos seu recibo por e-mail em breve.", + "sepaMessage": "Ao fornecer seu IBAN e confirmar este pagamento, você autoriza Plant-for-the-Planet e Stripe, nosso provedor de serviços de pagamento, a enviar instruções ao seu banco para debitar sua conta. Você tem direito a um reembolso do seu banco nos termos e condições do seu acordo com o seu banco. Se você tiver algum problema com a sua doação, envie um e-mail para support@plant-for-the-planet.org", + "donationRef": "Ref. Doação", + "sepaDisclaimer": "Os pagamentos SEPA demoram 2-14 dias úteis (normalmente 3-5 dias). Assim que for concluído, enviaremos um e-mail de confirmação com o seu certificado de árvore e com a atualização do contador de árvore.", + "sofortDisclaimer": "Os pagamentos SOFORT demoram 2-14 dias úteis (geralmente 2-3 dias). Assim que for concluído, enviaremos um e-mail de confirmação com o seu certificado de árvore e com a atualização do contador de árvore.", + "askPublishName": "Gostaria de publicar o meu nome completo no quadro de líderes & no app Plant-for-the-Planet. ", + "nameAlreadyPublished": "O seu nome completo aparecerá no quadro de líderes, uma vez que o seu perfil Plant-for-the-Planet é atualmente público.", + "orgNamePublishedTax": "O nome da empresa é visível no nosso app e nosso quadro de líderes. Recibos de dedução de impostos serão emitidos com o mesmo nome.", + "orgNamePublished": "O nome da empresa é visível no nosso quadro de líderes e no nosso aplicativo.", + "aboutProject": "Sobre o Projeto", + "acceptingDonations": "Aceitando Doações", + "natural-regeneration": "Regeneração Natural", + "managed-regeneration": "Regeneração Gerenciada", + "large-scale-planting": "Restauração em Grande Escala", + "agroforestry": "Agrofloresta", + "urban-planting": "Restauração Urbana", + "other-planting": "Restauração", + "mangroves": "Manguezais", + "purpose": "Propósito", + "projectPurpose": "Objetivo do projeto", + "type": "Tipo", + "projectType": "Tipo de projeto", + "conservation": "Conservação", + "restoration": "Restauração", + "filters": "Filtros", + "perM2": "por m²" + } } \ No newline at end of file diff --git a/public/static/locales/pt-BR/donationLink.json b/public/static/locales/pt-BR/donationLink.json index 6f31cf5a2e..fa17184690 100644 --- a/public/static/locales/pt-BR/donationLink.json +++ b/public/static/locales/pt-BR/donationLink.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "DonationLink": {} +} \ No newline at end of file diff --git a/public/static/locales/pt-BR/editProfile.json b/public/static/locales/pt-BR/editProfile.json index 1a48bcf538..5b70032b1f 100644 --- a/public/static/locales/pt-BR/editProfile.json +++ b/public/static/locales/pt-BR/editProfile.json @@ -1,37 +1,39 @@ { - "loginTitle": "{{log}} - Login", - "signUpText": "Inscrição completa", - "profileTypes": "{{item.title}}", - "createAccount": "Criar Conta", - "individual": "Pessoa", - "tpo": "Organização de restauração", - "education": "Escola", - "organization": "Empresa", - "profileCreated": "Perfil criado com sucesso!", - "profileCreationFailed": "Erro na criação do perfil. Por favor, tente novamente.", - "profileCreationError": "Erro na criação do perfil.", - "edit": "Editar Perfil", - "privateAccountTxt": "O seu perfil está escondido e apenas o seu primeiro nome aparece no quadro de liderança", - "save": "Salvar", - "profilePicUpdated": "A foto do perfil está sendo atualizada", - "profileSaved": "Salvo com sucesso!", - "profileSaveFailed": "Erro na atualização do perfil.", - "changeAccountToPublic": "Mudar para uma conta pública", - "publicAccount": "Conta Pública", - "accountPrivacyChangeText": "Para criar um widget de perfil, você precisa ter uma conta pública. Ao clicar em continuar, você muda suas configurações de privacidade para público.", - "continue": "Continuar", - "cancel": "Cancelar", - "termAndCondition": "Concordo com os Termos e Condições da plataforma Plant-for-the-Planet.", - "termAndConditionError": "Por favor Aceite os Termos e Condições", - "fieldLabels": { - "profileType": "Eu sou um(a)", - "name": "Nome do {{type}}", - "website": "Website", - "privateAccount": "Conta Privada", - "subscribe": "Inscreva-se para receber notícias por e-mail" - }, - "validationErrors": { - "nameRequired": "Por favor, adicione um nome", - "websiteInvalid": "Por favor, digite o URL válido do site" + "EditProfile": { + "loginTitle": "{{log}} - Login", + "signUpText": "Inscrição completa", + "profileTypes": "{{item.title}}", + "createAccount": "Criar Conta", + "individual": "Pessoa", + "tpo": "Organização de restauração", + "education": "Escola", + "organization": "Empresa", + "profileCreated": "Perfil criado com sucesso!", + "profileCreationFailed": "Erro na criação do perfil. Por favor, tente novamente.", + "profileCreationError": "Erro na criação do perfil.", + "edit": "Editar Perfil", + "privateAccountTxt": "O seu perfil está escondido e apenas o seu primeiro nome aparece no quadro de liderança", + "save": "Salvar", + "profilePicUpdated": "A foto do perfil está sendo atualizada", + "profileSaved": "Salvo com sucesso!", + "profileSaveFailed": "Erro na atualização do perfil.", + "changeAccountToPublic": "Mudar para uma conta pública", + "publicAccount": "Conta Pública", + "accountPrivacyChangeText": "Para criar um widget de perfil, você precisa ter uma conta pública. Ao clicar em continuar, você muda suas configurações de privacidade para público.", + "continue": "Continuar", + "cancel": "Cancelar", + "termAndCondition": "Concordo com os Termos e Condições da plataforma Plant-for-the-Planet.", + "termAndConditionError": "Por favor Aceite os Termos e Condições", + "fieldLabels": { + "profileType": "Eu sou um(a)", + "name": "Nome do {{type}}", + "website": "Website", + "privateAccount": "Conta Privada", + "subscribe": "Inscreva-se para receber notícias por e-mail" + }, + "validationErrors": { + "nameRequired": "Por favor, adicione um nome", + "websiteInvalid": "Por favor, digite o URL válido do site" + } } -} +} \ No newline at end of file diff --git a/public/static/locales/pt-BR/giftfunds.json b/public/static/locales/pt-BR/giftfunds.json index 6f31cf5a2e..b3f526f2ea 100644 --- a/public/static/locales/pt-BR/giftfunds.json +++ b/public/static/locales/pt-BR/giftfunds.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "Giftfunds": {} +} \ No newline at end of file diff --git a/public/static/locales/pt-BR/leaderboard.json b/public/static/locales/pt-BR/leaderboard.json index c9dbdb0344..83dc19cb62 100644 --- a/public/static/locales/pt-BR/leaderboard.json +++ b/public/static/locales/pt-BR/leaderboard.json @@ -1,7 +1,9 @@ { - "forestFrontrunners": "Pioneiros Florestais", - "mostRecent": "Mais recentes", - "mostTrees": "A maioria das árvores", - "videoTitle": "E finalmente, isto", - "searchUser": "Pesquisar Usuário" + "Leaderboard": { + "forestFrontrunners": "Pioneiros Florestais", + "mostRecent": "Mais recentes", + "mostTrees": "A maioria das árvores", + "videoTitle": "E finalmente, isto", + "searchUser": "Pesquisar Usuário" + } } \ No newline at end of file diff --git a/public/static/locales/pt-BR/login.json b/public/static/locales/pt-BR/login.json index 68a0a49227..f27432bba4 100644 --- a/public/static/locales/pt-BR/login.json +++ b/public/static/locales/pt-BR/login.json @@ -1,14 +1,16 @@ { - "loginTitle": "{{log}} - Login", - "signUpText": "Inscrição completa", - "profileTypes": "{{item.title}}", - "profileName": "Nome do {{type}}", - "createAccount": "Criar Conta", - "individual": "Individual", - "tpo": "Organização de restauração", - "education": "Escola", - "organization": "Empresa", - "profileCreated": "Perfil criado com sucesso!", - "profileCreationFailed": "Erro na criação do perfil. Por favor, tente novamente.", - "profileCreationError": "Erro na criação do perfil." -} + "Login": { + "loginTitle": "{{log}} - Login", + "signUpText": "Inscrição completa", + "profileTypes": "{{item.title}}", + "profileName": "Nome do {{type}}", + "createAccount": "Criar Conta", + "individual": "Individual", + "tpo": "Organização de restauração", + "education": "Escola", + "organization": "Empresa", + "profileCreated": "Perfil criado com sucesso!", + "profileCreationFailed": "Erro na criação do perfil. Por favor, tente novamente.", + "profileCreationError": "Erro na criação do perfil." + } +} \ No newline at end of file diff --git a/public/static/locales/pt-BR/managePayouts.json b/public/static/locales/pt-BR/managePayouts.json index 6f31cf5a2e..21dfda5e63 100644 --- a/public/static/locales/pt-BR/managePayouts.json +++ b/public/static/locales/pt-BR/managePayouts.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "ManagePayouts": {} +} \ No newline at end of file diff --git a/public/static/locales/pt-BR/manageProjects.json b/public/static/locales/pt-BR/manageProjects.json index 4a7cde0ed9..a205ce2012 100644 --- a/public/static/locales/pt-BR/manageProjects.json +++ b/public/static/locales/pt-BR/manageProjects.json @@ -1,181 +1,183 @@ { - "basicDetails": "Detalhes básicos", - "projectMedia": "Projeto Mídia", - "detailedAnalysis": "Análise Detalhada", - "projectSites": "Áreas do Projeto", - "projectSpending": "Gastos do Projeto", - "protectionStartedIN": "A proteção começou em", - "review": "Revisão", - "name": "Nome do Projeto", - "nameValidation": "Por favor, digite o nome do projeto", - "slug": "URL do projeto", - "slugValidation": "Por favor, digite o URL do Projeto", - "classification": "Tipo de projeto", - "classificationValidation": "Por favor, selecione o tipo de projeto", - "countTarget": "Meta de Árvores", - "countTargetValidation": "Por favor, introduza a meta de árvores", - "countTargetValidation2": "A meta deve ser mais do que 1", - "conservationImpacts": "Impactos de Conservação", - "website": "Website", - "websiteValidationRequired": "Por favor, digite o URL do site", - "websiteValidationInvalid": "URL do site inválido", - "aboutProject": "Sobre o Projeto", - "aboutProjectValidation": "Por favor, digite Sobre o projeto", - "receiveDonations": "Receba Doações", - "receiveDonationsInfo": "Por favor, ative assim que o perfil do projeto esteja completo. A Plant-for-the-Planet irá então revisar o perfil e informá-lo se você é elegível para receber doações através desta plataforma. Isto pode levar algumas semanas.", - "unitCost": "Custo por árvore (em euros)", - "exit": "Sair para Projetos", - "projectLocation": "Localização do projeto", - "visitorAssistanceLabel": "Eu providenciarei alojamento, acesso ao local e transporte local se um revisor for enviado pela Plant-for-the-Planet.", - "publishProject": "Publicar Projeto", - "saveAndContinue": "Salvar e Continuar", - "skip": "Pular", - "youtubeURL": "Link de Vídeo do Youtube", - "youtubeURLValidation": "Link de Vídeo do Youtube Inválido", - "addCaption": "Adicionar Legenda", - "yearOfAbandonment": "Aprox. ano de Abandono", - "plantingDensity": "Densidade de plantio", - "employeeCount": "Contagem de Empregados", - "endangeredSpeciesValidation": "Não é uma entrada válida", - "endangeredSpecies": "Espécies ameaçadas de extinção", - "mainChallenge": "Desafio principal", - "whyThisSite": "Por que este site?", - "siteOwner": "Proprietário da Área", - "ownerName": "Nome do Proprietário", - "acquisitionDate": "Data de aquisição", - "yearOfDegradation": "Ano de Degradação", - "causeOfDegradation": "Causa de Degradação", - "longTermPlan": "Plano a longo prazo para o local", - "isCertified": "Este projeto foi certificado", - "certifierName": "Nome do certificador", - "siteName": "Nome do local", - "spendingYear": "Ano", - "spendingAmount": "Gastos (em euros)", - "resetMessage": "Por favor, preencha primeiro os Detalhes Básicos", - "uploadPhotos": "Carregar Fotos", - "dragIn": "ou arraste para dentro", - "backToBasic": "Voltar aos detalhes básicos", - "projectNotFound": "Projeto Não Encontrado", - "siteOwnerPrivate": "Particular", - "siteOwnerPublic": "Propriedade Pública", - "siteOwnerSmallHolding": "Pequena Propriedade", - "siteOwnerCommunal": "Terra Comunal", - "siteOwnerOwned": "Propriedade do Proprietário", - "siteOwnerOther": "Outros", - "yearAbandonedInfo": "Quando foi a última intervenção humana significativa no local? Ex.: exploração florestal, agricultura, pastagem para gado, queimadas induzidas pelo homem.", - "treePerHa": "árvores por hectare", - "employeesCountInfo": "Equivalente a uma semana de 40 horas. Ou seja, dois empregados de meio período contam como um.", - "timePeriod": "Período de tempo", - "max300Chars": "Máximo 300 caracteres permitidos", - "longTermPlanInfo": "Que medidas estão em vigor para expandir a floresta a longo prazo? Como é financiado? Que recursos serão extraídos do local?", - "backToMedia": "Voltar para a mídia do projeto", - "siteStatusPlanting": "Plantio", - "siteStatusPlanted": "Plantado", - "siteStatusBarren": "Árido", - "siteStatusReforestation": "Reflorestamento", - "siteStatusNotYetprotected": "Ainda não protegido", - "siteStatusPartiallyprotected": "Parcialmente protegido", - "siteStatusFullyprotected": "Totalmente protegido", - "siteStatus": "Status do local", - "selectProjectStatus": "Por favor, selecione Status do Local", - "saveAndAddSite": "Salvar & Adicionar outro local", - "addSite": "Adicionar outro local", - "backToAnalysis": "Voltar à análise detalhada", - "spendingYearValidation": "Por favor, adicione Ano das Despesas", - "spendingAmountValidation": "Por favor, digite o valor gasto", - "uploadReport": "Faça upload e salve o relatório", - "dragInPdf": "ou arraste em um pdf", - "addAnotherYear": "Acrescentar outro ano", - "backToSites": "Voltar aos locais do projeto", - "certifiedBy": "Certificado por", - "certificationDateValidation": "Por favor, adicione a data de certificação", - "uploadCertificate": "Carregar Certificado", - "addCertificate": "Acrescentar outra certificação", - "dropGeoJson": "Adicione .geojson ou .kml", - "projectUnderReview": "O seu projeto está sendo revisado, por favor aguarde.", - "projectForReview": "Agora você pode submeter o projeto para revisão.", - "backToSpending": "Voltar aos gastos do projeto", - "pendingReview": "Revisão Pendente", - "submitForReview": "Submeter para revisão", - "addProject": "Adicionar Projeto", - "addNewProject": "Adicionar Novo Projeto", - "conservationProject": "Projeto de Conservação", - "abandonment": "Abandono", - "survivalRate": "Taxa de Sobrevivência", - "survivalRateInfo": "Porcentagem de árvores que sobrevivem ao primeiro ano de plantio", - "employees": "Empregados", - "siteOwnership": "Propriedade do site", - "longTermProtection": "Proteção a Longo Prazo", - "externalCertifications": "Certificações externas", - "projectSpendingFinancial": "Gastos financeiros em projetos", - "issueDate": "Data de emissão", - "acquisitionYear": "Ano de Aquisição", - "largeScalePlanting": "Plantio em larga Escala", - "agroforestry": "Agrofloresta", - "naturalRegeneration": "Regeneração Natural", - "managedRegeneration": "Regeneração com manejo", - "urbanPlanting": "Plantio Urbano", - "otherPlanting": "Outros plantios", - "projectType": "Tipo de projeto", - "protectionSeasons": "Estações de Proteção", - "polygonRequired": "O polígono é necessário", - "fileSizeLimit": "O arquivo é maior que 10 mb", - "fileImageOnly": "O tipo de arquivo deve ser imagem", - "filePDFOnly": "O tipo de arquivo deve ser PDF", - "acceptedReview": "Mudanças no seu projeto estão acontecendo", - "deniedReview": "Sua revisão está negada", - "saveSite": "Salvar Local", - "latitude": "Latitude", - "longitude": "Longitude", - "latitudeRequired": "Latitude é necessária", - "longitudeRequired": "A longitude é necessária", - "manageProject": "Gerenciar Projetos", - "descriptionForManageProjects": "Mostre seu trabalho de restauração para monitoramento e para receber doações.", - "manageProjects": "Gerenciar Projetos", - "addConservationProjects": "Adicionar Projetos de Conservação", - "areaProtected": "Área Protegida (em ha)", - "areaProtectedInfo": "Para introduzir casas decimais, separe-as por favor utilizando um entre aspas: \" . ”", - "protectionStartedIn": "Proteção Iniciada em", - "actions": "Ações", - "activitySeasons": "Estações de atividade", - "addAnotherSpecies": "Adicionar Outras Espécies", - "add": "Acrescentar", - "forestProtectionType": "Tipo/Medidas de Proteção Florestal", - "ecologicalBenefits": "Benefícios Ecológicos", - "socialBenefits": "Benefícios sociais", - "coBenefits": "Co-Benefícios", - "benefits": "Benefícios", - "tropicalMoistForest": "Floresta Tropical úmida", - "dry": "Seco", - "ecosystemType": "Selecione por favor Tipo de Ecossistema", - "tropicalDryForests": "Florestas Tropicais Secas", - "tropicalConiferousForests": "Florestas Tropicais de Coníferas", - "tropicalGrasslandsForests": "Florestas de Pastagens Tropicais", - "temperateBroadleafForests": "Florestas Temperadas de Folhas largas", - "temperate-coniferous-forests": "Florestas de Coníferas Temperadas", - "temperateGrasslandsForests": "Florestas de Pastagens Temperadas", - "mediterraneanForests": "Florestas mediterrânicas", - "mangroves": "Manguezais", - "deserts": "Desertos", - "floodedGrasslands": "Pradarias alagadas", - "montaneGrasslands": "Pradarias de montanhas", - "borealForests": "Florestas boreais", - "tundra": "Tundra", - "temperateConiferousForests": "Florestas de Coníferas Temperadas", - "tenure": "Posse", - "rent": "Aluguel", - "ownershipType": "Tipo de proprietário", - "landOwnershipType": "Tipo de propriedade de terra", - "restorationProject": "Projeto de Restauração", - "addProjetDescription": "Você está a poucos passos de mostrar o seu trabalho na plataforma Plant-for-theplanet.", - "addProjetContact": "Se precisar de ajuda, contate-nos em ", - "supportLink": "support@plant-for-the-planet.org", - "wrongCoordinates": "Coordenadas erradas", - "actionInfo": "As ações que a sua organização está realizando para conservar o ecossistema.", - "mainChallengeInfo": "O maior desafio que este projeto está enfrentando.", - "motivationInfo": "A motivação para proteger esse ecossistema em específico.", - "hectar": "hectares", - "validation": "{{fieldName}} é Inválido", - "plantingDensityValidation": "Por favor introduza Densidade do plantio", - "onlyEnglish": "Por favor, crie/edite projetos apenas em inglês. As traduções de Projetos são geridas automaticamente pela Plant-for-the-Planet." + "ManageProjects": { + "basicDetails": "Detalhes básicos", + "projectMedia": "Projeto Mídia", + "detailedAnalysis": "Análise Detalhada", + "projectSites": "Áreas do Projeto", + "projectSpending": "Gastos do Projeto", + "protectionStartedIN": "A proteção começou em", + "review": "Revisão", + "name": "Nome do Projeto", + "nameValidation": "Por favor, digite o nome do projeto", + "slug": "URL do projeto", + "slugValidation": "Por favor, digite o URL do Projeto", + "classification": "Tipo de projeto", + "classificationValidation": "Por favor, selecione o tipo de projeto", + "countTarget": "Meta de Árvores", + "countTargetValidation": "Por favor, introduza a meta de árvores", + "countTargetValidation2": "A meta deve ser mais do que 1", + "conservationImpacts": "Impactos de Conservação", + "website": "Website", + "websiteValidationRequired": "Por favor, digite o URL do site", + "websiteValidationInvalid": "URL do site inválido", + "aboutProject": "Sobre o Projeto", + "aboutProjectValidation": "Por favor, digite Sobre o projeto", + "receiveDonations": "Receba Doações", + "receiveDonationsInfo": "Por favor, ative assim que o perfil do projeto esteja completo. A Plant-for-the-Planet irá então revisar o perfil e informá-lo se você é elegível para receber doações através desta plataforma. Isto pode levar algumas semanas.", + "unitCost": "Custo por árvore (em euros)", + "exit": "Sair para Projetos", + "projectLocation": "Localização do projeto", + "visitorAssistanceLabel": "Eu providenciarei alojamento, acesso ao local e transporte local se um revisor for enviado pela Plant-for-the-Planet.", + "publishProject": "Publicar Projeto", + "saveAndContinue": "Salvar e Continuar", + "skip": "Pular", + "youtubeURL": "Link de Vídeo do Youtube", + "youtubeURLValidation": "Link de Vídeo do Youtube Inválido", + "addCaption": "Adicionar Legenda", + "yearOfAbandonment": "Aprox. ano de Abandono", + "plantingDensity": "Densidade de plantio", + "employeeCount": "Contagem de Empregados", + "endangeredSpeciesValidation": "Não é uma entrada válida", + "endangeredSpecies": "Espécies ameaçadas de extinção", + "mainChallenge": "Desafio principal", + "whyThisSite": "Por que este site?", + "siteOwner": "Proprietário da Área", + "ownerName": "Nome do Proprietário", + "acquisitionDate": "Data de aquisição", + "yearOfDegradation": "Ano de Degradação", + "causeOfDegradation": "Causa de Degradação", + "longTermPlan": "Plano a longo prazo para o local", + "isCertified": "Este projeto foi certificado", + "certifierName": "Nome do certificador", + "siteName": "Nome do local", + "spendingYear": "Ano", + "spendingAmount": "Gastos (em euros)", + "resetMessage": "Por favor, preencha primeiro os Detalhes Básicos", + "uploadPhotos": "Carregar Fotos", + "dragIn": "ou arraste para dentro", + "backToBasic": "Voltar aos detalhes básicos", + "projectNotFound": "Projeto Não Encontrado", + "siteOwnerPrivate": "Particular", + "siteOwnerPublic": "Propriedade Pública", + "siteOwnerSmallHolding": "Pequena Propriedade", + "siteOwnerCommunal": "Terra Comunal", + "siteOwnerOwned": "Propriedade do Proprietário", + "siteOwnerOther": "Outros", + "yearAbandonedInfo": "Quando foi a última intervenção humana significativa no local? Ex.: exploração florestal, agricultura, pastagem para gado, queimadas induzidas pelo homem.", + "treePerHa": "árvores por hectare", + "employeesCountInfo": "Equivalente a uma semana de 40 horas. Ou seja, dois empregados de meio período contam como um.", + "timePeriod": "Período de tempo", + "max300Chars": "Máximo 300 caracteres permitidos", + "longTermPlanInfo": "Que medidas estão em vigor para expandir a floresta a longo prazo? Como é financiado? Que recursos serão extraídos do local?", + "backToMedia": "Voltar para a mídia do projeto", + "siteStatusPlanting": "Plantio", + "siteStatusPlanted": "Plantado", + "siteStatusBarren": "Árido", + "siteStatusReforestation": "Reflorestamento", + "siteStatusNotYetprotected": "Ainda não protegido", + "siteStatusPartiallyprotected": "Parcialmente protegido", + "siteStatusFullyprotected": "Totalmente protegido", + "siteStatus": "Status do local", + "selectProjectStatus": "Por favor, selecione Status do Local", + "saveAndAddSite": "Salvar & Adicionar outro local", + "addSite": "Adicionar outro local", + "backToAnalysis": "Voltar à análise detalhada", + "spendingYearValidation": "Por favor, adicione Ano das Despesas", + "spendingAmountValidation": "Por favor, digite o valor gasto", + "uploadReport": "Faça upload e salve o relatório", + "dragInPdf": "ou arraste em um pdf", + "addAnotherYear": "Acrescentar outro ano", + "backToSites": "Voltar aos locais do projeto", + "certifiedBy": "Certificado por", + "certificationDateValidation": "Por favor, adicione a data de certificação", + "uploadCertificate": "Carregar Certificado", + "addCertificate": "Acrescentar outra certificação", + "dropGeoJson": "Adicione .geojson ou .kml", + "projectUnderReview": "O seu projeto está sendo revisado, por favor aguarde.", + "projectForReview": "Agora você pode submeter o projeto para revisão.", + "backToSpending": "Voltar aos gastos do projeto", + "pendingReview": "Revisão Pendente", + "submitForReview": "Submeter para revisão", + "addProject": "Adicionar Projeto", + "addNewProject": "Adicionar Novo Projeto", + "conservationProject": "Projeto de Conservação", + "abandonment": "Abandono", + "survivalRate": "Taxa de Sobrevivência", + "survivalRateInfo": "Porcentagem de árvores que sobrevivem ao primeiro ano de plantio", + "employees": "Empregados", + "siteOwnership": "Propriedade do site", + "longTermProtection": "Proteção a Longo Prazo", + "externalCertifications": "Certificações externas", + "projectSpendingFinancial": "Gastos financeiros em projetos", + "issueDate": "Data de emissão", + "acquisitionYear": "Ano de Aquisição", + "largeScalePlanting": "Plantio em larga Escala", + "agroforestry": "Agrofloresta", + "naturalRegeneration": "Regeneração Natural", + "managedRegeneration": "Regeneração com manejo", + "urbanPlanting": "Plantio Urbano", + "otherPlanting": "Outros plantios", + "projectType": "Tipo de projeto", + "protectionSeasons": "Estações de Proteção", + "polygonRequired": "O polígono é necessário", + "fileSizeLimit": "O arquivo é maior que 10 mb", + "fileImageOnly": "O tipo de arquivo deve ser imagem", + "filePDFOnly": "O tipo de arquivo deve ser PDF", + "acceptedReview": "Mudanças no seu projeto estão acontecendo", + "deniedReview": "Sua revisão está negada", + "saveSite": "Salvar Local", + "latitude": "Latitude", + "longitude": "Longitude", + "latitudeRequired": "Latitude é necessária", + "longitudeRequired": "A longitude é necessária", + "manageProject": "Gerenciar Projetos", + "descriptionForManageProjects": "Mostre seu trabalho de restauração para monitoramento e para receber doações.", + "manageProjects": "Gerenciar Projetos", + "addConservationProjects": "Adicionar Projetos de Conservação", + "areaProtected": "Área Protegida (em ha)", + "areaProtectedInfo": "Para introduzir casas decimais, separe-as por favor utilizando um entre aspas: \" . ”", + "protectionStartedIn": "Proteção Iniciada em", + "actions": "Ações", + "activitySeasons": "Estações de atividade", + "addAnotherSpecies": "Adicionar Outras Espécies", + "add": "Acrescentar", + "forestProtectionType": "Tipo/Medidas de Proteção Florestal", + "ecologicalBenefits": "Benefícios Ecológicos", + "socialBenefits": "Benefícios sociais", + "coBenefits": "Co-Benefícios", + "benefits": "Benefícios", + "tropicalMoistForest": "Floresta Tropical úmida", + "dry": "Seco", + "ecosystemType": "Selecione por favor Tipo de Ecossistema", + "tropicalDryForests": "Florestas Tropicais Secas", + "tropicalConiferousForests": "Florestas Tropicais de Coníferas", + "tropicalGrasslandsForests": "Florestas de Pastagens Tropicais", + "temperateBroadleafForests": "Florestas Temperadas de Folhas largas", + "temperate-coniferous-forests": "Florestas de Coníferas Temperadas", + "temperateGrasslandsForests": "Florestas de Pastagens Temperadas", + "mediterraneanForests": "Florestas mediterrânicas", + "mangroves": "Manguezais", + "deserts": "Desertos", + "floodedGrasslands": "Pradarias alagadas", + "montaneGrasslands": "Pradarias de montanhas", + "borealForests": "Florestas boreais", + "tundra": "Tundra", + "temperateConiferousForests": "Florestas de Coníferas Temperadas", + "tenure": "Posse", + "rent": "Aluguel", + "ownershipType": "Tipo de proprietário", + "landOwnershipType": "Tipo de propriedade de terra", + "restorationProject": "Projeto de Restauração", + "addProjetDescription": "Você está a poucos passos de mostrar o seu trabalho na plataforma Plant-for-theplanet.", + "addProjetContact": "Se precisar de ajuda, contate-nos em ", + "supportLink": "support@plant-for-the-planet.org", + "wrongCoordinates": "Coordenadas erradas", + "actionInfo": "As ações que a sua organização está realizando para conservar o ecossistema.", + "mainChallengeInfo": "O maior desafio que este projeto está enfrentando.", + "motivationInfo": "A motivação para proteger esse ecossistema em específico.", + "hectar": "hectares", + "validation": "{{fieldName}} é Inválido", + "plantingDensityValidation": "Por favor introduza Densidade do plantio", + "onlyEnglish": "Por favor, crie/edite projetos apenas em inglês. As traduções de Projetos são geridas automaticamente pela Plant-for-the-Planet." + } } \ No newline at end of file diff --git a/public/static/locales/pt-BR/maps.json b/public/static/locales/pt-BR/maps.json index 8d3f0f73d5..f2f5189148 100644 --- a/public/static/locales/pt-BR/maps.json +++ b/public/static/locales/pt-BR/maps.json @@ -1,45 +1,47 @@ { - "explore": "Explorar", - "forests": "Florestas atuais", - "restoration": "Potencial de Restauração", - "deforestation": "Desmatamento", - "planted": "Plantado", - "projects": "Projetos", - "3trilliontrees": "O mundo tem hoje cerca de 3 trilhões de árvores (\"Florestas\"). E espaço para até um trilhão de árvores a mais (\"Potencial de Reflorestamento\").", - "high": "Alto", - "low": "Baixo", - "forestInfo": "3,04 trilhões de árvores existem atualmente no mundo. Existiam cerca de seis trilhões de árvores antes dos humanos começarem a derrubar florestas, cerca de 11.000 anos atrás. ", - "restorationInfo": "Meio bilhão de hectares são adequados para a restauração em larga escala de florestas fechadas. Mais um bilhão e meio de hectares são mais adequados à restauração de mosaicos, que combina florestas com outros usos da terra como agroflorestas, agricultura de pequenos proprietários e assentamentos.", - "location": "Localização", - "timeTravel": "Viagem no tempo", - "vegetationChange": "Mudança de Vegetação", - "beta": "BETA", - "baseLayer": "Camada Base & Mapas Vetoriais", - "satelliteImagery": "Imagens de satélite", - "fieldData": "Dados de campo", - "trees": "Árvores", - "ha": "ha", - "plantingDate": "Data de plantio", - "plantingDensity": "Densidade de plantio", - "speciesPlanted": "Espécies Plantadas", - "sampleTrees": "Árvores de Amostra", - "meterHigh": "m elevado", - "cmWide": "centímetro de largura", - "treesPerHa": "árvores por hectare", - "sampleTree": "Árvore de Amostra", - "scientificName": "Nome Científico", - "measurements": "Medidas", - "treeTag": "Etiqueta da árvore", - "1Tree": "1 Árvore", - "plot": "Lote", - "tag": "Etiqueta", - "plantingDensityInfo": "Em caso de enriquecimento, a densidade de plantio pode ser menor.", - "plantationDensityFormula": "Densidade de plantio = Nº de árvores / Área de plantio", - "unknown": "Desconhecido", - "showWholeArea": "Mostrar toda a área", - "daysAgo": "{{days}} dias atrás", - "today": "Hoje", - "yesterday": "Ontem", - "clickForDetails": "Clique para Detalhes", - "treeMapper": "TreeMapper" + "Maps": { + "explore": "Explorar", + "forests": "Florestas atuais", + "restoration": "Potencial de Restauração", + "deforestation": "Desmatamento", + "planted": "Plantado", + "projects": "Projetos", + "3trilliontrees": "O mundo tem hoje cerca de 3 trilhões de árvores (\"Florestas\"). E espaço para até um trilhão de árvores a mais (\"Potencial de Reflorestamento\").", + "high": "Alto", + "low": "Baixo", + "forestInfo": "3,04 trilhões de árvores existem atualmente no mundo. Existiam cerca de seis trilhões de árvores antes dos humanos começarem a derrubar florestas, cerca de 11.000 anos atrás. ", + "restorationInfo": "Meio bilhão de hectares são adequados para a restauração em larga escala de florestas fechadas. Mais um bilhão e meio de hectares são mais adequados à restauração de mosaicos, que combina florestas com outros usos da terra como agroflorestas, agricultura de pequenos proprietários e assentamentos.", + "location": "Localização", + "timeTravel": "Viagem no tempo", + "vegetationChange": "Mudança de Vegetação", + "beta": "BETA", + "baseLayer": "Camada Base & Mapas Vetoriais", + "satelliteImagery": "Imagens de satélite", + "fieldData": "Dados de campo", + "trees": "Árvores", + "ha": "ha", + "plantingDate": "Data de plantio", + "plantingDensity": "Densidade de plantio", + "speciesPlanted": "Espécies Plantadas", + "sampleTrees": "Árvores de Amostra", + "meterHigh": "m elevado", + "cmWide": "centímetro de largura", + "treesPerHa": "árvores por hectare", + "sampleTree": "Árvore de Amostra", + "scientificName": "Nome Científico", + "measurements": "Medidas", + "treeTag": "Etiqueta da árvore", + "1Tree": "1 Árvore", + "plot": "Lote", + "tag": "Etiqueta", + "plantingDensityInfo": "Em caso de enriquecimento, a densidade de plantio pode ser menor.", + "plantationDensityFormula": "Densidade de plantio = Nº de árvores / Área de plantio", + "unknown": "Desconhecido", + "showWholeArea": "Mostrar toda a área", + "daysAgo": "{{days}} dias atrás", + "today": "Hoje", + "yesterday": "Ontem", + "clickForDetails": "Clique para Detalhes", + "treeMapper": "TreeMapper" + } } \ No newline at end of file diff --git a/public/static/locales/pt-BR/me.json b/public/static/locales/pt-BR/me.json index a65038dd92..9195b22c46 100644 --- a/public/static/locales/pt-BR/me.json +++ b/public/static/locales/pt-BR/me.json @@ -1,223 +1,225 @@ { - "treesPlanted": "Árvore Plantada", - "treesPlanted_plural": "Árvores Plantadas", - "target": "Alvo", - "share": "Compartilhe", - "registerTrees": "Registrar Árvores", - "registerTreesDescription": "Registre as árvores que você mesmo plantou, por exemplo, no seu quintal.", - "redeem": "Resgate", - "myForest": "Minha Floresta", - "giftToGiftee": "Presente para {{gifteeName}}", - "settingManageProject": "Gerenciar Projetos", - "deleteAccount": "Excluir conta", - "userTree": "Registrar Árvores", - "accountHistory": "Histórico da conta", - "logout": "Sair", - "close": "Fechar", - "support": "Suporte", - "addTarget": "Adicionar Meta", - "noOfTrees": "Nº de árvores", - "datePlanted": "Data Plantada", - "speciesIsRequired": "Espécie é necessária", - "treeSpecies": "Espécies de Árvores", - "drawPolygon": "Por favor, desenhe um polígono para localizar as suas árvores", - "selectLocation": "Selecione no mapa o local de plantio das árvores", - "registerButton": "Registe-se", - "startDrawing": "Comece a desenhar", - "save": "Salvar", - "treesRequired": "Número de Árvores necessárias", - "wentWrong": "Alguma coisa correu mal. Por favor contacte support@plant-for-the-planet.org", - "locationMissing": "Seleccione a localização no mapa", - "uploadPhotos": "Carregar Fotos", - "dragHere": "ou arraste aqui", - "contribNotFound": "Contribuição não encontrada", - "errorOccured": "Erro Ocorrido", - "contribSuccess": "Adicionado com sucesso {{treeCount}} {{treeSpecies}} 🌳 de {{plantDate}}", - "moreThanOne": "mínimo 1 árvore necessária", - "registered": "Registado em", - "receivedTrees": "Árvores Recebidas", - "receivedFrom": "Recebido de {{name}}", - "redeemedTrees": "Árvores Redimidas", - "myAccount": "Minha Conta", - "all": "Todos", - "noRecords": "Sem Registros", - "filters": "Filtros", - "registeredTrees": "Árvores Registradas", - "embedWidget": "Incorporar Widget", - "tree-donation": "Doação de Árvores", - "tree-gift": "Árvore de presente", - "tree-cash": "TreeCash", - "planet-cash": "PlanetCash", - "trees": "Árvores", - "amount": "Valor", - "created": "Data de Criação", - "paymentMethod": "Forma de pagamento", - "frequency": "Frequência", - "monthly": "Mensal", - "yearly": "Anualmente", - "totalDonated": "Total doado", - "firstDonation": "Data da primeira doação", - "donorNameRequired": "Nome de Doador(a) Requerido", - "donationAmountRequired": "Quantia de Doação Necessária", - "frequencyRequired": "Frequência Requerida", - "project": "Nome do Projeto", - "method": "Forma de pagamento", - "treeCount": "Contagem de árvores", - "lastUpdate": "Última Atualização", - "donorCertificate": "Certificado do Doador", - "editDonation": "Editar Doação", - "pauseDonation": "Pausar Doação", - "cancelDonation": "Cancelar Doação", - "reactivateDonation": "Reativar doação", - "resumeDonation": "Resumir Doação", - "donationName": "Nome da doação", - "donationAmount": "Quantia de Doação", - "makeChanges": "Fazer Alterações", - "cancel": "Cancelar", - "yes": "sim", - "no": "Não", - "editDonationConfirmation": "Editar Doação", - "editDonationDescription": "Pode editar as seguintes opções:", - "pauseDonationConfirmation": "Pausar Doação", - "pauseDonationDescription": "Pode recomeçar depois de fazer uma pausa, ao reiniciar.", - "pauseUntilResume": "Pausa até eu retomar", - "pausedUntilResumed": "Pausado até ser retomado", - "pausedUntil": "Pausado até", - "pauseUntilDate": "Pausa até a data selecionada", - "reactivateDonationConfirmation": "Reativar Doação", - "reactivateDonationDescription": "A sua doação será reativada e será feita na data {{currentPeriodEnds}}", - "cancelDonationConfirmation": "Cancelar Doação", - "cancelDonationDescription": "Uma vez cancelada a doação, esta não pode ser reiniciada.", - "cancelDonationPaypalDescription": "Esta doação será cancelada imediatamente, não podendo ser reiniciada.", - "cancelledOn": "Cancelado em", - "willBeCancelledOn": "Será cancelado em", - "nextOn": "A seguir em", - "download": "Download", - "donations": "Doações", - "in-progress": "Em andamento", - "donation-in-progress": "Em andamento", - "donation-tree-cash": "TreeCash", - "donation-success": "Com sucesso", - "cancelled": "Cancelado", - "card": "Cartão", - "sepa": "SEPA", - "success": "Com sucesso", - "paid": "Com sucesso", - "initiated": "Iniciado", - "failed": "Falhou", - "pending": "Pendente", - "refunded": "Reembolsado", - "referred": "Referido", - "in-dispute": "Em Disputa", - "dispute-lost": "Disputa perdida", - "nameForest": "A Floresta de {{name}}", - "taxReceipt": "Recibo do imposto", - "history": "História", - "recurrency": "Doações Recorrentes", - "new": "Novo", - "beta": "Beta", - "date": "Data", - "treemapper": "TreeMapper", - "register-trees": "Registrar Árvores", - "manage-projects": "Gerenciar Projetos", - "app-payouts": "Pagamentos do aplicativo", - "app-payout-open": "Pagamentos Abertos", - "app-payout-pending": "Pagamentos Pendentes", - "app-payout-assigned": "Pagamentos Atribuídos", - "app-payout-complete": "Pagamentos Concluídos", - "app-payout": "Pagamento do aplicativo", - "reference": "Referência", - "fee": "Tarifa", - "net": "NET", - "status": "Estado", - "paymentDate": "Data de Pagamento", - "bankName": "Nome do Banco", - "accountHolder": "Titular da Conta", - "aba": "ABA", - "bic": "BIC", - "iban": "IBAN", - "swift": "SWIFT", - "isDefault": "Conta padrão", - "bankAccountCreated": "Conta Bancária Criada", - "bankAccountUpdated": "Conta Bancária Atualizada", - "donation-all": "Doações", - "donation-canceled": "Cancelado", - "payout-all": "Pagamentos", - "payout-action-required": "Ação Requerida", - "payout-pending": "pendente", - "payout-completed": "Completo", - "donorName": "Nome do doador", - "paidAmount": "Quantia paga", - "projectGuid": "GUID do projeto", - "totalAmount": "Quantidade total", - "disputeFee": "Taxa de Disputa", - "planetFee": "Taxa Planet", - "transactionFee": "Taxa de Transação", - "transferFee": "Taxa de transferência", - "open": "Aberto", - "downloads": "Downloads", - "account": "Conta", - "loadMore": "Carregar mais", - "setTarget": "Estabelecer Meta", - "targetSave": "Salvar", - "targetErrorMessage": "O número deve ser positivo ou maior que zero", - "taxDeductibleReceipt": "Taxa Dedutível de Imposto", - "giftCertificate": "Certificado do presente", - "paypal-paypal": "Paypal", - "stripe-": "Stripe", - "unknown-method": "Desconhecido", - "stripe-sofort": "Sofort (Stripe)", - "tree-cash-tree-cash": "TreeCash", - "planet-cash-planet-cash": "PlanetCash", - "stripe-card": "Cartão de Crédito/Débito", - "stripe-giropay": "GiroPay (Stripe)", - "action-required": "Ação Requerida", - "completed": "Concluído", - "donationsSubTitle": "Gerencie todas as suas doações e pagamentos de um só lugar.", - "recurrencySubTitle": "Gerenciar todas as suas Doações Recorrentes em um só lugar.", - "payments": "Pagamentos", - "stripe-sepa_debit": "SEPA (Stripe)", - "sepa_debit": "SEPA (Stripe)", - "offline-offline": "Offline", - "profile": "Perfil", - "projects": "Projetos", - "settings": "Configurações", - "editProfile": "Editar Perfil", - "deleteProfile": "Excluir Perfil", - "widgets": "Widgets", - "pauseNote": "Nota: É possível selecionar uma data para além do final do período atual.", - "cancelImmediately": "Cancelar imediatamente", - "cancelOnSelectedDate": "Selecionar Data de cancelamento", - "conservation-donation": "Doação de Conservação", - "funds-donation": "Doação", - "bouquet-donation": "Doação Bouquet", - "transferDetails": "Detalhes da transferência", - "beneficiary": "Beneficiário", - "donationNote": { - "offline-offline": "As transferências bancárias normalmente demoram 1-5 dias úteis para chegar até nós. Assim que a sua transferência chegar, enviaremos um e-mail de confirmação com os seus recibos (e o seu certificado).", - "stripe-sepa_debit": "Os pagamentos SEPA demoram 2-14 dias úteis (normalmente 3-5 dias). Assim que a sua transferência chegar, enviaremos um e-mail de confirmação com os seus recibos (e o seu certificado).", - "stripe-sofort": "Os pagamentos SOFORT demoram 2-14 dias úteis (geralmente 2-3 dias). Assim que a sua transferência chegar, enviaremos um e-mail de confirmação com os seus recibos (e o seu certificado).", - "in-dispute": "A sua transferência foi contestada. Normalmente $7 - $15,00 de taxa de disputa é cobrada pelos Provedores de Pagamento. Por favor contacte support@plant-for-the-planet.org para mais detalhes." - }, - "active": "ativo", - "canceled": "Cancelado", - "incomplete": "pendente", - "incomplete_expired": "Cancelado", - "past_due": "Vencido", - "unpaid": "não pago", - "trialing": "Ativo", - "paused": "pausado", - "plantLocations": "Locais de plantio", - "mySpecies": "Minhas espécies", - "import": "Importar", - "pausingDonation": "Pausa na doação", - "cancellingDonation": "Cancelamento da doação", - "reactivatingDonation": "Reativação da doação", - "editingDonation": "Edição de doações", - "noteToWait": "Nota: Demorará 5-10 minutos para atualizar a Doação Recorrente", - "apiKey": "Chave API", - "apiKeyMessage1": "A API Key é como uma senha digital que permite agir como o seu perfil em qualquer aplicativo. Também permite aplicativos doarem em seu nome, utilizar PlanetCash e visualizar transações.", - "apiKeyMessage2": "Uma vez gerada uma chave API, será necessária uma autenticação de duas etapas para o seu login. Isto poderá ser configurado na próxima vez que iniciar a sessão.", - "apiKeyMessage3": "A regeneração de uma chave API irá invalidar imediatamente a sua chave API existente.", - "regenerateKey": "Regenerar chave" + "Me": { + "treesPlanted": "Árvore Plantada", + "treesPlanted_plural": "Árvores Plantadas", + "target": "Alvo", + "share": "Compartilhe", + "registerTrees": "Registrar Árvores", + "registerTreesDescription": "Registre as árvores que você mesmo plantou, por exemplo, no seu quintal.", + "redeem": "Resgate", + "myForest": "Minha Floresta", + "giftToGiftee": "Presente para {{gifteeName}}", + "settingManageProject": "Gerenciar Projetos", + "deleteAccount": "Excluir conta", + "userTree": "Registrar Árvores", + "accountHistory": "Histórico da conta", + "logout": "Sair", + "close": "Fechar", + "support": "Suporte", + "addTarget": "Adicionar Meta", + "noOfTrees": "Nº de árvores", + "datePlanted": "Data Plantada", + "speciesIsRequired": "Espécie é necessária", + "treeSpecies": "Espécies de Árvores", + "drawPolygon": "Por favor, desenhe um polígono para localizar as suas árvores", + "selectLocation": "Selecione no mapa o local de plantio das árvores", + "registerButton": "Registe-se", + "startDrawing": "Comece a desenhar", + "save": "Salvar", + "treesRequired": "Número de Árvores necessárias", + "wentWrong": "Alguma coisa correu mal. Por favor contacte support@plant-for-the-planet.org", + "locationMissing": "Seleccione a localização no mapa", + "uploadPhotos": "Carregar Fotos", + "dragHere": "ou arraste aqui", + "contribNotFound": "Contribuição não encontrada", + "errorOccured": "Erro Ocorrido", + "contribSuccess": "Adicionado com sucesso {{treeCount}} {{treeSpecies}} 🌳 de {{plantDate}}", + "moreThanOne": "mínimo 1 árvore necessária", + "registered": "Registado em", + "receivedTrees": "Árvores Recebidas", + "receivedFrom": "Recebido de {{name}}", + "redeemedTrees": "Árvores Redimidas", + "myAccount": "Minha Conta", + "all": "Todos", + "noRecords": "Sem Registros", + "filters": "Filtros", + "registeredTrees": "Árvores Registradas", + "embedWidget": "Incorporar Widget", + "tree-donation": "Doação de Árvores", + "tree-gift": "Árvore de presente", + "tree-cash": "TreeCash", + "planet-cash": "PlanetCash", + "trees": "Árvores", + "amount": "Valor", + "created": "Data de Criação", + "paymentMethod": "Forma de pagamento", + "frequency": "Frequência", + "monthly": "Mensal", + "yearly": "Anualmente", + "totalDonated": "Total doado", + "firstDonation": "Data da primeira doação", + "donorNameRequired": "Nome de Doador(a) Requerido", + "donationAmountRequired": "Quantia de Doação Necessária", + "frequencyRequired": "Frequência Requerida", + "project": "Nome do Projeto", + "method": "Forma de pagamento", + "treeCount": "Contagem de árvores", + "lastUpdate": "Última Atualização", + "donorCertificate": "Certificado do Doador", + "editDonation": "Editar Doação", + "pauseDonation": "Pausar Doação", + "cancelDonation": "Cancelar Doação", + "reactivateDonation": "Reativar doação", + "resumeDonation": "Resumir Doação", + "donationName": "Nome da doação", + "donationAmount": "Quantia de Doação", + "makeChanges": "Fazer Alterações", + "cancel": "Cancelar", + "yes": "sim", + "no": "Não", + "editDonationConfirmation": "Editar Doação", + "editDonationDescription": "Pode editar as seguintes opções:", + "pauseDonationConfirmation": "Pausar Doação", + "pauseDonationDescription": "Pode recomeçar depois de fazer uma pausa, ao reiniciar.", + "pauseUntilResume": "Pausa até eu retomar", + "pausedUntilResumed": "Pausado até ser retomado", + "pausedUntil": "Pausado até", + "pauseUntilDate": "Pausa até a data selecionada", + "reactivateDonationConfirmation": "Reativar Doação", + "reactivateDonationDescription": "A sua doação será reativada e será feita na data {{currentPeriodEnds}}", + "cancelDonationConfirmation": "Cancelar Doação", + "cancelDonationDescription": "Uma vez cancelada a doação, esta não pode ser reiniciada.", + "cancelDonationPaypalDescription": "Esta doação será cancelada imediatamente, não podendo ser reiniciada.", + "cancelledOn": "Cancelado em", + "willBeCancelledOn": "Será cancelado em", + "nextOn": "A seguir em", + "download": "Download", + "donations": "Doações", + "in-progress": "Em andamento", + "donation-in-progress": "Em andamento", + "donation-tree-cash": "TreeCash", + "donation-success": "Com sucesso", + "cancelled": "Cancelado", + "card": "Cartão", + "sepa": "SEPA", + "success": "Com sucesso", + "paid": "Com sucesso", + "initiated": "Iniciado", + "failed": "Falhou", + "pending": "Pendente", + "refunded": "Reembolsado", + "referred": "Referido", + "in-dispute": "Em Disputa", + "dispute-lost": "Disputa perdida", + "nameForest": "A Floresta de {{name}}", + "taxReceipt": "Recibo do imposto", + "history": "História", + "recurrency": "Doações Recorrentes", + "new": "Novo", + "beta": "Beta", + "date": "Data", + "treemapper": "TreeMapper", + "register-trees": "Registrar Árvores", + "manage-projects": "Gerenciar Projetos", + "app-payouts": "Pagamentos do aplicativo", + "app-payout-open": "Pagamentos Abertos", + "app-payout-pending": "Pagamentos Pendentes", + "app-payout-assigned": "Pagamentos Atribuídos", + "app-payout-complete": "Pagamentos Concluídos", + "app-payout": "Pagamento do aplicativo", + "reference": "Referência", + "fee": "Tarifa", + "net": "NET", + "status": "Estado", + "paymentDate": "Data de Pagamento", + "bankName": "Nome do Banco", + "accountHolder": "Titular da Conta", + "aba": "ABA", + "bic": "BIC", + "iban": "IBAN", + "swift": "SWIFT", + "isDefault": "Conta padrão", + "bankAccountCreated": "Conta Bancária Criada", + "bankAccountUpdated": "Conta Bancária Atualizada", + "donation-all": "Doações", + "donation-canceled": "Cancelado", + "payout-all": "Pagamentos", + "payout-action-required": "Ação Requerida", + "payout-pending": "pendente", + "payout-completed": "Completo", + "donorName": "Nome do doador", + "paidAmount": "Quantia paga", + "projectGuid": "GUID do projeto", + "totalAmount": "Quantidade total", + "disputeFee": "Taxa de Disputa", + "planetFee": "Taxa Planet", + "transactionFee": "Taxa de Transação", + "transferFee": "Taxa de transferência", + "open": "Aberto", + "downloads": "Downloads", + "account": "Conta", + "loadMore": "Carregar mais", + "setTarget": "Estabelecer Meta", + "targetSave": "Salvar", + "targetErrorMessage": "O número deve ser positivo ou maior que zero", + "taxDeductibleReceipt": "Taxa Dedutível de Imposto", + "giftCertificate": "Certificado do presente", + "paypal-paypal": "Paypal", + "stripe-": "Stripe", + "unknown-method": "Desconhecido", + "stripe-sofort": "Sofort (Stripe)", + "tree-cash-tree-cash": "TreeCash", + "planet-cash-planet-cash": "PlanetCash", + "stripe-card": "Cartão de Crédito/Débito", + "stripe-giropay": "GiroPay (Stripe)", + "action-required": "Ação Requerida", + "completed": "Concluído", + "donationsSubTitle": "Gerencie todas as suas doações e pagamentos de um só lugar.", + "recurrencySubTitle": "Gerenciar todas as suas Doações Recorrentes em um só lugar.", + "payments": "Pagamentos", + "stripe-sepa_debit": "SEPA (Stripe)", + "sepa_debit": "SEPA (Stripe)", + "offline-offline": "Offline", + "profile": "Perfil", + "projects": "Projetos", + "settings": "Configurações", + "editProfile": "Editar Perfil", + "deleteProfile": "Excluir Perfil", + "widgets": "Widgets", + "pauseNote": "Nota: É possível selecionar uma data para além do final do período atual.", + "cancelImmediately": "Cancelar imediatamente", + "cancelOnSelectedDate": "Selecionar Data de cancelamento", + "conservation-donation": "Doação de Conservação", + "funds-donation": "Doação", + "bouquet-donation": "Doação Bouquet", + "transferDetails": "Detalhes da transferência", + "beneficiary": "Beneficiário", + "donationNote": { + "offline-offline": "As transferências bancárias normalmente demoram 1-5 dias úteis para chegar até nós. Assim que a sua transferência chegar, enviaremos um e-mail de confirmação com os seus recibos (e o seu certificado).", + "stripe-sepa_debit": "Os pagamentos SEPA demoram 2-14 dias úteis (normalmente 3-5 dias). Assim que a sua transferência chegar, enviaremos um e-mail de confirmação com os seus recibos (e o seu certificado).", + "stripe-sofort": "Os pagamentos SOFORT demoram 2-14 dias úteis (geralmente 2-3 dias). Assim que a sua transferência chegar, enviaremos um e-mail de confirmação com os seus recibos (e o seu certificado).", + "in-dispute": "A sua transferência foi contestada. Normalmente $7 - $15,00 de taxa de disputa é cobrada pelos Provedores de Pagamento. Por favor contacte support@plant-for-the-planet.org para mais detalhes." + }, + "active": "ativo", + "canceled": "Cancelado", + "incomplete": "pendente", + "incomplete_expired": "Cancelado", + "past_due": "Vencido", + "unpaid": "não pago", + "trialing": "Ativo", + "paused": "pausado", + "plantLocations": "Locais de plantio", + "mySpecies": "Minhas espécies", + "import": "Importar", + "pausingDonation": "Pausa na doação", + "cancellingDonation": "Cancelamento da doação", + "reactivatingDonation": "Reativação da doação", + "editingDonation": "Edição de doações", + "noteToWait": "Nota: Demorará 5-10 minutos para atualizar a Doação Recorrente", + "apiKey": "Chave API", + "apiKeyMessage1": "A API Key é como uma senha digital que permite agir como o seu perfil em qualquer aplicativo. Também permite aplicativos doarem em seu nome, utilizar PlanetCash e visualizar transações.", + "apiKeyMessage2": "Uma vez gerada uma chave API, será necessária uma autenticação de duas etapas para o seu login. Isto poderá ser configurado na próxima vez que iniciar a sessão.", + "apiKeyMessage3": "A regeneração de uma chave API irá invalidar imediatamente a sua chave API existente.", + "regenerateKey": "Regenerar chave" + } } \ No newline at end of file diff --git a/public/static/locales/pt-BR/planet.json b/public/static/locales/pt-BR/planet.json index 73260b7a1a..9e0e5fd484 100644 --- a/public/static/locales/pt-BR/planet.json +++ b/public/static/locales/pt-BR/planet.json @@ -1,14 +1,16 @@ { - "treesDonated": "Árvores doadas desde 2019", - "plantedByTPO": "Plantado pelas {{projects}}+ organizações participantes", - "plantedGlobally": "Árvores registradas na plataforma desde 2006", - "forestLoss": "Perda florestal líquida nos últimos 12 meses", - "estimateOf": "Estimativa da perda anual de árvores por", - "globallySince": "Número de árvores auto-reportadas à Campanha do Bilhão de Árvores (posteriormente Campanha do Trilhão de Árvores) desde a sua fundação pelo PNUMA em 2006", - "restoreTrees": "Como é que restauramos um trilião de árvores?", - "watchVideo": "Ver vídeo", - "selectProjects": "Como selecionamos os projetos", - "learnMore": "Saiba mais", - "treesDonatedDescription": "Todas as doações de árvores processadas pela Plant-for-the-Planet desde 2019. Inclui árvores doadas diretamente através de nossas aplicações, assim como grandes doações privadas e corporativas. Estas doações não foram todas para projectos geridos diretamente pela Plant-for-the-Planet, mas para todas as organizações de restauração participantes. Algumas árvores doadas podem ainda não ter sido plantadas.", - "treesPlantedDescription": "Todas as árvores doadas através de Plant-for-the-Planet e outras árvores reportadas como plantadas pelas organizações de restauração participantes." + "Planet": { + "treesDonated": "Árvores doadas desde 2019", + "plantedByTPO": "Plantado pelas {{projects}}+ organizações participantes", + "plantedGlobally": "Árvores registradas na plataforma desde 2006", + "forestLoss": "Perda florestal líquida nos últimos 12 meses", + "estimateOf": "Estimativa da perda anual de árvores por", + "globallySince": "Número de árvores auto-reportadas à Campanha do Bilhão de Árvores (posteriormente Campanha do Trilhão de Árvores) desde a sua fundação pelo PNUMA em 2006", + "restoreTrees": "Como é que restauramos um trilião de árvores?", + "watchVideo": "Ver vídeo", + "selectProjects": "Como selecionamos os projetos", + "learnMore": "Saiba mais", + "treesDonatedDescription": "Todas as doações de árvores processadas pela Plant-for-the-Planet desde 2019. Inclui árvores doadas diretamente através de nossas aplicações, assim como grandes doações privadas e corporativas. Estas doações não foram todas para projectos geridos diretamente pela Plant-for-the-Planet, mas para todas as organizações de restauração participantes. Algumas árvores doadas podem ainda não ter sido plantadas.", + "treesPlantedDescription": "Todas as árvores doadas através de Plant-for-the-Planet e outras árvores reportadas como plantadas pelas organizações de restauração participantes." + } } \ No newline at end of file diff --git a/public/static/locales/pt-BR/planetcash.json b/public/static/locales/pt-BR/planetcash.json index 6f31cf5a2e..d716109ddb 100644 --- a/public/static/locales/pt-BR/planetcash.json +++ b/public/static/locales/pt-BR/planetcash.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "Planetcash": {} +} \ No newline at end of file diff --git a/public/static/locales/pt-BR/redeem.json b/public/static/locales/pt-BR/redeem.json index f2083ae9bf..40d99353a4 100644 --- a/public/static/locales/pt-BR/redeem.json +++ b/public/static/locales/pt-BR/redeem.json @@ -1,9 +1,11 @@ { - "congratulations": "Parabéns!", - "addToMyTrees": "Adicionar às minhas árvores", - "validateCode": "Validar Código", - "enterRedeemCode": "Por favor, digite um código para resgatar", - "validating": "Validação", - "invalidType": "Tipo inválido, por favor verifique o link novamente", - "redeemDescription": "Resgate o seu voucher de árvore e outros códigos." + "Redeem": { + "congratulations": "Parabéns!", + "addToMyTrees": "Adicionar às minhas árvores", + "validateCode": "Validar Código", + "enterRedeemCode": "Por favor, digite um código para resgatar", + "validating": "Validação", + "invalidType": "Tipo inválido, por favor verifique o link novamente", + "redeemDescription": "Resgate o seu voucher de árvore e outros códigos." + } } \ No newline at end of file diff --git a/public/static/locales/pt-BR/registerTrees.json b/public/static/locales/pt-BR/registerTrees.json index 12b94ff08a..af6809b83d 100644 --- a/public/static/locales/pt-BR/registerTrees.json +++ b/public/static/locales/pt-BR/registerTrees.json @@ -1,11 +1,13 @@ { - "selectLocationMap": "Seleccione a localização no mapa", - "requiredNumberOfTrees": "Número de Árvores necessárias", - "numberOfTrees": "Número de Árvores", - "datePlanted": "Data Plantada", - "treeSpecies": "Espécies de Árvores", - "speciesRequired": "Espécie é necessária", - "drawPolygonMap": "Desenhe um polígono no mapa", - "clickMapMark": "Clique no mapa para marcar uma localização", - "next": "Próximo" + "RegisterTrees": { + "selectLocationMap": "Seleccione a localização no mapa", + "requiredNumberOfTrees": "Número de Árvores necessárias", + "numberOfTrees": "Número de Árvores", + "datePlanted": "Data Plantada", + "treeSpecies": "Espécies de Árvores", + "speciesRequired": "Espécie é necessária", + "drawPolygonMap": "Desenhe um polígono no mapa", + "clickMapMark": "Clique no mapa para marcar uma localização", + "next": "Próximo" + } } \ No newline at end of file diff --git a/public/static/locales/pt-BR/tenants.json b/public/static/locales/pt-BR/tenants.json index 24fff33f91..be987be0aa 100644 --- a/public/static/locales/pt-BR/tenants.json +++ b/public/static/locales/pt-BR/tenants.json @@ -1,51 +1,53 @@ { - "nitrosb": { - "title": "Plante Árvores com Nitro Snowboards", - "description": "Nitro Snowboards estabelecem um objetivo para apoiar e mobilizar a conservação, restauração e crescimento de uma floresta." - }, - "energizer": { - "title": "Energizer ❤️ Baeume", - "description": "\"O \"Gas Richtige tun\" é para uns der zentrale Leitgedanke, um dem wir unser Handeln ausrichten. Se o seu conteúdo é muito simples, o Batterie im Jahre 1989 gelingt es uns, unsere Batterien immer weiter zu verbessern, langlebiger und damit umweltfreundlicher zu machen. Não se trata de uma parceria com a Plant-for-the-Planet, mas sim de uma parceria com a Tradição, pois é uma forma de se conhecer e de se fazer uma gestão. Gemeinsam pflanzen wir Bäume und veranstalten Bildungsprogramme für Kinder und Jugendliche, ein Bewusstsein für globale Gerechtigkeit und die Klimakrise zu schaffen. Einbinden wollen wir dabei auch unsere Konsumenten und den Handel, denn nur gemeinsam kann diese zentrale Herausforderung unserer Zeit gelöst werden. Bist du dabei?" - }, - "senatDerWirtschaft": { - "title": "Senat Der Wirtschaft", - "description": "Die Klimakrise ist eine der größten gesellschaftlichen Herausforderungen und es muss sich etwändern. Der Senat der Wirtschaft ist eine Wertegemeinschaft. Wir stehen für eine motivierende und verbindende Vision, verknüpft mit praktischer Umsetzung. Deshalb pflanzen immer mehr unsererer Mitglieder Wälder, zusammen mit ihren Mitarbeiter, Geschäftspartnern und Kunden. Jeder gepflanzte Baum bindet CO2 und schenkt uns Menschen wertvolle Zeit. Diese Zeit werden wir nutzen, um unsere CO2-Emissionen massiv zu reduzieren. Versprochen!" - }, - "pampers": { - "title": "Pampers ❤️ Wald", - "descriptionTitle": "Bäume pflanzen für eine nachhaltigere Zukunft", - "description": "Gemeinsam mit euch euch wollen wir dabei helfen, unseren Kleinsten eine bessere Zukunft zu ermöglichen. Deshalb arbeiten wir mit der Kinder- und Jugendorganisation Plant-for-the-Planet an einem tollen Projekt: dem Pampers Wald. Pro verkaufter Packung Pampers Windeln spenden wir 0,01 EUR/CHF und insgesamt bis zu 100.000 EUR an Plant-for-the-Planet. Unser Ziel: 60.000 Bäume für eine nachhaltige Wiederaufforstung zu pflanzen. Auf der Karte seht ihr, wo das Projekt realisiert wird. Jetzt anschauen und mithelfen." - }, - "interactClub": { - "title": "Interact Club Wald", - "description": "Bäume pflanzen ist ein Generationenverbindendes, friedensstiftendes Projekt das uns Menschen und besonders jungen Menschen hoffnung gibt und auch Mut. Mut brauchen wir, um gemeinsam in dieser Klimakrise Lösungen beherzt anzupacken. Unser Ziel ist es als Kinder, Jugendliche und junge Erwachsene die Welt zu mobilisieren 1.000 Milliarden Bäume zu pflanzen damit diese Bäume uns wertvolle Zeit, etwa 15 Jahre, schenken können, die unbedingt nutzen sollten, um unsere CO2-Emissionen zu reduzieren. A Wiederaufforstung, global skaliert, kann so zum größten Konjunkturprogramm besonders für Länder des Globalen Südens werden. A Alemanha, com mais de 1.000 milhões de dólares em todo o mundo, tem uma grande variedade de países, como a África, o resto da América Latina e a Europa, e a Holanda, e a Alemanha, com uma grande variedade de países. A cidade de Arbeitsplätze, o intestino para a Arteevielfalt e as ligações das Treibhausgas CO2. Die neue Area of Focus der Rotarischen Familie lautet: Umwelt. Wir fangen jetzt an unseren Beitrag zu leisten. Pflanz gemeinsam mit uns Bäume." - }, - "culchacandela": { - "title": "Culcha Candela X Plant-for-the-Planet", - "description": "

Wir pflanzen Bäume für ein besseres Weltklima, um uns so wichtige Zeit im Wettlauf gegen die Klimakrise zu verschaffen. Pflanz’ hier mit! 
…und beim Hören des neuen „Hamma (INVCTS &Dorfkind J-P Remix)” auf sämtlichen Musik Streaming-Plattformen.
Wir spenden die kompletten Streaming Einnahmen des Songs an Plant-for-the-Planet! Powered by music-for-nature!

" - }, - "lacoqueta": { - "title": "Plante Árvores com La Coqueta", - "description": "Ver seus próprios filhos crescerem e se interessarem cada vez mais pela crise climática inspirou Célia a usar sua marca como uma plataforma para uma mudança positiva. Depois de aprender que as árvores são o meio mais econômico e eficaz de capturar CO2, permitindo mais tempo para reduzir as emissões de gases de efeito estufa a zero e mitigar a crise climática, eles decidiram embarcar nesta emocionante jornada com a Plant-for-the-Planet. Você também pode fazer parte dessa jornada e doar algumas árvores - em Granada, a cidade natal de Celia, ou em outras áreas ao redor do mundo." - }, - "xiting": { - "title": "Plantando árvores - Para um futuro verde", - "description": "Com esta plataforma, nós da Xiting gostaríamos de dar aos nossos parceiros, clientes e apoiantes a oportunidade de plantar árvores rápida e facilmente e assim unir o nosso compromisso com a proteção climática. Estamos convencidos que a proteção climática só faz sentido se for apoiada por um vasto público e trabalhamos em conjunto para um futuro sustentável e verde. As árvores são o meio ideal e mais natural para isso, filtrando o CO2 do ar. Plante conosco agora! Desde 2019, Xiting tem buscado com sucesso o objetivo de operar como uma empresa 100% neutra em CO2. Você pode encontrar uma visão do nosso compromisso, bem como das parcerias climáticas existentes aqui ." - }, - "ulmpflanzt": { - "title": "Ulm pflanzt Bäume", - "description": "124.781 Bäume - für jede/n Ulmer Bürger/in einen. Das ist das Ziel von \"Ulm pflanzt Bäume\" - der Klima-Initiative von Plant-for-the-Planet , dem unw (Ulmer Initiativkreis nachhaltige Wirtschaftsentwicklung e. V.), den Ulmer Unternehmen pervormance international, Trivis und der Volksbank Ulm sowie der Stadt Ulm und der lokalen agenda ulm 21. Pflanzen auch Sie mit und helfen Sie, das größte Aufforstungsprojekt der Menschheitsgeschichte zu realisieren. Für Sie - und für uns alle!" - }, - "sitex": { - "title": "Sitex ❤️ Wald", - "description": "Die Klimarettung ist eine globale Aufgabe und lässt sich nur bewältigen, wenn wir alle zusammen vorgehen. Wir möchten unseren Kindern und Enkelkindern einen intakten Planeten hinterlassen. Darum unterstützen wir Plant-for-the-Planet und die Methode des Bäume-Pflanzens, um möglichst viel CO² aus der Atmosphäre zu binden. Unser Beitrag in der Sitex-Gruppe: durch kontinuierliches Pflanzen spenden wir mindestens 500.000 Bäume bis 2027." - }, - "3pleset": { - "title": "Alife & Kickin ❤️ Bäume", - "description": "

#WEAREALIFE Schreibfehler? Nö, Absicht!
Ganz nach dem Motto CHOOSE LIFE seid ihr jetzt dran.
Denn abort könnt ihr mit Alife & Kickin und der Organisation Plant-for-the-Planet Bäume pflanzen und Leben schenken. Erschafft mit uns den Alife & Kickin Wald. Wie?
Pro Onlinebestellung pflanzen wir in den nächsten 2 Monaten einen Baum mit Plant-for-the-Planet. Unser Ziel: 50.000 Bäume für eine nachhaltige Wiederaufforstung. Wo?
Auf der Karte seht ihr, wo unser Alife & Kickin Wald realisiert wird. Jetzt anschauen, mithelfen und noch mehr Leben schenken. ESCOLHA A VIDA.
UM PEDIDO UMA ÁRVORE
#WEAREALIFE

" - }, - "weareams": { - "title": "AMS ❤️ Árvores", - "description": "Em 2021 a AMS junta-se à TrillionTreeCampaign e juntamente com a Plant-for-the-Planet começamos a retribuir à natureza. Utilizaremos as oportunidades que obtivermos para promover a sustentabilidade na nossa cadeia de fornecimento e através das nossas relações com clientes e parceiros comerciais. Junte-se a nós e #StopTalkingStartPlanting!" + "Tenants": { + "nitrosb": { + "title": "Plante Árvores com Nitro Snowboards", + "description": "Nitro Snowboards estabelecem um objetivo para apoiar e mobilizar a conservação, restauração e crescimento de uma floresta." + }, + "energizer": { + "title": "Energizer ❤️ Baeume", + "description": "\"O \"Gas Richtige tun\" é para uns der zentrale Leitgedanke, um dem wir unser Handeln ausrichten. Se o seu conteúdo é muito simples, o Batterie im Jahre 1989 gelingt es uns, unsere Batterien immer weiter zu verbessern, langlebiger und damit umweltfreundlicher zu machen. Não se trata de uma parceria com a Plant-for-the-Planet, mas sim de uma parceria com a Tradição, pois é uma forma de se conhecer e de se fazer uma gestão. Gemeinsam pflanzen wir Bäume und veranstalten Bildungsprogramme für Kinder und Jugendliche, ein Bewusstsein für globale Gerechtigkeit und die Klimakrise zu schaffen. Einbinden wollen wir dabei auch unsere Konsumenten und den Handel, denn nur gemeinsam kann diese zentrale Herausforderung unserer Zeit gelöst werden. Bist du dabei?" + }, + "senatDerWirtschaft": { + "title": "Senat Der Wirtschaft", + "description": "Die Klimakrise ist eine der größten gesellschaftlichen Herausforderungen und es muss sich etwändern. Der Senat der Wirtschaft ist eine Wertegemeinschaft. Wir stehen für eine motivierende und verbindende Vision, verknüpft mit praktischer Umsetzung. Deshalb pflanzen immer mehr unsererer Mitglieder Wälder, zusammen mit ihren Mitarbeiter, Geschäftspartnern und Kunden. Jeder gepflanzte Baum bindet CO2 und schenkt uns Menschen wertvolle Zeit. Diese Zeit werden wir nutzen, um unsere CO2-Emissionen massiv zu reduzieren. Versprochen!" + }, + "pampers": { + "title": "Pampers ❤️ Wald", + "descriptionTitle": "Bäume pflanzen für eine nachhaltigere Zukunft", + "description": "Gemeinsam mit euch euch wollen wir dabei helfen, unseren Kleinsten eine bessere Zukunft zu ermöglichen. Deshalb arbeiten wir mit der Kinder- und Jugendorganisation Plant-for-the-Planet an einem tollen Projekt: dem Pampers Wald. Pro verkaufter Packung Pampers Windeln spenden wir 0,01 EUR/CHF und insgesamt bis zu 100.000 EUR an Plant-for-the-Planet. Unser Ziel: 60.000 Bäume für eine nachhaltige Wiederaufforstung zu pflanzen. Auf der Karte seht ihr, wo das Projekt realisiert wird. Jetzt anschauen und mithelfen." + }, + "interactClub": { + "title": "Interact Club Wald", + "description": "Bäume pflanzen ist ein Generationenverbindendes, friedensstiftendes Projekt das uns Menschen und besonders jungen Menschen hoffnung gibt und auch Mut. Mut brauchen wir, um gemeinsam in dieser Klimakrise Lösungen beherzt anzupacken. Unser Ziel ist es als Kinder, Jugendliche und junge Erwachsene die Welt zu mobilisieren 1.000 Milliarden Bäume zu pflanzen damit diese Bäume uns wertvolle Zeit, etwa 15 Jahre, schenken können, die unbedingt nutzen sollten, um unsere CO2-Emissionen zu reduzieren. A Wiederaufforstung, global skaliert, kann so zum größten Konjunkturprogramm besonders für Länder des Globalen Südens werden. A Alemanha, com mais de 1.000 milhões de dólares em todo o mundo, tem uma grande variedade de países, como a África, o resto da América Latina e a Europa, e a Holanda, e a Alemanha, com uma grande variedade de países. A cidade de Arbeitsplätze, o intestino para a Arteevielfalt e as ligações das Treibhausgas CO2. Die neue Area of Focus der Rotarischen Familie lautet: Umwelt. Wir fangen jetzt an unseren Beitrag zu leisten. Pflanz gemeinsam mit uns Bäume." + }, + "culchacandela": { + "title": "Culcha Candela X Plant-for-the-Planet", + "description": "

Wir pflanzen Bäume für ein besseres Weltklima, um uns so wichtige Zeit im Wettlauf gegen die Klimakrise zu verschaffen. Pflanz’ hier mit! 
…und beim Hören des neuen „Hamma (INVCTS &Dorfkind J-P Remix)” auf sämtlichen Musik Streaming-Plattformen.
Wir spenden die kompletten Streaming Einnahmen des Songs an Plant-for-the-Planet! Powered by music-for-nature!

" + }, + "lacoqueta": { + "title": "Plante Árvores com La Coqueta", + "description": "Ver seus próprios filhos crescerem e se interessarem cada vez mais pela crise climática inspirou Célia a usar sua marca como uma plataforma para uma mudança positiva. Depois de aprender que as árvores são o meio mais econômico e eficaz de capturar CO2, permitindo mais tempo para reduzir as emissões de gases de efeito estufa a zero e mitigar a crise climática, eles decidiram embarcar nesta emocionante jornada com a Plant-for-the-Planet. Você também pode fazer parte dessa jornada e doar algumas árvores - em Granada, a cidade natal de Celia, ou em outras áreas ao redor do mundo." + }, + "xiting": { + "title": "Plantando árvores - Para um futuro verde", + "description": "Com esta plataforma, nós da Xiting gostaríamos de dar aos nossos parceiros, clientes e apoiantes a oportunidade de plantar árvores rápida e facilmente e assim unir o nosso compromisso com a proteção climática. Estamos convencidos que a proteção climática só faz sentido se for apoiada por um vasto público e trabalhamos em conjunto para um futuro sustentável e verde. As árvores são o meio ideal e mais natural para isso, filtrando o CO2 do ar. Plante conosco agora! Desde 2019, Xiting tem buscado com sucesso o objetivo de operar como uma empresa 100% neutra em CO2. Você pode encontrar uma visão do nosso compromisso, bem como das parcerias climáticas existentes aqui ." + }, + "ulmpflanzt": { + "title": "Ulm pflanzt Bäume", + "description": "124.781 Bäume - für jede/n Ulmer Bürger/in einen. Das ist das Ziel von \"Ulm pflanzt Bäume\" - der Klima-Initiative von Plant-for-the-Planet , dem unw (Ulmer Initiativkreis nachhaltige Wirtschaftsentwicklung e. V.), den Ulmer Unternehmen pervormance international, Trivis und der Volksbank Ulm sowie der Stadt Ulm und der lokalen agenda ulm 21. Pflanzen auch Sie mit und helfen Sie, das größte Aufforstungsprojekt der Menschheitsgeschichte zu realisieren. Für Sie - und für uns alle!" + }, + "sitex": { + "title": "Sitex ❤️ Wald", + "description": "Die Klimarettung ist eine globale Aufgabe und lässt sich nur bewältigen, wenn wir alle zusammen vorgehen. Wir möchten unseren Kindern und Enkelkindern einen intakten Planeten hinterlassen. Darum unterstützen wir Plant-for-the-Planet und die Methode des Bäume-Pflanzens, um möglichst viel CO² aus der Atmosphäre zu binden. Unser Beitrag in der Sitex-Gruppe: durch kontinuierliches Pflanzen spenden wir mindestens 500.000 Bäume bis 2027." + }, + "3pleset": { + "title": "Alife & Kickin ❤️ Bäume", + "description": "

#WEAREALIFE Schreibfehler? Nö, Absicht!
Ganz nach dem Motto CHOOSE LIFE seid ihr jetzt dran.
Denn abort könnt ihr mit Alife & Kickin und der Organisation Plant-for-the-Planet Bäume pflanzen und Leben schenken. Erschafft mit uns den Alife & Kickin Wald. Wie?
Pro Onlinebestellung pflanzen wir in den nächsten 2 Monaten einen Baum mit Plant-for-the-Planet. Unser Ziel: 50.000 Bäume für eine nachhaltige Wiederaufforstung. Wo?
Auf der Karte seht ihr, wo unser Alife & Kickin Wald realisiert wird. Jetzt anschauen, mithelfen und noch mehr Leben schenken. ESCOLHA A VIDA.
UM PEDIDO UMA ÁRVORE
#WEAREALIFE

" + }, + "weareams": { + "title": "AMS ❤️ Árvores", + "description": "Em 2021 a AMS junta-se à TrillionTreeCampaign e juntamente com a Plant-for-the-Planet começamos a retribuir à natureza. Utilizaremos as oportunidades que obtivermos para promover a sustentabilidade na nossa cadeia de fornecimento e através das nossas relações com clientes e parceiros comerciais. Junte-se a nós e #StopTalkingStartPlanting!" + } } } \ No newline at end of file diff --git a/public/static/locales/pt-BR/treemapper.json b/public/static/locales/pt-BR/treemapper.json index 8302f602f7..b7d81aa351 100644 --- a/public/static/locales/pt-BR/treemapper.json +++ b/public/static/locales/pt-BR/treemapper.json @@ -1,62 +1,64 @@ { - "trees": "Árvores", - "tree": "Árvore", - "on": "em", - "partial": "Parcial", - "complete": "Completo", - "on-site": "No local", - "off-site": "Fora do local", - "captureMode": "Modo de Captura", - "captureStatus": "Status da captura", - "coordinates": "Coordenadas", - "guid": "GUID", - "height": "Altura", - "width": "Largura", - "plantDate": "Data do Plantio", - "registrationDate": "Data de registro", - "plantProject": "Projeto de Plantio", - "species": "Espécie", - "sampleTrees": "Árvore de Amostra", - "loadMore": "Carregar mais", - "treeMapper": "TreeMapper", - "cm": "cm", - "m": "m", - "plantingLocation": "Local de plantio", - "reviewAndSubmit": "Rever e Submeter", - "sampleTree": "Amostra da árvore #{{number}}", - "import": "Importar", - "editor": "Editor", - "draw": "Desenhar", - "addAnotherSpecies": "Adicionar Outra Espécie", - "continue": "Continuar", - "downloadCSVTemplate": "Fazer download do modelo CSV", - "treeTag": "Etiqueta da árvore", - "diameter": "Diâmetro", - "latitude": "Latitude", - "longitude": "Longitude", - "addAnotherSampleTree": "Adicionar outra árvore de amostra", - "skip": "Pular", - "treeSpecies": "Espécies de Árvores", - "plantingDate": "Data do Plantio", - "summary": "Resumo", - "reviewSubmitDescription": "Reveja os dados que acabou de carregar e submeta-os ao TreeMapper.", - "submittedSuccess": "Submetido com sucesso", - "submittedSuccessDescription": "As suas árvores foram submetidas ao TreeMapper. Você pode vê-las nos locais das suas plantios ou no app TreeMapper.", - "myPlantLocations": "Os meus locais de plantio", - "submitted": "Submetido", - "projectRequired": "Projeto pedido", - "geoJsonError": "Formato GeoJSON/KML não suportado", - "atLeastOneSpeciesRequired": "É necessária pelo menos uma espécie", - "treesRequired": "Contagem de árvores necessária", - "count": "Contar", - "addSampleTree": "Adicionar árvore de amostra", - "uploadFile": "Carregar arquivo", - "fileFormatKML": "Arquivo (geojson/kml)", - "importData": "Importar dados", - "importExplanation": "Aqui pode importar dados do TreeMapper, que serão marcados como \"externos\" (não \"fora do local/off-site\", por favor utilizar o app para isso). Para coordenadas de locais de plantio aceitamos *.kml ou geojson, para árvores de amostra (opcional) *.csv (o modelo é fornecido no passo 2).", - "downloadExplanation": "Faça o download do seguinte modelo CSV para importar dados de árvore de amostra no formato designado. Use um editor simples para editar o arquivo. A segunda e terceira linhas são detalhes de formatação e um exemplo e devem ser eliminados.", - "importCSV": "Importar CSV", - "fileFormatCSV": "Ficheiro (csv)", - "aliases": "Apelidos", - "external": "Externo" + "Treemapper": { + "trees": "Árvores", + "tree": "Árvore", + "on": "em", + "partial": "Parcial", + "complete": "Completo", + "on-site": "No local", + "off-site": "Fora do local", + "captureMode": "Modo de Captura", + "captureStatus": "Status da captura", + "coordinates": "Coordenadas", + "guid": "GUID", + "height": "Altura", + "width": "Largura", + "plantDate": "Data do Plantio", + "registrationDate": "Data de registro", + "plantProject": "Projeto de Plantio", + "species": "Espécie", + "sampleTrees": "Árvore de Amostra", + "loadMore": "Carregar mais", + "treeMapper": "TreeMapper", + "cm": "cm", + "m": "m", + "plantingLocation": "Local de plantio", + "reviewAndSubmit": "Rever e Submeter", + "sampleTree": "Amostra da árvore #{{number}}", + "import": "Importar", + "editor": "Editor", + "draw": "Desenhar", + "addAnotherSpecies": "Adicionar Outra Espécie", + "continue": "Continuar", + "downloadCSVTemplate": "Fazer download do modelo CSV", + "treeTag": "Etiqueta da árvore", + "diameter": "Diâmetro", + "latitude": "Latitude", + "longitude": "Longitude", + "addAnotherSampleTree": "Adicionar outra árvore de amostra", + "skip": "Pular", + "treeSpecies": "Espécies de Árvores", + "plantingDate": "Data do Plantio", + "summary": "Resumo", + "reviewSubmitDescription": "Reveja os dados que acabou de carregar e submeta-os ao TreeMapper.", + "submittedSuccess": "Submetido com sucesso", + "submittedSuccessDescription": "As suas árvores foram submetidas ao TreeMapper. Você pode vê-las nos locais das suas plantios ou no app TreeMapper.", + "myPlantLocations": "Os meus locais de plantio", + "submitted": "Submetido", + "projectRequired": "Projeto pedido", + "geoJsonError": "Formato GeoJSON/KML não suportado", + "atLeastOneSpeciesRequired": "É necessária pelo menos uma espécie", + "treesRequired": "Contagem de árvores necessária", + "count": "Contar", + "addSampleTree": "Adicionar árvore de amostra", + "uploadFile": "Carregar arquivo", + "fileFormatKML": "Arquivo (geojson/kml)", + "importData": "Importar dados", + "importExplanation": "Aqui pode importar dados do TreeMapper, que serão marcados como \"externos\" (não \"fora do local/off-site\", por favor utilizar o app para isso). Para coordenadas de locais de plantio aceitamos *.kml ou geojson, para árvores de amostra (opcional) *.csv (o modelo é fornecido no passo 2).", + "downloadExplanation": "Faça o download do seguinte modelo CSV para importar dados de árvore de amostra no formato designado. Use um editor simples para editar o arquivo. A segunda e terceira linhas são detalhes de formatação e um exemplo e devem ser eliminados.", + "importCSV": "Importar CSV", + "fileFormatCSV": "Ficheiro (csv)", + "aliases": "Apelidos", + "external": "Externo" + } } \ No newline at end of file diff --git a/public/static/locales/pt-BR/treemapperAnalytics.json b/public/static/locales/pt-BR/treemapperAnalytics.json index 6f31cf5a2e..7e8da06585 100644 --- a/public/static/locales/pt-BR/treemapperAnalytics.json +++ b/public/static/locales/pt-BR/treemapperAnalytics.json @@ -1 +1,3 @@ -{ } \ No newline at end of file +{ + "TreemapperAnalytics": {} +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index b3de4c1950..24dd1f65a8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -25,6 +25,7 @@ "./src/**/*", "tenant.config.ts", "public/assets", - "folderCrawler.js" + "folderCrawler.js", + "modifyJson.js" ] } From 5a4c51086aa778e1689df947334cfbc6897ef233 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Fri, 8 Mar 2024 18:59:25 +0530 Subject: [PATCH 26/70] refactor: updates localization strings as per next-intl --- public/static/locales/cs/bulkCodes.json | 28 ++++++++-------- public/static/locales/cs/common.json | 13 ++++---- public/static/locales/cs/donate.json | 22 ++++++------- public/static/locales/cs/editProfile.json | 8 ++--- public/static/locales/cs/managePayouts.json | 14 ++++---- public/static/locales/cs/manageProjects.json | 4 +-- public/static/locales/cs/maps.json | 4 +-- public/static/locales/cs/me.json | 14 ++++---- public/static/locales/cs/planet.json | 4 +-- public/static/locales/cs/planetcash.json | 6 ++-- public/static/locales/cs/treemapper.json | 4 +-- public/static/locales/de/bulkCodes.json | 20 ++++++------ public/static/locales/es/common.json | 13 ++++---- public/static/locales/es/donate.json | 30 ++++++++--------- public/static/locales/es/editProfile.json | 8 ++--- public/static/locales/es/login.json | 8 ++--- public/static/locales/es/maps.json | 4 +-- public/static/locales/es/me.json | 10 +++--- public/static/locales/es/planet.json | 4 +-- public/static/locales/fr/common.json | 13 ++++---- public/static/locales/fr/donate.json | 32 +++++++++---------- public/static/locales/fr/editProfile.json | 8 ++--- public/static/locales/fr/login.json | 8 ++--- public/static/locales/fr/maps.json | 4 +-- public/static/locales/fr/me.json | 10 +++--- public/static/locales/fr/planet.json | 4 +-- public/static/locales/fr/redeem.json | 6 ++-- public/static/locales/it/common.json | 13 ++++---- public/static/locales/it/donate.json | 32 +++++++++---------- public/static/locales/it/editProfile.json | 8 ++--- public/static/locales/it/maps.json | 4 +-- public/static/locales/it/me.json | 10 +++--- public/static/locales/it/planet.json | 4 +-- public/static/locales/pt-BR/common.json | 13 ++++---- public/static/locales/pt-BR/donate.json | 32 +++++++++---------- public/static/locales/pt-BR/editProfile.json | 8 ++--- public/static/locales/pt-BR/login.json | 8 ++--- .../static/locales/pt-BR/manageProjects.json | 4 +-- public/static/locales/pt-BR/maps.json | 4 +-- public/static/locales/pt-BR/me.json | 12 +++---- public/static/locales/pt-BR/planet.json | 4 +-- public/static/locales/pt-BR/treemapper.json | 4 +-- 42 files changed, 234 insertions(+), 229 deletions(-) diff --git a/public/static/locales/cs/bulkCodes.json b/public/static/locales/cs/bulkCodes.json index 24bbc35ea5..3578f19422 100644 --- a/public/static/locales/cs/bulkCodes.json +++ b/public/static/locales/cs/bulkCodes.json @@ -12,20 +12,20 @@ "importMethodText": { "title": "Importovat soubor", "subtitle": "Tuto metodu použijte, pokud jedno z následujících kritérií odpovídá vašemu případu použití:", - "details": [ - "Chci uvést jméno příjemce nebo e-mail pro každý kód.", - "Chci, aby Plant-for-the-Planet po vygenerování automaticky odeslal příjemcům e-mail (volitelné).", - "Chci vydat kódy pro různé počty stromů." - ] + "details": { + "line1": "Chci uvést jméno příjemce nebo e-mail pro každý kód.", + "line2": "Chci, aby Plant-for-the-Planet po vygenerování automaticky odeslal příjemcům e-mail (volitelné).", + "line3": "Chci vydat kódy pro různé počty stromů." + } }, "genericMethodText": { "title": "Vytvoření obecných kódů", "subtitle": "Tuto metodu použijte, pokud následující kritéria odpovídají vašemu případu použití:", - "details": [ - "Všechny kódy budou mít stejnou hodnotu.", - "Chci vygenerovat řadu kódů pro libovolné příjemce.", - "Jména a e-maily nelze s kódem asociovat." - ] + "details": { + "line1": "Všechny kódy budou mít stejnou hodnotu.", + "line2": "Chci vygenerovat řadu kódů pro libovolné příjemce.", + "line3": "Jména a e-maily nelze s kódem asociovat." + } }, "projectName": "Název projektu", "costPerUnit": "Cena za jednotku", @@ -72,7 +72,7 @@ "unitsNotProvided": "Jednotky chybí/neplatné pro některé příjemce.", "notifyNotPossible": "U některých příjemců, kteří mají být upozorněni, chybí e-mail a jméno.", "instructionRowError": "Došlo k chybě v prvním řádku. Zkontrolujte, zda jste pokyny smazali, nebo zda existují další údaje.", - "invalidEmails": "recipient_email obsahuje figuríny/neplatné e-maily v následujících řádcích: {{rowList}}. Odstraňte prosím neplatné e-maily nebo přidejte platné e-maily.", + "invalidEmails": "recipient_email obsahuje figuríny/neplatné e-maily v následujících řádcích: {rowList}. Odstraňte prosím neplatné e-maily nebo přidejte platné e-maily.", "generalError": "Něco se pokazilo. Zkuste to prosím o chvíli." }, "successUploadCSV": { @@ -81,10 +81,10 @@ "importInstructions": "Přečtěte si dokumentaci zde, stáhněte si šablonu aplikace Excel zde, a šablonu CSV zde.", "donationSuccess": "Váš dar byl úspěšný. Přesměrování na zobrazení podrobností o darování brzy...", "donationError": { - "planet_cash_insufficient_credit": "Dostupný kredit = {{availableBalance}}. Chcete-li provést tento dar, nahrajte zůstatek na svém účtu PlanetCash.", + "planet_cash_insufficient_credit": "Dostupný kredit = {availableBalance}. Chcete-li provést tento dar, nahrajte zůstatek na svém účtu PlanetCash.", "default": "Něco se pokazilo. Zkuste to prosím po chvíli.", - "planet_cash_payment_failure": "Transakce selhala. {{reason}}", + "planet_cash_payment_failure": "Transakce selhala. {reason}", "planet_cash_invalid_project": "Nelze darovat vybranému projektu." } } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/common.json b/public/static/locales/cs/common.json index b58d0c2d33..ea7f7ba263 100644 --- a/public/static/locales/cs/common.json +++ b/public/static/locales/cs/common.json @@ -1,9 +1,10 @@ { "Common": { + "tree": "{count, plural, =0 {stromů} =1 {strom} other {stromů}}", "tree_one": " strom", "tree_other": "stromů", - "by": "Od {{tpoName}}", - "to_project_by_tpo": "Pro {{projectName}} od {{tpoName}}", + "by": "Od {tpoName}", + "to_project_by_tpo": "Pro {projectName} od {tpoName}", "for": "pro", "trees": "stromů", "planted": "Zasazeno", @@ -67,10 +68,10 @@ "aboutUs": "O nás", "alternativelyEditProfile": "Případně můžete svůj profil označit jako soukromý v části Upravit profil.", "deleteAccountConsent": "Kliknutím na tlačítko \"Smazat\" žádám společnost Plant-for-the-Planet o smazání všech dat spojených s mým účtem Plant-for-the-Planet. Údaje o darech mohou být uchovávány po dobu osmi let. Stromy, které jsem zaregistroval, nebudou odstraněny, budou však anonymizovány a nebude možné o ně znovu požádat. ", - "deleteIrreversible": "Rovněž beru na vědomí, že smazání účtu {{email}} je nevratné.", + "deleteIrreversible": "Rovněž beru na vědomí, že smazání účtu {email} je nevratné.", "goBack": "Zpět", - "deleteAccountMessage": "Chcete-li pokračovat v odstranění, zadejte `{{delete}}`", - "deleteAccountLabel": "Zadejte: {{delete}}", + "deleteAccountMessage": "Chcete-li pokračovat v odstranění, zadejte `{delete}`", + "deleteAccountLabel": "Zadejte: {delete}", "edit": "Upravit", "howDoesThisWork": "Jak to funguje?", "copiedToClipboard": "Zkopírováno do schránky!", @@ -127,4 +128,4 @@ "standardsLink": "https://www.plant-for-the-planet.org/standards/", "project": "Projekt" } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/donate.json b/public/static/locales/cs/donate.json index 415495cff2..fb50e52bbe 100644 --- a/public/static/locales/cs/donate.json +++ b/public/static/locales/cs/donate.json @@ -1,8 +1,8 @@ { "Donate": { - "myTreesPlantedByOnLocation_0": "Můj {{treeCount}} strom se sází v {{location}}.", + "myTreesPlantedByOnLocation_0": "Můj {treeCount} strom se sází v {location}.", "topProjects": "Nejlepší projekty", - "allCountProjects": "Všech [{{projectCount}}] projektů", + "allCountProjects": "Všech [{projectCount}] projektů", "searchProjects": "Prohledat projekty ...", "viewProfile": "Prohlédnout profil", "contactDetails": "Kontaktní údaje", @@ -13,7 +13,7 @@ "taxDeductionNotYetAvailable": "Daňový odpočet zatím není k dispozici pro ", "taxDeductionNotAvailableForProject": "Daňový odpočet pro tento projekt zatím není k dispozici", "youWillReceiveTaxDeduction": "Obdržíte potvrzení o daňovém odpočtu za ", - "toProjectByOrganization": "Do {{projectName}} od {{organizationName}}", + "toProjectByOrganization": "Do {projectName} od {organizationName}", "firstName": "Jméno", "lastName": "Příjmení", "email": "Email", @@ -49,11 +49,11 @@ "selectCurrency": "Vyberte měnu", "treeDonationWithPFP": "Darování stromů s Plant-for-the-Planet", "unavailable": "nedostupné", - "donationSuccessfulWith": "Váš dar {{currency}} {{totalAmount}} byl úspěšně uhrazen pomocí {{paymentTypeUsed}}.", - "donationSuccessful": "Váš dar {{currency}} {{totalAmount}} byl úspěšný.", - "giftSentMessage": "Odeslali jsme e-mail ohledně tohoto daru pro {{recipientName}}.", + "donationSuccessfulWith": "Váš dar {currency} {totalAmount} byl úspěšně uhrazen pomocí {paymentTypeUsed}.", + "donationSuccessful": "Váš dar {currency} {totalAmount} byl úspěšný.", + "giftSentMessage": "Odeslali jsme e-mail ohledně tohoto daru pro {recipientName}.", "contributionMessage": "Možná je jednoho dne navštívíš? Mezitím možná spojíte své přátele s nějakými vlastními stromy tím, že jim řeknete o svých?", - "plantTreesAtURL": "Sázejte stromy na {{url}}", + "plantTreesAtURL": "Sázejte stromy na {url}", "copiedToClipboard": "Text zkopírovaný do schránky!", "noProjectsFound": "Nebyly nalezeny žádné projekty", "inTimeOfTaxReturns": "včas pro daňové přiznání.", @@ -61,10 +61,10 @@ "giftToName": "Dárek pro", "thisDonationSupports": "Tento dar podporuje", "plantTreesWith": "Zasaďte stromy s", - "textToShare": "Připojte se k {{name}} a tisícům dalších, abyste zasadili bilion stromů a řešili tak klimatickou krizi #StopTalkingStartPlanting #TrillionTrees @trilliontrees", + "textToShare": "Připojte se k {name} a tisícům dalších, abyste zasadili bilion stromů a řešili tak klimatickou krizi #StopTalkingStartPlanting #TrillionTrees @trilliontrees", "thankyouHeaderText": "Jsme na cestě k \n

Trillion Trees

", "shareTextTitle": "Stop Talking. Start Plant", - "textToShareLinkedin": "Přidejte se k {{name}} a tisícům dalších, aby jsme zasadili bilion stromů, aby jsme se vypořádali s klimatickou krizí", + "textToShareLinkedin": "Přidejte se k {name} a tisícům dalších, aby jsme zasadili bilion stromů, aby jsme se vypořádali s klimatickou krizí", "textToShareForMe": "Připojte se ke mně a tisícům dalších ak cíli zasazení bilionu stromů, abychom se vypořádali s klimatickou krizí", "donationTokenInvalid": "Zadaný darovací token je neplatný.", "giftTo": "Dárek pro", @@ -76,7 +76,7 @@ "somethingWentWrong": "Něco se pokazilo, zkuste to prosím znovu!", "underMaintenance": "Aplikace prochází údržbou, podrobnosti najdete na status.plant-for-the-planet.org", "waitingConfirmation": "V současné době čekáme na potvrzení z vaší banky a brzy vám zašleme e-mail. Klidně tuto stránku můžete zavřít.", - "yourDonationRef": "Vaše darovací číslo je {{donationID}}", + "yourDonationRef": "Vaše darovací číslo je {donationID}", "payWithGiroPay": "Darujte pomocí GiroPay", "payWithSofort": "Darujte pomocí SOFORT", "donationFailed": "Darování selhalo", @@ -109,4 +109,4 @@ "filters": "Filtry", "perM2": "na m²" } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/editProfile.json b/public/static/locales/cs/editProfile.json index b7013d063f..2275f80ea5 100644 --- a/public/static/locales/cs/editProfile.json +++ b/public/static/locales/cs/editProfile.json @@ -1,8 +1,8 @@ { "EditProfile": { - "loginTitle": "{{log}} - Přihlášení", + "loginTitle": "{log} - Přihlášení", "signUpText": "Dokončení registrace", - "profileTypes": "{{item.title}}", + "profileTypes": "{item.title}", "createAccount": "Vytvořit účet", "individual": "Osoba", "tpo": "Organizace pro obnovu lesů", @@ -26,7 +26,7 @@ "termAndConditionError": "Přijměte prosím Smluvní podmínky", "fieldLabels": { "profileType": "Já jsem", - "name": "Název {{type}}", + "name": "Název {type}", "website": "Webstránka", "privateAccount": "Soukromý účet", "subscribe": "Přihlášení k odběru novinek e-mailem" @@ -36,4 +36,4 @@ "websiteInvalid": "Zadejte prosím platnou adresu URL" } } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/managePayouts.json b/public/static/locales/cs/managePayouts.json index 462bd30cdd..e79cb465c0 100644 --- a/public/static/locales/cs/managePayouts.json +++ b/public/static/locales/cs/managePayouts.json @@ -34,7 +34,7 @@ "errors": { "scheduleFrequencyRequired": "Frekvence plateb je povinná", "payoutMinAmountRequired": "Minimální částka výplaty je povinná", - "payoutMinAmountTooLow": "Minimální částka výplaty by měla být alespoň {{currency}} {{minAmount}}", + "payoutMinAmountTooLow": "Minimální částka výplaty by měla být alespoň {currency} {minAmount}", "bankNameRequired": "Název banky je povinný.", "bankAddressRequired": "Adresa banky je povinná.", "holderNameRequired": "Jméno držitele je povinné.", @@ -44,7 +44,7 @@ "noAccountFound": "Nebyl načten žádný účet" }, "placeholders": { - "payoutMinAmount": "Mělo by být alespoň {{currency}} {{minAmount}}", + "payoutMinAmount": "Mělo by být alespoň {currency} {minAmount}", "bankName": "např. Century Bank LLC", "bankAddress": "např. 1 West St, Hamington Way, MA, 10311, USA", "holderName": "např. John Doe", @@ -57,19 +57,19 @@ }, "saveButton": "Uložit", "accountError": { - "min_amount_range": "Minimální částka výplaty musí být alespoň {{currency}} {{min}}.", + "min_amount_range": "Minimální částka výplaty musí být alespoň {currency} {min}.", "min_amount_forbidden": "Pro výchozí účet nemůžete zadat minimální výši výplaty.", - "account_duplicate": "Již existuje {{currency}} účet.", + "account_duplicate": "Již existuje {currency} účet.", "default": "Při vytváření účtu se něco pokazilo. Zkuste to prosím po chvíli." }, "accountCreationSuccess": "Údaje o vašem účtu byly úspěšně uloženy.", "accountUpdationSuccess": "Údaje o vašem účtu byly úspěšně aktualizovány.", "scheduleSaveSuccess": "Váš plán výplaty byl úspěšně uložen.", "editAccountButton": "Upravit účet", - "accountTitleText": "Převod pro {{currency}}", + "accountTitleText": "Převod pro {currency}", "addBankDetailsButton": "Přidat bankovní údaje", "noBankAccountText": "Zatím jste nepřidali žádné bankovní údaje.", "editBankAccountTitle": "Upravit účet", - "minPayoutText": "Min. Výplata: {{amount}}" + "minPayoutText": "Min. Výplata: {amount}" } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/manageProjects.json b/public/static/locales/cs/manageProjects.json index e76bc9b4bc..12021f9926 100644 --- a/public/static/locales/cs/manageProjects.json +++ b/public/static/locales/cs/manageProjects.json @@ -177,7 +177,7 @@ "mainChallengeInfo": "Největší výzvou, které tento projekt čelí.", "motivationInfo": "Motivace k ochraně tohoto specifického ekosystému.", "hectar": "hektar", - "validation": "{{fieldName}} je neplatný", + "validation": "{fieldName} je neplatný", "date": "Datum", "plantingDensityValidation": "Zadejte prosím hustotu výsadby", "maxPlantingDensityValidation": "Zadejte maximální hustotu výsadby", @@ -188,4 +188,4 @@ "errorForMaxPlantingDensity": "Tato hodnota by měla být větší než hustota výsadby", "managePayoutsButton": "Správa plateb" } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/maps.json b/public/static/locales/cs/maps.json index 209b27ecb5..f31069143a 100644 --- a/public/static/locales/cs/maps.json +++ b/public/static/locales/cs/maps.json @@ -38,7 +38,7 @@ "plantationDensityFormula": "Hustota výsadby = počet stromů/Oblast výsadby", "unknown": "Neznámý", "showWholeArea": "Zobrazit celou oblast", - "daysAgo": "{{days}} dní zpět", + "daysAgo": "{days} dní zpět", "today": "Dnes", "yesterday": "Včera", "clickForDetails": "Kliknutím zobrazíte podrobnosti", @@ -48,4 +48,4 @@ "hideProjectList": "Skrýt seznam projektů", "hideProjectDetails": "Skrýt detaily projektu" } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/me.json b/public/static/locales/cs/me.json index 14fdde3142..55984c7227 100644 --- a/public/static/locales/cs/me.json +++ b/public/static/locales/cs/me.json @@ -25,7 +25,7 @@ "registerTreesDescription": "Zaregistrujte stromy, které jste sami vysadili, např. na své zahradě.", "redeem": "Vykoupit", "myForest": "Můj les", - "giftToGiftee": "Dárek pro {{gifteeName}}", + "giftToGiftee": "Dárek pro {gifteeName}", "settingManageProject": "Správa projektů", "deleteAccount": "Odstranit účet", "userTree": "Registrace stromů", @@ -50,11 +50,11 @@ "dragHere": "nebo přetáhněte sem", "contribNotFound": "Příspěvek nebyl nalezen", "errorOccured": "Vyskytla se chyba", - "contribSuccess": "Úspěšně přidán {{treeCount}} {{treeSpecies}} 🌳 z {{plantDate}}", + "contribSuccess": "Úspěšně přidán {treeCount} {treeSpecies} 🌳 z {plantDate}", "moreThanOne": "1 strom je minimum", "registered": "Registrováno", "receivedTrees": "Přijaté stromy", - "receivedFrom": "Přijato od{{name}}", + "receivedFrom": "Přijato od{name}", "redeemedTrees": "Vykoupené stromy", "myAccount": "Můj účet", "all": "Vše", @@ -105,7 +105,7 @@ "pausedUntil": "Pozastaveno do", "pauseUntilDate": "Pozastavit do vybraného data", "reactivateDonationConfirmation": "Znovu aktivovat dar", - "reactivateDonationDescription": "Váš dar bude znovu aktivován a bude vytvořen k datu{{currentPeriodEnds}}", + "reactivateDonationDescription": "Váš dar bude znovu aktivován a bude vytvořen k datu{currentPeriodEnds}", "cancelDonationConfirmation": "Zrušit dar", "cancelDonationDescription": "Jakmile je dar zrušen, nelze jej restartovat.", "cancelDonationPaypalDescription": "Tento dar bude okamžitě zrušen, nelze jej restartovat.", @@ -130,7 +130,7 @@ "referred": "Odkázáno", "in-dispute": "Ve sporu", "dispute-lost": "Ztracený spor", - "nameForest": "Les jménem {{name}}", + "nameForest": "Les jménem {name}", "taxReceipt": "Daňový doklad", "history": "Historie", "recurrency": "Opakované dary", @@ -254,7 +254,7 @@ "supportPin": "Podpůrný PIN", "alphaNumeric": "Zadejte čtyřmístný alfanumerický kód", "switch": "Jednat za", - "targetUser": "V současné době jednáte za {{impersonatedEmail}}", + "targetUser": "V současné době jednáte za {impersonatedEmail}", "exitImpersonation": "Skončit jednání za ", "enterTheEmail": "Zadejte e-mail cílového uživatele", "enterSupportPin": "Zadejte pin podpory cílového uživatele", @@ -264,4 +264,4 @@ "resetPin": "Obnovit PIN", "document": "Dokumentace platformy (CZ)" } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/planet.json b/public/static/locales/cs/planet.json index 06a454e2a4..60523531bb 100644 --- a/public/static/locales/cs/planet.json +++ b/public/static/locales/cs/planet.json @@ -1,7 +1,7 @@ { "Planet": { "treesDonated": "Darované stromy od spuštění platformy (2019)", - "plantedByTPO": "Zasazeno {{projects}} + zúčastněnými projekty", + "plantedByTPO": "Zasazeno {projects} + zúčastněnými projekty", "plantedGlobally": "Od roku 2006 jsou nám hlášeny stromy", "forestLoss": "Čistá ztráta stromu za rok", "estimateOf": "Odhad roční ztráty stromů", @@ -13,4 +13,4 @@ "treesDonatedDescription": "Všechny dary stromů zpracované společností Plant-for-the-Planet od roku 2019. Zahrnuje stromy darované přímo prostřednictvím našich aplikací, stejně jako velké soukromé a firemní dary. Všechny tyto dary nešly na projekty přímo řízené Plant-for-the-Planet, ale všechny zúčastněné restaurátorské organizace. Některé darované stromy ještě nemusí být vysazeny.", "treesPlantedDescription": "Všechny stromy darované prostřednictvím Plant-for-the-Planet a další stromy nahlášené jako vysazené zúčastněnými restaurátorskými organizacemi." } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/planetcash.json b/public/static/locales/cs/planetcash.json index b816e16ce5..5e25f7bf5f 100644 --- a/public/static/locales/cs/planetcash.json +++ b/public/static/locales/cs/planetcash.json @@ -8,7 +8,7 @@ "tabAccounts": "Účty", "tabCreateAccount": "Vytvořit účet", "tabTransactions": "Transakce", - "accountTitleText": "{{currency}} PlanetCash účet ({{country}})", + "accountTitleText": "{currency} PlanetCash účet ({country})", "createAccountTitleText": "Zaregistrujte se do PlanetCash", "addBalanceButton": "Přidat zůstatek", "labelAccountHolder": "Držitel účtu", @@ -27,8 +27,8 @@ "planetCashTerms3": "Dary na účet PlanetCash z osobních důvodů jsou obecně odečitatelné z daní v zemi vybrané v tomto kroku. Komerční využití PlanetCash nemusí být způsobilé pro daňové odpočty. Máte-li dotazy, kontaktujte prosím support@plant-for-the-planet.org nebo svého daňového poradce.", "accountError": { "active_account_exists": "Aktivní účet již existuje. Deaktivujte tento účet před aktivací jiného účtu.", - "duplicate_account": "Již jste vytvořili účet pro {{country}}", + "duplicate_account": "Již jste vytvořili účet pro {country}", "default": "Při vytváření účtu se něco pokazilo. Zkuste to prosím o chvíli." } } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/treemapper.json b/public/static/locales/cs/treemapper.json index ce0bba4709..e48ae521a8 100644 --- a/public/static/locales/cs/treemapper.json +++ b/public/static/locales/cs/treemapper.json @@ -24,7 +24,7 @@ "m": "m", "plantingLocation": "Místo výsadby", "reviewAndSubmit": "Zkontrolovat a odeslat", - "sampleTree": "Vzorek stromu # {{number}}", + "sampleTree": "Vzorek stromu # {number}", "import": "Importovat", "editor": "Editor", "draw": "Kreslit", @@ -65,4 +65,4 @@ "date": "Datum", "measurements": "Měření" } -} \ No newline at end of file +} diff --git a/public/static/locales/de/bulkCodes.json b/public/static/locales/de/bulkCodes.json index 2775fdb8e2..08e76fd740 100644 --- a/public/static/locales/de/bulkCodes.json +++ b/public/static/locales/de/bulkCodes.json @@ -12,20 +12,20 @@ "importMethodText": { "title": "Erstelle personalisierte Baumurkunden", "subtitle": "Verwende diese Methode (maximal 1000 Empfänger in einer Operation), wenn eines der folgenden Kriterien auf deinen Anwendungsfall zutrifft:", - "details": [ - "Ich möchte für jeden Code den Namen des Empfängers oder seine E-Mail-Adresse angeben.", - "Ich möchte, dass Plant-for-the-Planet nach der Erstellung automatisch eine E-Mail an die Empfänger sendet (optional).", - "Ich möchte Codes für verschiedene Zahlen von Bäumen vergeben." - ] + "details": { + "line1": "Ich möchte für jeden Code den Namen des Empfängers oder seine E-Mail-Adresse angeben.", + "line2": "Ich möchte, dass Plant-for-the-Planet nach der Erstellung automatisch eine E-Mail an die Empfänger sendet (optional).", + "line3": "Ich möchte Codes für verschiedene Zahlen von Bäumen vergeben." + } }, "genericMethodText": { "title": "Generische Codes erstellen", "subtitle": "Verwende diese Methode, wenn die folgenden Kriterien auf deinen Anwendungsfall zutreffen:", - "details": [ - "Alle Codes werden den gleichen Wert haben.", - "Ich möchte eine Reihe von Codes für beliebige Empfänger generieren.", - "Namen und E-Mail-Adressen können nicht mit dem Code verknüpft werden." - ] + "details": { + "line1": "Alle Codes werden den gleichen Wert haben.", + "line2": "Ich möchte eine Reihe von Codes für beliebige Empfänger generieren.", + "line3": "Namen und E-Mail-Adressen können nicht mit dem Code verknüpft werden." + } }, "projectName": "Projektname", "costPerUnit": "Kosten pro Einheit", diff --git a/public/static/locales/es/common.json b/public/static/locales/es/common.json index bd62912d9a..d602640a3d 100644 --- a/public/static/locales/es/common.json +++ b/public/static/locales/es/common.json @@ -1,9 +1,10 @@ { "Common": { + "tree": "{count, plural, =0 {Árboles} =1 {Árbol} other {Árboles}}", "tree_one": "Árbol", "tree_other": "Árboles", - "by": "Por {{tpoName}}", - "to_project_by_tpo": "Para {{projectName}} por {{tpoName}}", + "by": "Por {tpoName}", + "to_project_by_tpo": "Para {projectName} por {tpoName}", "for": "para", "trees": "Árboles", "planted": "plantado", @@ -67,10 +68,10 @@ "aboutUs": "Sobre nosotros", "alternativelyEditProfile": "También puede marcar su perfil como privado visitando Editar perfil.", "deleteAccountConsent": "Al hacer clic en Eliminar, solicito a Plant-for-the-Planet que elimine todos los datos asociados a mi cuenta de Plant-for-the-Planet. Los datos de las donaciones pueden conservarse hasta ocho años. Los árboles que he registrado no serán eliminados, sin embargo, serán anónimos y no podrán ser reclamados de nuevo.", - "deleteIrreversible": "También entiendo que la eliminación de la cuenta de {{email}} es irreversible.", + "deleteIrreversible": "También entiendo que la eliminación de la cuenta de {email} es irreversible.", "goBack": "Regresar", - "deleteAccountMessage": "Para continuar con el borrado, escriba `{{delete}}`", - "deleteAccountLabel": "Tipo: {{delete}}", + "deleteAccountMessage": "Para continuar con el borrado, escriba `{delete}`", + "deleteAccountLabel": "Tipo: {delete}", "edit": "Editar", "howDoesThisWork": "¿Cómo funciona esto?", "copiedToClipboard": "Copiado en el portapapeles", @@ -81,4 +82,4 @@ "underMaintenance": "En mantenimiento", "reviewInfo": "El proyecto se inspeccionó en una revisión sobre el terreno de varios días al <2>mes y cumple nuestras <5>normas." } -} \ No newline at end of file +} diff --git a/public/static/locales/es/donate.json b/public/static/locales/es/donate.json index 755567dd9a..41e6cf6345 100644 --- a/public/static/locales/es/donate.json +++ b/public/static/locales/es/donate.json @@ -1,13 +1,13 @@ { "Donate": { - "fortreeCountTrees": "para {{treeCount}} Árbol", - "fortreeCountTrees_plural": "para {{treeCount}} Árboles", - "yourTreesPlantedByOnLocation": "Su árbol {{treeCount}} será plantado por {{projectName}} en {{location}}.", - "yourTreesPlantedByOnLocation_plural": "Sus árboles {{treeCount}} serán plantados por {{projectName}} en {{location}}.", - "myTreesPlantedByOnLocation": "Mi árbol {{treeCount}} está siendo plantado en {{location}}.", - "myTreesPlantedByOnLocation_plural": "Mis árboles {{treeCount}} están siendo plantados en {{location}}.", + "fortreeCountTrees": "para {treeCount} Árbol", + "fortreeCountTrees_plural": "para {treeCount} Árboles", + "yourTreesPlantedByOnLocation": "Su árbol {treeCount} será plantado por {projectName} en {location}.", + "yourTreesPlantedByOnLocation_plural": "Sus árboles {treeCount} serán plantados por {projectName} en {location}.", + "myTreesPlantedByOnLocation": "Mi árbol {treeCount} está siendo plantado en {location}.", + "myTreesPlantedByOnLocation_plural": "Mis árboles {treeCount} están siendo plantados en {location}.", "topProjects": "Proyectos principales", - "allCountProjects": "Todos {{projectCount}} los Proyectos", + "allCountProjects": "Todos {projectCount} los Proyectos", "searchProjects": "Buscar Proyectos", "viewProfile": "Ver Perfil", "contactDetails": "Detalles de contacto", @@ -18,7 +18,7 @@ "taxDeductionNotYetAvailable": "La deducción de impuestos no está disponible todavía para ", "taxDeductionNotAvailableForProject": "La deducción de impuestos no está disponible todavía para este proyecto", "youWillReceiveTaxDeduction": "Recibirá un certificado de deducción de impuestos por ", - "toProjectByOrganization": "Para {{nombre del proyecto}} de {{nombre de la organización}}", + "toProjectByOrganization": "Para {nombre del proyecto} de {nombre de la organización}", "firstName": "Nombre", "lastName": "Apellidos", "email": "Correo electrónico", @@ -54,9 +54,9 @@ "selectCurrency": "Seleccione la divisa", "treeDonationWithPFP": "Donación de árboles con Plant-for-the-Planet", "unavailable": "no disponible", - "donationSuccessfulWith": "Su {{{divisa}} donación fue pagada con éxito con el tipo de pago utilizado.", - "donationSuccessful": "Su {{{divisa}} donación fue un éxito.", - "giftSentMessage": "Hemos enviado un correo electrónico a {{nombre del destinatario}} sobre el regalo.", + "donationSuccessfulWith": "Su {{divisa} donación fue pagada con éxito con el tipo de pago utilizado.", + "donationSuccessful": "Su {{divisa} donación fue un éxito.", + "giftSentMessage": "Hemos enviado un correo electrónico a {nombre del destinatario} sobre el regalo.", "contributionMessage": "¿Quizás los visites algún día? Mientras tanto, tal vez puedas convencer a tus amigos con algunos árboles propios contándoles sobre los tuyos", "plantTreesAtURL": "Plantar árboles en", "copiedToClipboard": "¡Texto copiado al portapapeles!", @@ -66,10 +66,10 @@ "giftToName": "Regalo a", "thisDonationSupports": "Esta donación apoya", "plantTreesWith": "Plantar árboles con", - "textToShare": "Únete a {{name}} y miles de otros para plantar un trillón de árboles para hacer frente a la crisis climática #StopTalkingStartPlanting #TrillionTrees @trilliontrees", + "textToShare": "Únete a {name} y miles de otros para plantar un trillón de árboles para hacer frente a la crisis climática #StopTalkingStartPlanting #TrillionTrees @trilliontrees", "thankyouHeaderText": "Vamos hacia un\n

Trillón de árboles

", "shareTextTitle": "Deja de hablar. Inicie la planta", - "textToShareLinkedin": "Únete a {{name}} y miles de otros para plantar un trillón de árboles para hacer frente a la crisis climática", + "textToShareLinkedin": "Únete a {name} y miles de otros para plantar un trillón de árboles para hacer frente a la crisis climática", "textToShareForMe": "Únete a nosotros y a otros miles para plantar un billón de árboles para hacer frente a la crisis climática", "donationTokenInvalid": "La ficha de donación proporcionada es inválida.", "giftTo": "Regalo a", @@ -81,7 +81,7 @@ "somethingWentWrong": "¡Algo salió mal, por favor, inténtalo de nuevo pronto!", "underMaintenance": "La aplicación está en mantenimiento, por favor, comprueba status.plant-for-the-planet.org para más detalles", "waitingConfirmation": "Estamos esperando la confirmación de tu banco y te enviaremos un correo electrónico en breve. Por favor, no dudes en cerrar esta página.", - "yourDonationRef": "Tu referencia de donación es {{donationID}}", + "yourDonationRef": "Tu referencia de donación es {donationID}", "payWithGiroPay": "Donar con GiroPay", "payWithSofort": "Donar con SOFORT", "donationFailed": "Donación fallida", @@ -113,4 +113,4 @@ "restoration": "Restauración", "filters": "Filtros" } -} \ No newline at end of file +} diff --git a/public/static/locales/es/editProfile.json b/public/static/locales/es/editProfile.json index 6dceae8dd1..4775d2548b 100644 --- a/public/static/locales/es/editProfile.json +++ b/public/static/locales/es/editProfile.json @@ -1,8 +1,8 @@ { "EditProfile": { - "loginTitle": "{{log}} - Ingresa en", + "loginTitle": "{log} - Ingresa en", "signUpText": "Inscripción completa", - "profileTypes": "{{item.title}}", + "profileTypes": "{item.title}", "createAccount": "Crear una cuenta", "individual": "Individuo", "tpo": "Organización de plantación", @@ -24,7 +24,7 @@ "cancel": "Cancelar", "fieldLabels": { "profileType": "Soy un", - "name": "Nombre de {{type}}", + "name": "Nombre de {type}", "website": "Página web", "privateAccount": "Cuenta privada", "subscribe": "Suscríbete a las noticias por correo electrónico" @@ -34,4 +34,4 @@ "websiteInvalid": "Por favor, introduzca una URL válida" } } -} \ No newline at end of file +} diff --git a/public/static/locales/es/login.json b/public/static/locales/es/login.json index dfade33bd2..4e42051d80 100644 --- a/public/static/locales/es/login.json +++ b/public/static/locales/es/login.json @@ -1,9 +1,9 @@ { "Login": { - "loginTitle": "{{log}} - Ingresa en", + "loginTitle": "{log} - Ingresa en", "signUpText": "Inscripción completa", - "profileTypes": "{{item.title}}", - "profileName": "Nombre de {{type}}", + "profileTypes": "{item.title}", + "profileName": "Nombre de {type}", "createAccount": "Crear una cuenta" } -} \ No newline at end of file +} diff --git a/public/static/locales/es/maps.json b/public/static/locales/es/maps.json index b243d1a6b9..e60bb93000 100644 --- a/public/static/locales/es/maps.json +++ b/public/static/locales/es/maps.json @@ -38,9 +38,9 @@ "plantationDensityFormula": "Densidad de plantación = Número de árboles / Superficie de plantación", "unknown": "Desconocido", "showWholeArea": "Mostrar toda la zona", - "daysAgo": "{{days}} días atrás", + "daysAgo": "{days} días atrás", "today": "Hoy", "yesterday": "Ayer", "clickForDetails": "Haga clic para más detalles" } -} \ No newline at end of file +} diff --git a/public/static/locales/es/me.json b/public/static/locales/es/me.json index f33e2f6a70..6df880f9a5 100644 --- a/public/static/locales/es/me.json +++ b/public/static/locales/es/me.json @@ -8,7 +8,7 @@ "registerTreesDescription": "Registra los árboles que has plantado tú mismo, por ejemplo, en tu jardín.", "redeem": "Canjear", "myForest": "Mi bosque", - "giftToGiftee": "Regalo a {{gifteeName}}", + "giftToGiftee": "Regalo a {gifteeName}", "settingManageProject": "Administrar los proyectos", "deleteAccount": "Borrar la cuenta", "userTree": "Registro de árboles", @@ -33,11 +33,11 @@ "dragHere": "o arrastrar aquí", "contribNotFound": "Contribución no encontrada", "errorOccured": "Se produjo un error", - "contribSuccess": "Añadido con éxito {{treeCount}} {{treeSpecies}} 🌳 de {{plantDate}}", + "contribSuccess": "Añadido con éxito {treeCount} {treeSpecies} 🌳 de {plantDate}", "moreThanOne": "se requiere un mínimo de 1 árbol", "registered": "Registrado", "receivedTrees": "Árboles recibidos", - "receivedFrom": "Recibido de {{name}}", + "receivedFrom": "Recibido de {name}", "redeemedTrees": "Árboles redimidos", "myAccount": "Mi cuenta", "all": "Todo", @@ -74,7 +74,7 @@ "referred": "Remitido", "in-dispute": "En disputa", "dispute-lost": "Disputa perdida", - "nameForest": "El Bosque de {{name}}", + "nameForest": "El Bosque de {name}", "taxReceipt": "Recibo de impuestos", "history": "Historia", "treemapper": "TreeMapper", @@ -87,4 +87,4 @@ "targetErrorMessage": "El número debe ser positivo o mayor que cero", "profile": "Perfil" } -} \ No newline at end of file +} diff --git a/public/static/locales/es/planet.json b/public/static/locales/es/planet.json index c124aad8c6..557deb7461 100644 --- a/public/static/locales/es/planet.json +++ b/public/static/locales/es/planet.json @@ -1,7 +1,7 @@ { "Planet": { "treesDonated": "Árboles donados desde 2019", - "plantedByTPO": "Plantado por las {{projects}}+ organizaciones participantes", + "plantedByTPO": "Plantado por las {projects}+ organizaciones participantes", "plantedGlobally": "Árboles que nos fueron notificados desde 2006", "forestLoss": "Pérdida neta de bosques en los últimos 12 meses", "estimateOf": "Estimación de la pérdida anual de árboles por", @@ -13,4 +13,4 @@ "treesDonatedDescription": "Todas las donaciones de árboles procesadas por Plant-for-the-Planet desde 2019. Incluye árboles donados directamente a través de nuestras apps, así como grandes donaciones privadas y de empresas. Estas donaciones no fueron todas a proyectos gestionados directamente por Plant-for-the-Planet, sino a todas las organizaciones de restauración participantes. Es posible que algunos árboles donados aún no se hayan plantado.", "treesPlantedDescription": "Todos los árboles donados a través de Plant-for-the-Planet y otros árboles reportados como plantados por las organizaciones de restauración participantes" } -} \ No newline at end of file +} diff --git a/public/static/locales/fr/common.json b/public/static/locales/fr/common.json index 618f3976cd..03f6f27468 100644 --- a/public/static/locales/fr/common.json +++ b/public/static/locales/fr/common.json @@ -1,9 +1,10 @@ { "Common": { + "tree": "{count, plural, =0 {Arbres} =1 {Arbre} other {Arbres}}", "tree_one": "Arbre", "tree_other": "Arbres", - "by": "Par {{tpoName}}", - "to_project_by_tpo": "Au {{projectName}} par {{tpoName}}", + "by": "Par {tpoName}", + "to_project_by_tpo": "Au {projectName} par {tpoName}", "for": "pour", "trees": "Arbres", "planted": "planté", @@ -67,10 +68,10 @@ "aboutUs": "À propos de nous", "alternativelyEditProfile": "Vous pouvez également marquer votre profil comme privé en visitant la page Modifier le profil.", "deleteAccountConsent": "En cliquant Supprimer, je demande à Plant-for-the-Planet de supprimer toutes les données associées à mon compte Plant-for-the-Planet. Les données relatives aux dons peuvent être conservées pendant huit ans. Les arbres que j'ai enregistrés ne seront pas supprimés, mais ils seront dépersonnalisés et ne pourront plus être réclamés.", - "deleteIrreversible": "Je comprends également que la suppression du compte de {{email}} est irréversible.", + "deleteIrreversible": "Je comprends également que la suppression du compte de {email} est irréversible.", "goBack": "Retour", - "deleteAccountMessage": "Pour continuer la suppression, veuillez taper `{{delete}}`", - "deleteAccountLabel": "Taper : {{delete}}", + "deleteAccountMessage": "Pour continuer la suppression, veuillez taper `{delete}`", + "deleteAccountLabel": "Taper : {delete}", "edit": "Éditer", "howDoesThisWork": "Comment ça marche ?", "copiedToClipboard": "Copié dans le presse-papiers !", @@ -81,4 +82,4 @@ "underMaintenance": "En cours de maintenance", "reviewInfo": "Le projet a fait l'objet d'une inspection sur le terrain de plusieurs jours au cours du <2>mois et répond à nos <5>normes." } -} \ No newline at end of file +} diff --git a/public/static/locales/fr/donate.json b/public/static/locales/fr/donate.json index 270bc94a75..4d6c7f0993 100644 --- a/public/static/locales/fr/donate.json +++ b/public/static/locales/fr/donate.json @@ -1,13 +1,13 @@ { "Donate": { - "fortreeCountTrees": "for {{treeCount}} Tree", - "fortreeCountTrees_plural": "for {{treeCount}} Trees", - "yourTreesPlantedByOnLocation": "Vos {{treeCount}} arbres seront plantés par {{projectName}} à {{location}}.", - "yourTreesPlantedByOnLocation_plural": "Vos {{treeCount}} arbres seront plantés par {{projectName}} à {{location}}.", - "myTreesPlantedByOnLocation": "Mes {{treeCount}} arbres sont plantés à {{location}}.", - "myTreesPlantedByOnLocation_plural": "Mes {{treeCount}} arbres sont plantés à {{location}}.", + "fortreeCountTrees": "for {treeCount} Tree", + "fortreeCountTrees_plural": "for {treeCount} Trees", + "yourTreesPlantedByOnLocation": "Vos {treeCount} arbres seront plantés par {projectName} à {location}.", + "yourTreesPlantedByOnLocation_plural": "Vos {treeCount} arbres seront plantés par {projectName} à {location}.", + "myTreesPlantedByOnLocation": "Mes {treeCount} arbres sont plantés à {location}.", + "myTreesPlantedByOnLocation_plural": "Mes {treeCount} arbres sont plantés à {location}.", "topProjects": "Principaux projets", - "allCountProjects": "Tous {{projectCount}} Projets", + "allCountProjects": "Tous {projectCount} Projets", "searchProjects": "Recherche de projets", "viewProfile": "Voir le profil", "contactDetails": "Coordonnées", @@ -18,7 +18,7 @@ "taxDeductionNotYetAvailable": "La déduction fiscale n'est pas encore disponible pour ", "taxDeductionNotAvailableForProject": "La déduction fiscale n'est pas encore disponible pour ce projet", "youWillReceiveTaxDeduction": "Vous recevrez un reçu de déduction fiscale pour ", - "toProjectByOrganization": "Pour {{projectName}} par {{organizationName}}", + "toProjectByOrganization": "Pour {projectName} par {organizationName}", "firstName": "Prénom", "lastName": "Nom de famille", "email": "Email", @@ -54,11 +54,11 @@ "selectCurrency": "Sélectionnez votre devise", "treeDonationWithPFP": "Don d'arbres avec le programme \"Plantons pour la planète\"", "unavailable": "non disponible", - "donationSuccessfulWith": "Votre {{currency}} {{totalAmount}}Le don a été payé avec succès avec {{paymentTypeUsed}}.", - "donationSuccessful": "Votre {{currency}}{{totalAmount}} Le don a été couronné de succès.", - "giftSentMessage": "Nous avons envoyé un email à {{recipientName}} au sujet du cadeau.", + "donationSuccessfulWith": "Votre {currency} {totalAmount}Le don a été payé avec succès avec {paymentTypeUsed}.", + "donationSuccessful": "Votre {currency}{totalAmount} Le don a été couronné de succès.", + "giftSentMessage": "Nous avons envoyé un email à {recipientName} au sujet du cadeau.", "contributionMessage": "Peut-être leur rendrez-vous visite un jour ? En attendant, vous pourriez peut-être faire découvrir à vos amis des arbres qui leur appartiennent en leur parlant des vôtres ?", - "plantTreesAtURL": "Planter des arbres à {{url}}", + "plantTreesAtURL": "Planter des arbres à {url}", "copiedToClipboard": "Texte copié dans le presse-papiers !", "noProjectsFound": "Aucun projet trouvé", "inTimeOfTaxReturns": "à temps pour les déclarations d'impôts.", @@ -66,10 +66,10 @@ "giftToName": "Don à", "thisDonationSupports": "Ce don soutient", "plantTreesWith": "Planter des arbres avec", - "textToShare": "Rejoignez {{name}} et des milliers d'autres pour planter un billion d'arbres pour lutter contre la crise climatique ! #StopTalkingStartPlanting #TrillionTrees @trilliontrees", + "textToShare": "Rejoignez {name} et des milliers d'autres pour planter un billion d'arbres pour lutter contre la crise climatique ! #StopTalkingStartPlanting #TrillionTrees @trilliontrees", "thankyouHeaderText": "Nous sommes sur la voie d'une \n

Trillion d'arbres

", "shareTextTitle": "Arrêtez de parler. Commencer à planter", - "textToShareLinkedin": "Rejoignez {{name}} et des milliers d'autres pour planter un mille milliards d'arbres afin de lutter contre la crise climatique", + "textToShareLinkedin": "Rejoignez {name} et des milliers d'autres pour planter un mille milliards d'arbres afin de lutter contre la crise climatique", "textToShareForMe": "Rejoignez-moi ainsi que des milliers d'autres personnes pour planter mille milliards d'arbres et lutter contre la crise climatique", "donationTokenInvalid": "Le jeton de don fourni n'est pas valable.", "giftTo": "Cadeau à", @@ -81,7 +81,7 @@ "somethingWentWrong": "Quelque chose s'est mal passé, veuillez réessayer bientôt !", "underMaintenance": "L'application est en cours de maintenance, veuillez consulter status.plant-for-the-planet.org pour plus de détails", "waitingConfirmation": "Nous attendons actuellement une confirmation de votre banque et vous enverrons un courriel sous peu. N'hésitez pas à fermer cette page.", - "yourDonationRef": "Votre référence de don est {{donationID}}", + "yourDonationRef": "Votre référence de don est {donationID}", "payWithGiroPay": "Payer avec GiroPay", "payWithSofort": "Payer avec SOFORT", "donationFailed": "Echec du don", @@ -113,4 +113,4 @@ "restoration": "Restauration", "filters": "Filtres" } -} \ No newline at end of file +} diff --git a/public/static/locales/fr/editProfile.json b/public/static/locales/fr/editProfile.json index d20b334a5c..066f2100a0 100644 --- a/public/static/locales/fr/editProfile.json +++ b/public/static/locales/fr/editProfile.json @@ -1,8 +1,8 @@ { "EditProfile": { - "loginTitle": "{{log}} - Connexion", + "loginTitle": "{log} - Connexion", "signUpText": "Inscription complète", - "profileTypes": "{{item.title}}", + "profileTypes": "{item.title}", "createAccount": "Créer un compte", "individual": "Individu", "tpo": "Organisation de reboisement", @@ -24,7 +24,7 @@ "cancel": "Annuler", "fieldLabels": { "profileType": "Je suis un", - "name": "Nom de {{type}}", + "name": "Nom de {type}", "website": "Site web", "privateAccount": "Compte privé", "subscribe": "S'abonner aux actualités par email" @@ -34,4 +34,4 @@ "websiteInvalid": "Veuillez entrer une URL de site web valide" } } -} \ No newline at end of file +} diff --git a/public/static/locales/fr/login.json b/public/static/locales/fr/login.json index ae54b6a904..f594154941 100644 --- a/public/static/locales/fr/login.json +++ b/public/static/locales/fr/login.json @@ -1,9 +1,9 @@ { "Login": { - "loginTitle": "{{log}} - Connexion", + "loginTitle": "{log} - Connexion", "signUpText": "Inscription complète", - "profileTypes": "{{item.title}}", - "profileName": "Nom de {{type}}", + "profileTypes": "{item.title}", + "profileName": "Nom de {type}", "createAccount": "Créer un compte", "individual": "Individuel", "tpo": "Organisation de reboisement", @@ -13,4 +13,4 @@ "profileCreationFailed": "Erreur dans la création du profil. Veuillez réessayer.", "profileCreationError": "Erreur dans la création du profil." } -} \ No newline at end of file +} diff --git a/public/static/locales/fr/maps.json b/public/static/locales/fr/maps.json index 0a8af0f1d8..22ded435fc 100644 --- a/public/static/locales/fr/maps.json +++ b/public/static/locales/fr/maps.json @@ -38,10 +38,10 @@ "plantationDensityFormula": "Densité de plantation = nombre d'arbres / surface de plantation", "unknown": "Inconnu", "showWholeArea": "Afficher toute la zone", - "daysAgo": "{{days}} jours", + "daysAgo": "{days} jours", "today": "Aujourd'hui", "yesterday": "Hier", "clickForDetails": "Cliquez pour plus de détails", "treeMapper": "TreeMapper" } -} \ No newline at end of file +} diff --git a/public/static/locales/fr/me.json b/public/static/locales/fr/me.json index 2242fca189..1a5d711238 100644 --- a/public/static/locales/fr/me.json +++ b/public/static/locales/fr/me.json @@ -8,7 +8,7 @@ "registerTreesDescription": "Enregistrer les arbres que vous avez plantés vous-même, par exemple dans votre jardin.", "redeem": "Redeem", "myForest": "Ma forêt", - "giftToGiftee": "Cadeau à {{gifteeName}}", + "giftToGiftee": "Cadeau à {gifteeName}", "settingManageProject": "Gérer les projets", "deleteAccount": "Supprimer le compte", "userTree": "Enregistrer les arbres", @@ -33,11 +33,11 @@ "dragHere": "ou glisser ici", "contribNotFound": "Contribution non trouvée", "errorOccured": "Erreur commise", - "contribSuccess": "Ajouté avec succès {{treeCount}} {{treeSpecies}} 🌳 de {{plantDate}}", + "contribSuccess": "Ajouté avec succès {treeCount} {treeSpecies} 🌳 de {plantDate}", "moreThanOne": "1 arbre minimum requis", "registered": "Enregistré", "receivedTrees": "Arbres reçus", - "receivedFrom": "Reçu de {{name}}", + "receivedFrom": "Reçu de {name}", "redeemedTrees": "Arbres rachetés", "myAccount": "Mon compte", "all": "Tous", @@ -74,7 +74,7 @@ "referred": "Référé", "in-dispute": "En litige", "dispute-lost": "Litige perdu", - "nameForest": "La forêt des {{name}}", + "nameForest": "La forêt des {name}", "taxReceipt": "Reçu fiscal", "history": "Histoire", "treemapper": "TreeMapper", @@ -143,4 +143,4 @@ "deleteProfile": "Supprimer le Profil", "widgets": "Widgets" } -} \ No newline at end of file +} diff --git a/public/static/locales/fr/planet.json b/public/static/locales/fr/planet.json index 61bae1120a..b23fe0306c 100644 --- a/public/static/locales/fr/planet.json +++ b/public/static/locales/fr/planet.json @@ -1,7 +1,7 @@ { "Planet": { "treesDonated": "Arbres donnés depuis 2019", - "plantedByTPO": "Planté par plus de {{projects}}+ projets participants", + "plantedByTPO": "Planté par plus de {projects}+ projets participants", "plantedGlobally": "Arbres qui nous sont signalés depuis 2006", "forestLoss": "Perte nette d'arbres par an", "estimateOf": "Estimation de la perte annuelle d'arbres par", @@ -13,4 +13,4 @@ "treesDonatedDescription": "Tous les dons d'arbres traités par Plant-for-the-Planet depuis 2019. Comprend les arbres donnés directement par le biais de nos applis ainsi que les grands dons privés et d'entreprise. Ces dons ne sont pas tous allés à des projets gérés directement par Plant-for-the-Planet, mais à toutes les organisations de restauration participantes. Il se peut que certains arbres donnés ne soient pas encore plantés.", "treesPlantedDescription": "Tous les arbres donnés par le biais de Plant-for-the-Planet et les autres arbres déclarés comme étant plantés par les organisations de restauration participantes" } -} \ No newline at end of file +} diff --git a/public/static/locales/fr/redeem.json b/public/static/locales/fr/redeem.json index 561360e9c0..277aac870c 100644 --- a/public/static/locales/fr/redeem.json +++ b/public/static/locales/fr/redeem.json @@ -1,7 +1,7 @@ { "Redeem": { - "myPlantedTreesByOrg": "Mon {{formattedNumber}} arbre sera planté par {{tpoName}}", - "myPlantedTreesByOrg_plural": "Mes {{formattedNumber}} arbres seront plantés par {{tpoName}}", + "myPlantedTreesByOrg": "Mon {formattedNumber} arbre sera planté par {tpoName}", + "myPlantedTreesByOrg_plural": "Mes {formattedNumber} arbres seront plantés par {tpoName}", "congratulations": "Félicitations !", "addToMyTrees": "Ajouter à mes arbres", "validateCode": "Valider le code", @@ -10,4 +10,4 @@ "invalidType": "Type non valide, vérifier à nouveau le lien", "redeemDescription": "Échangez votre bon d'arbre et d'autres codes." } -} \ No newline at end of file +} diff --git a/public/static/locales/it/common.json b/public/static/locales/it/common.json index bc282660aa..b5c6205e82 100644 --- a/public/static/locales/it/common.json +++ b/public/static/locales/it/common.json @@ -1,9 +1,10 @@ { "Common": { + "tree": "{count, plural, =0 {Alberi} =1 {Albero} other {Alberi}}", "tree_one": "Albero", "tree_other": "Alberi", - "by": "Di {{tpoName}}", - "to_project_by_tpo": "A {{projectName}} di {{tpoName}}", + "by": "Di {tpoName}", + "to_project_by_tpo": "A {projectName} di {tpoName}", "for": "per", "trees": "Alberi", "planted": "piantato", @@ -67,11 +68,11 @@ "aboutUs": "Chi siamo", "alternativelyEditProfile": "In alternativa puoi marcare il tuo profilo come privato visitando Modifica profilo.", "deleteAccountConsent": "Cliccando su cancella, chiedo a Plant-for-the-Planet di cancellare tutti i dati associati al mio account Plant-for-the-Planet. I dati delle donazioni possono essere conservati per un massimo di otto anni. Gli alberi che ho registrato non saranno rimossi, ma saranno resi anonimi e non potranno essere reclamati nuovamente.", - "deleteIrreversible": "Capisco anche che la cancellazione dell'account di {{email}} è irreversibile.", + "deleteIrreversible": "Capisco anche che la cancellazione dell'account di {email} è irreversibile.", "goBack": "Torna indietro", - "deleteAccountMessage": "Per continuare la cancellazione, digita `{{delete}}`", - "deleteAccountLabel": "Tipo: {{delete}}", + "deleteAccountMessage": "Per continuare la cancellazione, digita `{delete}`", + "deleteAccountLabel": "Tipo: {delete}", "howDoesThisWork": "Come funziona?", "reviewInfo": "Il progetto è stato ispezionato nel corso di una revisione sul campo di più giorni nel <2>mese e soddisfa i nostri <5>standard." } -} \ No newline at end of file +} diff --git a/public/static/locales/it/donate.json b/public/static/locales/it/donate.json index d6178565dd..76d4d83c6f 100644 --- a/public/static/locales/it/donate.json +++ b/public/static/locales/it/donate.json @@ -1,13 +1,13 @@ { "Donate": { - "fortreeCountTrees": "per {{treeCount}} Albero", - "fortreeCountTrees_plural": "per {{treeCount}} Alberi", - "yourTreesPlantedByOnLocation": "I vostri alberi {{treeCount}} saranno piantati da {{projectName}} in {{location}}.", - "yourTreesPlantedByOnLocation_plural": "I vostri alberi {{treeCount}} saranno piantati da {{projectName}} in {{location}}.", - "myTreesPlantedByOnLocation": "I miei {{treeCount}} alberi sono stati piantati in {{location}}.", - "myTreesPlantedByOnLocation_plural": "I miei {{treeCount}} alberi sono stati piantati in {{location}}.", + "fortreeCountTrees": "per {treeCount} Albero", + "fortreeCountTrees_plural": "per {treeCount} Alberi", + "yourTreesPlantedByOnLocation": "I vostri alberi {treeCount} saranno piantati da {projectName} in {location}.", + "yourTreesPlantedByOnLocation_plural": "I vostri alberi {treeCount} saranno piantati da {projectName} in {location}.", + "myTreesPlantedByOnLocation": "I miei {treeCount} alberi sono stati piantati in {location}.", + "myTreesPlantedByOnLocation_plural": "I miei {treeCount} alberi sono stati piantati in {location}.", "topProjects": "Progetti Top", - "allCountProjects": "Tutti {{projectCount}} Progetti", + "allCountProjects": "Tutti {projectCount} Progetti", "searchProjects": "Ricerca progetti", "viewProfile": "Visualizza il profilo", "contactDetails": "Dettagli di contatto", @@ -18,7 +18,7 @@ "taxDeductionNotYetAvailable": "La detrazione fiscale non è ancora disponibile per ", "taxDeductionNotAvailableForProject": "La detrazione fiscale non è ancora disponibile per questo progetto", "youWillReceiveTaxDeduction": "Riceverete una ricevuta di detrazione fiscale per ", - "toProjectByOrganization": "A {{projectName}} di {{organizationName}}", + "toProjectByOrganization": "A {projectName} di {organizationName}", "firstName": "Nome", "lastName": "Cognome", "email": "Invia un'e-mail a", @@ -54,11 +54,11 @@ "selectCurrency": "Seleziona la tua valuta", "treeDonationWithPFP": "Donazione di alberi con Plant-for-the-Planet", "unavailable": "non disponibile", - "donationSuccessfulWith": "La tua {{currency}} {{totalAmount}} la donazione è stata pagata con successo con {{paymentTypeUsed}}.", - "donationSuccessful": "La tua {{currency}} {{totalAmount}} La donazione ha avuto successo.", - "giftSentMessage": "Abbiamo inviato un'e-mail a {{recipientName}} sul regalo.", + "donationSuccessfulWith": "La tua {currency} {totalAmount} la donazione è stata pagata con successo con {paymentTypeUsed}.", + "donationSuccessful": "La tua {currency} {totalAmount} La donazione ha avuto successo.", + "giftSentMessage": "Abbiamo inviato un'e-mail a {recipientName} sul regalo.", "contributionMessage": "Forse un giorno andrai a trovarli? Nel frattempo, potresti far conoscere ai tuoi amici alcuni dei loro alberi raccontando loro i tuoi?", - "plantTreesAtURL": "Piantate alberi a {{url}}", + "plantTreesAtURL": "Piantate alberi a {url}", "copiedToClipboard": "Testo copiato negli Appunti!", "noProjectsFound": "Nessun progetto trovato", "inTimeOfTaxReturns": "in tempo per la dichiarazione dei redditi.", @@ -66,10 +66,10 @@ "giftToName": "Regalo a", "thisDonationSupports": "Questa donazione sostiene", "plantTreesWith": "Pianta alberi con", - "textToShare": "Unisciti a {{name}} e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica #StopTalkingStartPlanting #TrillionTrees @trilliontrees", + "textToShare": "Unisciti a {name} e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica #StopTalkingStartPlanting #TrillionTrees @trilliontrees", "thankyouHeaderText": "Siamo sulla strada di un \n

Trilione di alberi

", "shareTextTitle": "Smettila di parlare. Avviare l'impianto", - "textToShareLinkedin": "Unisciti a {{name}} e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica", + "textToShareLinkedin": "Unisciti a {name} e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica", "textToShareForMe": "Unisciti a me e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica", "donationTokenInvalid": "Il gettone di donazione fornito non è valido.", "giftTo": "Regalo a", @@ -81,7 +81,7 @@ "somethingWentWrong": "Qualcosa è andato storto, per favore riprova presto!", "underMaintenance": "L'applicazione è in fase di manutenzione, si prega di controllare status.plant-for-the-planet.org per i dettagli", "waitingConfirmation": "Siamo attualmente in attesa di una conferma da parte della sua banca e le invieremo un'e-mail a breve. Si senta libero di chiudere questa pagina.", - "yourDonationRef": "Il riferimento della tua donazione è {{donationID}}", + "yourDonationRef": "Il riferimento della tua donazione è {donationID}", "payWithGiroPay": "Paga con GiroPay", "payWithSofort": "Paga con SOFORT", "donationFailed": "Donazione fallita", @@ -98,4 +98,4 @@ "orgNamePublished": "Il nome dell'azienda è visibile sulla nostra classifica e sull'app.", "aboutProject": "Circa il progetto" } -} \ No newline at end of file +} diff --git a/public/static/locales/it/editProfile.json b/public/static/locales/it/editProfile.json index 424bb8c2f1..75f993b62e 100644 --- a/public/static/locales/it/editProfile.json +++ b/public/static/locales/it/editProfile.json @@ -1,8 +1,8 @@ { "EditProfile": { - "loginTitle": "{{log}} - Login", + "loginTitle": "{log} - Login", "signUpText": "Completa l'iscrizione", - "profileTypes": "{{item.title}}", + "profileTypes": "{item.title}", "createAccount": "Crea un conto", "individual": "Individuale", "tpo": "Organizzazione di riforestazione", @@ -24,7 +24,7 @@ "cancel": "Annulla", "fieldLabels": { "profileType": "Sono un", - "name": "Nome di {{type}}", + "name": "Nome di {type}", "website": "Sito web", "privateAccount": "Conto privato", "subscribe": "Iscriviti alle notizie via e-mail" @@ -34,4 +34,4 @@ "websiteInvalid": "Inserire l'URL del sito web valido" } } -} \ No newline at end of file +} diff --git a/public/static/locales/it/maps.json b/public/static/locales/it/maps.json index 390715ceea..90fb345f1e 100644 --- a/public/static/locales/it/maps.json +++ b/public/static/locales/it/maps.json @@ -38,9 +38,9 @@ "plantationDensityFormula": "Densità di piantagione = No. di alberi / area di piantagione", "unknown": "Sconosciuto", "showWholeArea": "Mostra tutta l'area", - "daysAgo": "{{days}} giorni fa", + "daysAgo": "{days} giorni fa", "today": "Oggi", "yesterday": "Ieri", "clickForDetails": "Clicca per i dettagli" } -} \ No newline at end of file +} diff --git a/public/static/locales/it/me.json b/public/static/locales/it/me.json index aa9331c8c7..caebba86a5 100644 --- a/public/static/locales/it/me.json +++ b/public/static/locales/it/me.json @@ -8,7 +8,7 @@ "registerTreesDescription": "Registrate gli alberi che avete piantato voi stessi, ad esempio nel vostro giardino.", "redeem": "Riscatta", "myForest": "La mia foresta", - "giftToGiftee": "Regalo a {{gifteeName}}", + "giftToGiftee": "Regalo a {gifteeName}", "settingManageProject": "Gestire progetti", "deleteAccount": "Cancellare il conto", "userTree": "Registrare gli alberi", @@ -33,11 +33,11 @@ "dragHere": "o trascinare qui", "contribNotFound": "Contributo non trovato", "errorOccured": "Errore avvenuto", - "contribSuccess": "Aggiunto con successo {{treeCount}} {{treeSpecies}} 🌳 da {{plantDate}}", + "contribSuccess": "Aggiunto con successo {treeCount} {treeSpecies} 🌳 da {plantDate}", "moreThanOne": "minimo 1 albero richiesto", "registered": "Registrato", "receivedTrees": "Alberi ricevuti", - "receivedFrom": "Ricevuto da {{name}}", + "receivedFrom": "Ricevuto da {name}", "redeemedTrees": "Alberi Riscattati", "myAccount": "Il mio conto", "all": "Tutti", @@ -70,10 +70,10 @@ "referred": "Riferito a", "in-dispute": "In discussione", "dispute-lost": "Disputa persa", - "nameForest": "{{name}}'s Forest", + "nameForest": "{name}'s Forest", "taxReceipt": "Ricevuta fiscale", "setTarget": "Impostare l'obiettivo", "targetSave": "Salva", "targetErrorMessage": "Il numero deve essere positivo o superiore a zero" } -} \ No newline at end of file +} diff --git a/public/static/locales/it/planet.json b/public/static/locales/it/planet.json index 87e8592235..3bc414451c 100644 --- a/public/static/locales/it/planet.json +++ b/public/static/locales/it/planet.json @@ -1,7 +1,7 @@ { "Planet": { "treesDonated": "Alberi donati dal 2019", - "plantedByTPO": "Pianificato dalle {{projects}}+ organizzazioni partecipanti", + "plantedByTPO": "Pianificato dalle {projects}+ organizzazioni partecipanti", "plantedGlobally": "Alberi, che sono riportati a noi da 2006", "forestLoss": "Perdita netta di foreste negli ultimi 12 mesi", "estimateOf": "Stima della perdita annuale dell'albero di", @@ -13,4 +13,4 @@ "treesDonatedDescription": "Tutte le donazioni di alberi elaborate da Plant-for-the-Planet dal 2019. Include alberi donati direttamente attraverso le nostre app, nonché grandi donazioni private e aziendali. Queste donazioni non sono andate tutte a progetti gestiti direttamente da Plant-for-the-Planet, ma tutte le organizzazioni di restauro partecipanti. Alcuni alberi donati potrebbero non essere ancora stati piantati.", "treesPlantedDescription": "Tutti gli alberi donati attraverso Plant-for-the-Planet e altri alberi segnalati come piantati dalle organizzazioni di restauro partecipanti" } -} \ No newline at end of file +} diff --git a/public/static/locales/pt-BR/common.json b/public/static/locales/pt-BR/common.json index 2dd9b5dd1f..71e9054f52 100644 --- a/public/static/locales/pt-BR/common.json +++ b/public/static/locales/pt-BR/common.json @@ -1,9 +1,10 @@ { "Common": { + "tree": "{count, plural, =0 {Árvores} =1 {Árvore} other {Árvores}}", "tree_one": "Árvore", "tree_other": "Árvores", - "by": "Por {{tpoName}}", - "to_project_by_tpo": "Para {{projectName}} por {{tpoName}}", + "by": "Por {tpoName}", + "to_project_by_tpo": "Para {projectName} por {tpoName}", "for": "para", "trees": "Árvores", "planted": "plantadas", @@ -67,10 +68,10 @@ "aboutUs": "Sobre nós", "alternativelyEditProfile": "Alternativamente, você pode marcar seu perfil como privado, visitando Editar Perfil.", "deleteAccountConsent": "Ao clicar em excluir, estou solicitando que Plant-for-the-Planet exclua todos os dados associados à minha conta. Os dados das doações podem ser mantidos por até oito anos. As árvores que eu tenha registrado não serão removidas, no entanto, serão anônimas e não poderão ser reclamadas novamente.", - "deleteIrreversible": "Eu também entendo que a exclusão de conta do {{email}} é irreversível.", + "deleteIrreversible": "Eu também entendo que a exclusão de conta do {email} é irreversível.", "goBack": "Voltar", - "deleteAccountMessage": "Para continuar com a exclusão, por favor digite `{{delete}}`", - "deleteAccountLabel": "Tipo: {{delete}}", + "deleteAccountMessage": "Para continuar com a exclusão, por favor digite `{delete}`", + "deleteAccountLabel": "Tipo: {delete}", "edit": "Editar", "howDoesThisWork": "Como que funciona?", "copiedToClipboard": "Copiado para o clipboard!", @@ -94,4 +95,4 @@ "internalServerError": "Erro do Servidor Interno - Por favor tente novamente mais tarde!", "reviewInfo": " O projeto foi inspecionado em uma revisão de campo de vários dias em <2>mês e atende aos nossos <5>padrões." } -} \ No newline at end of file +} diff --git a/public/static/locales/pt-BR/donate.json b/public/static/locales/pt-BR/donate.json index 6e97108de2..1a5b7f1a13 100644 --- a/public/static/locales/pt-BR/donate.json +++ b/public/static/locales/pt-BR/donate.json @@ -1,13 +1,13 @@ { "Donate": { - "fortreeCountTrees": "para {{treeCount}} Árvore", - "fortreeCountTrees_plural": "para {{treeCount}} Árvores", - "yourTreesPlantedByOnLocation": "A sua {{treeCount}} árvore será plantada por {{projectName}} em {{location}}.", - "yourTreesPlantedByOnLocation_plural": "As suas {{treeCount}} árvores serão plantadas por {{projectName}} em {{location}}.", - "myTreesPlantedByOnLocation": "A minha {{treeCount}} árvore está sendo plantada em {{location}}.", - "myTreesPlantedByOnLocation_plural": "Minhas {{treeCount}} árvores estão sendo plantadas em {{location}}.", + "fortreeCountTrees": "para {treeCount} Árvore", + "fortreeCountTrees_plural": "para {treeCount} Árvores", + "yourTreesPlantedByOnLocation": "A sua {treeCount} árvore será plantada por {projectName} em {location}.", + "yourTreesPlantedByOnLocation_plural": "As suas {treeCount} árvores serão plantadas por {projectName} em {location}.", + "myTreesPlantedByOnLocation": "A minha {treeCount} árvore está sendo plantada em {location}.", + "myTreesPlantedByOnLocation_plural": "Minhas {treeCount} árvores estão sendo plantadas em {location}.", "topProjects": "Principais projetos", - "allCountProjects": "Todos {{projectCount}} Projetos", + "allCountProjects": "Todos {projectCount} Projetos", "searchProjects": "Pesquisar Projetos", "viewProfile": "Ver Perfil", "contactDetails": "Detalhes para contato", @@ -18,7 +18,7 @@ "taxDeductionNotYetAvailable": "A dedução fiscal ainda não está disponível para ", "taxDeductionNotAvailableForProject": "A dedução fiscal ainda não está disponível para este projeto", "youWillReceiveTaxDeduction": "Você receberá um recibo de dedução de imposto para ", - "toProjectByOrganization": "Para {{projectName}} por {{organizationName}}", + "toProjectByOrganization": "Para {projectName} por {organizationName}", "firstName": "Nome", "lastName": "Sobrenome", "email": "Email", @@ -54,11 +54,11 @@ "selectCurrency": "Selecione a sua moeda", "treeDonationWithPFP": "Doação de árvores com Plant-for-the-Planet", "unavailable": "não disponível", - "donationSuccessfulWith": "A sua doação de {{currency}} {{totalAmount}}foi realizada com sucesso com {{paymentTypeUsed}}.", - "donationSuccessful": "A sua doação de {{currency}}{{totalAmount}} deu certo!", - "giftSentMessage": "Enviamos um e-mail para {{recipientName}} sobre o presente.", + "donationSuccessfulWith": "A sua doação de {currency} {totalAmount}foi realizada com sucesso com {paymentTypeUsed}.", + "donationSuccessful": "A sua doação de {currency}{totalAmount} deu certo!", + "giftSentMessage": "Enviamos um e-mail para {recipientName} sobre o presente.", "contributionMessage": "Talvez você vai visitá-los um dia destes? Nesse meio tempo, que tal conectar os seus amigos a algumas árvores, depois de contar um pouco sobre as suas?", - "plantTreesAtURL": "Plante árvores em {{url}}", + "plantTreesAtURL": "Plante árvores em {url}", "copiedToClipboard": "Texto copiado para o Clipboard!", "noProjectsFound": "Nenhum projeto encontrado", "inTimeOfTaxReturns": "a tempo das declarações de impostos.", @@ -66,10 +66,10 @@ "giftToName": "Presente para", "thisDonationSupports": "Esta doação apoia", "plantTreesWith": "Plante árvores com", - "textToShare": "Junte-se a {{name}} e a milhares de outras pessoas que estão plantando um trilhão de árvores para enfrentar a crise climática #StopTalkingStartPlanting #TrillionTrees @trilliontrees", + "textToShare": "Junte-se a {name} e a milhares de outras pessoas que estão plantando um trilhão de árvores para enfrentar a crise climática #StopTalkingStartPlanting #TrillionTrees @trilliontrees", "thankyouHeaderText": "Estamos a caminho de um \n

Trilhão de Árvores

", "shareTextTitle": "Pare de falar. Comece a plantar", - "textToShareLinkedin": "Junte-se a {{name}} e a milhares de outras pessoas que estão plantando um trilhão de árvores para enfrentar a crise climática", + "textToShareLinkedin": "Junte-se a {name} e a milhares de outras pessoas que estão plantando um trilhão de árvores para enfrentar a crise climática", "textToShareForMe": "Junte-se a mim e a milhares de outras pessoas para plantar um trilhão de árvores e assim enfrentar a crise climática", "donationTokenInvalid": "O token de doação fornecido é inválida.", "giftTo": "Presente para", @@ -81,7 +81,7 @@ "somethingWentWrong": "Algo deu errado, por favor tente novamente em breve!", "underMaintenance": "App está em manutenção, por favor acesse status.plant-for-the-planet.org para mais detalhes", "waitingConfirmation": "Estamos atualmente à espera de uma confirmação do seu banco e te enviaremos um e-mail em breve. Por favor, sinta-se à vontade para fechar esta página.", - "yourDonationRef": "A sua referência de doação é {{donationID}}", + "yourDonationRef": "A sua referência de doação é {donationID}", "payWithGiroPay": "Doe com GiroPay", "payWithSofort": "Doe com SOFORT", "donationFailed": "Doação falhou", @@ -114,4 +114,4 @@ "filters": "Filtros", "perM2": "por m²" } -} \ No newline at end of file +} diff --git a/public/static/locales/pt-BR/editProfile.json b/public/static/locales/pt-BR/editProfile.json index 5b70032b1f..d70b9bfcb9 100644 --- a/public/static/locales/pt-BR/editProfile.json +++ b/public/static/locales/pt-BR/editProfile.json @@ -1,8 +1,8 @@ { "EditProfile": { - "loginTitle": "{{log}} - Login", + "loginTitle": "{log} - Login", "signUpText": "Inscrição completa", - "profileTypes": "{{item.title}}", + "profileTypes": "{item.title}", "createAccount": "Criar Conta", "individual": "Pessoa", "tpo": "Organização de restauração", @@ -26,7 +26,7 @@ "termAndConditionError": "Por favor Aceite os Termos e Condições", "fieldLabels": { "profileType": "Eu sou um(a)", - "name": "Nome do {{type}}", + "name": "Nome do {type}", "website": "Website", "privateAccount": "Conta Privada", "subscribe": "Inscreva-se para receber notícias por e-mail" @@ -36,4 +36,4 @@ "websiteInvalid": "Por favor, digite o URL válido do site" } } -} \ No newline at end of file +} diff --git a/public/static/locales/pt-BR/login.json b/public/static/locales/pt-BR/login.json index f27432bba4..06f3e43c03 100644 --- a/public/static/locales/pt-BR/login.json +++ b/public/static/locales/pt-BR/login.json @@ -1,9 +1,9 @@ { "Login": { - "loginTitle": "{{log}} - Login", + "loginTitle": "{log} - Login", "signUpText": "Inscrição completa", - "profileTypes": "{{item.title}}", - "profileName": "Nome do {{type}}", + "profileTypes": "{item.title}", + "profileName": "Nome do {type}", "createAccount": "Criar Conta", "individual": "Individual", "tpo": "Organização de restauração", @@ -13,4 +13,4 @@ "profileCreationFailed": "Erro na criação do perfil. Por favor, tente novamente.", "profileCreationError": "Erro na criação do perfil." } -} \ No newline at end of file +} diff --git a/public/static/locales/pt-BR/manageProjects.json b/public/static/locales/pt-BR/manageProjects.json index a205ce2012..1d1c740631 100644 --- a/public/static/locales/pt-BR/manageProjects.json +++ b/public/static/locales/pt-BR/manageProjects.json @@ -176,8 +176,8 @@ "mainChallengeInfo": "O maior desafio que este projeto está enfrentando.", "motivationInfo": "A motivação para proteger esse ecossistema em específico.", "hectar": "hectares", - "validation": "{{fieldName}} é Inválido", + "validation": "{fieldName} é Inválido", "plantingDensityValidation": "Por favor introduza Densidade do plantio", "onlyEnglish": "Por favor, crie/edite projetos apenas em inglês. As traduções de Projetos são geridas automaticamente pela Plant-for-the-Planet." } -} \ No newline at end of file +} diff --git a/public/static/locales/pt-BR/maps.json b/public/static/locales/pt-BR/maps.json index f2f5189148..440a956af9 100644 --- a/public/static/locales/pt-BR/maps.json +++ b/public/static/locales/pt-BR/maps.json @@ -38,10 +38,10 @@ "plantationDensityFormula": "Densidade de plantio = Nº de árvores / Área de plantio", "unknown": "Desconhecido", "showWholeArea": "Mostrar toda a área", - "daysAgo": "{{days}} dias atrás", + "daysAgo": "{days} dias atrás", "today": "Hoje", "yesterday": "Ontem", "clickForDetails": "Clique para Detalhes", "treeMapper": "TreeMapper" } -} \ No newline at end of file +} diff --git a/public/static/locales/pt-BR/me.json b/public/static/locales/pt-BR/me.json index 9195b22c46..52a517db3e 100644 --- a/public/static/locales/pt-BR/me.json +++ b/public/static/locales/pt-BR/me.json @@ -8,7 +8,7 @@ "registerTreesDescription": "Registre as árvores que você mesmo plantou, por exemplo, no seu quintal.", "redeem": "Resgate", "myForest": "Minha Floresta", - "giftToGiftee": "Presente para {{gifteeName}}", + "giftToGiftee": "Presente para {gifteeName}", "settingManageProject": "Gerenciar Projetos", "deleteAccount": "Excluir conta", "userTree": "Registrar Árvores", @@ -33,11 +33,11 @@ "dragHere": "ou arraste aqui", "contribNotFound": "Contribuição não encontrada", "errorOccured": "Erro Ocorrido", - "contribSuccess": "Adicionado com sucesso {{treeCount}} {{treeSpecies}} 🌳 de {{plantDate}}", + "contribSuccess": "Adicionado com sucesso {treeCount} {treeSpecies} 🌳 de {plantDate}", "moreThanOne": "mínimo 1 árvore necessária", "registered": "Registado em", "receivedTrees": "Árvores Recebidas", - "receivedFrom": "Recebido de {{name}}", + "receivedFrom": "Recebido de {name}", "redeemedTrees": "Árvores Redimidas", "myAccount": "Minha Conta", "all": "Todos", @@ -86,7 +86,7 @@ "pausedUntil": "Pausado até", "pauseUntilDate": "Pausa até a data selecionada", "reactivateDonationConfirmation": "Reativar Doação", - "reactivateDonationDescription": "A sua doação será reativada e será feita na data {{currentPeriodEnds}}", + "reactivateDonationDescription": "A sua doação será reativada e será feita na data {currentPeriodEnds}", "cancelDonationConfirmation": "Cancelar Doação", "cancelDonationDescription": "Uma vez cancelada a doação, esta não pode ser reiniciada.", "cancelDonationPaypalDescription": "Esta doação será cancelada imediatamente, não podendo ser reiniciada.", @@ -111,7 +111,7 @@ "referred": "Referido", "in-dispute": "Em Disputa", "dispute-lost": "Disputa perdida", - "nameForest": "A Floresta de {{name}}", + "nameForest": "A Floresta de {name}", "taxReceipt": "Recibo do imposto", "history": "História", "recurrency": "Doações Recorrentes", @@ -222,4 +222,4 @@ "apiKeyMessage3": "A regeneração de uma chave API irá invalidar imediatamente a sua chave API existente.", "regenerateKey": "Regenerar chave" } -} \ No newline at end of file +} diff --git a/public/static/locales/pt-BR/planet.json b/public/static/locales/pt-BR/planet.json index 9e0e5fd484..dbe9d2589b 100644 --- a/public/static/locales/pt-BR/planet.json +++ b/public/static/locales/pt-BR/planet.json @@ -1,7 +1,7 @@ { "Planet": { "treesDonated": "Árvores doadas desde 2019", - "plantedByTPO": "Plantado pelas {{projects}}+ organizações participantes", + "plantedByTPO": "Plantado pelas {projects}+ organizações participantes", "plantedGlobally": "Árvores registradas na plataforma desde 2006", "forestLoss": "Perda florestal líquida nos últimos 12 meses", "estimateOf": "Estimativa da perda anual de árvores por", @@ -13,4 +13,4 @@ "treesDonatedDescription": "Todas as doações de árvores processadas pela Plant-for-the-Planet desde 2019. Inclui árvores doadas diretamente através de nossas aplicações, assim como grandes doações privadas e corporativas. Estas doações não foram todas para projectos geridos diretamente pela Plant-for-the-Planet, mas para todas as organizações de restauração participantes. Algumas árvores doadas podem ainda não ter sido plantadas.", "treesPlantedDescription": "Todas as árvores doadas através de Plant-for-the-Planet e outras árvores reportadas como plantadas pelas organizações de restauração participantes." } -} \ No newline at end of file +} diff --git a/public/static/locales/pt-BR/treemapper.json b/public/static/locales/pt-BR/treemapper.json index b7d81aa351..4db2af14c3 100644 --- a/public/static/locales/pt-BR/treemapper.json +++ b/public/static/locales/pt-BR/treemapper.json @@ -24,7 +24,7 @@ "m": "m", "plantingLocation": "Local de plantio", "reviewAndSubmit": "Rever e Submeter", - "sampleTree": "Amostra da árvore #{{number}}", + "sampleTree": "Amostra da árvore #{number}", "import": "Importar", "editor": "Editor", "draw": "Desenhar", @@ -61,4 +61,4 @@ "aliases": "Apelidos", "external": "Externo" } -} \ No newline at end of file +} From 3a2cc88f2310247e0af771033f3e29f4da67ae67 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 11 Mar 2024 12:07:28 +0530 Subject: [PATCH 27/70] feat: integrates next-intl with storybook - only supports english/german for now --- .storybook/i18n.js | 112 ++++++++++++++++++++++++++++++++++++------ .storybook/preview.js | 15 ++---- 2 files changed, 101 insertions(+), 26 deletions(-) diff --git a/.storybook/i18n.js b/.storybook/i18n.js index a697285ee5..cbea91715f 100644 --- a/.storybook/i18n.js +++ b/.storybook/i18n.js @@ -1,18 +1,98 @@ -import i18n from 'i18next'; -import Backend from 'i18next-http-backend'; -import LanguageDetector from 'i18next-browser-languagedetector'; -import { initReactI18next } from 'react-i18next'; +import bulkCodes from '../public/static/locales/en/bulkCodes.json'; +import common from '../public/static/locales/en/common.json'; +import country from '../public/static/locales/en/country.json'; +import donate from '../public/static/locales/en/donate.json'; +import donationLink from '../public/static/locales/en/donationLink.json'; +import editProfile from '../public/static/locales/en/editProfile.json'; +import giftfunds from '../public/static/locales/en/giftfunds.json'; +import leaderboard from '../public/static/locales/en/leaderboard.json'; +import managePayouts from '../public/static/locales/en/managePayouts.json'; +import manageProjects from '../public/static/locales/en/manageProjects.json'; +import maps from '../public/static/locales/en/maps.json'; +import me from '../public/static/locales/en/me.json'; +import planet from '../public/static/locales/en/planet.json'; +import planetcash from '../public/static/locales/en/planetcash.json'; +import profile from '../public/static/locales/en/profile.json'; +import redeem from '../public/static/locales/en/redeem.json'; +import registerTrees from '../public/static/locales/en/registerTrees.json'; +import tenants from '../public/static/locales/en/tenants.json'; +import treemapper from '../public/static/locales/en/treemapper.json'; +import treemapperAnalytics from '../public/static/locales/en/treemapperAnalytics.json'; -i18n - .use(Backend) - .use(LanguageDetector) - .use(initReactI18next) - .init({ - fallbackLng: 'en', - debug: true, - backend: { - loadPath: '/static/locales/{{lng}}/{{ns}}.json', - }, - }); +import bulkCodesDE from '../public/static/locales/de/bulkCodes.json'; +import commonDE from '../public/static/locales/de/common.json'; +import countryDE from '../public/static/locales/de/country.json'; +import donateDE from '../public/static/locales/de/donate.json'; +import donationLinkDE from '../public/static/locales/de/donationLink.json'; +import editProfileDE from '../public/static/locales/de/editProfile.json'; +import giftfundsDE from '../public/static/locales/de/giftfunds.json'; +import leaderboardDE from '../public/static/locales/de/leaderboard.json'; +import managePayoutsDE from '../public/static/locales/de/managePayouts.json'; +import manageProjectsDE from '../public/static/locales/de/manageProjects.json'; +import mapsDE from '../public/static/locales/de/maps.json'; +import meDE from '../public/static/locales/de/me.json'; +import planetDE from '../public/static/locales/de/planet.json'; +import planetcashDE from '../public/static/locales/de/planetcash.json'; +import profileDE from '../public/static/locales/de/profile.json'; +import redeemDE from '../public/static/locales/de/redeem.json'; +import registerTreesDE from '../public/static/locales/de/registerTrees.json'; +import tenantsDE from '../public/static/locales/de/tenants.json'; +import treemapperDE from '../public/static/locales/de/treemapper.json'; +import treemapperAnalyticsDE from '../public/static/locales/de/treemapperAnalytics.json'; -export default i18n; +import deepmerge from 'deepmerge'; + +const messages_en = { + ...bulkCodes, + ...common, + ...country, + ...donate, + ...donationLink, + ...editProfile, + ...giftfunds, + ...leaderboard, + ...managePayouts, + ...manageProjects, + ...maps, + ...me, + ...planet, + ...planetcash, + ...profile, + ...redeem, + ...registerTrees, + ...tenants, + ...treemapper, + ...treemapperAnalytics, +}; + +const messages_de = { + ...bulkCodesDE, + ...commonDE, + ...countryDE, + ...donateDE, + ...donationLinkDE, + ...editProfileDE, + ...giftfundsDE, + ...leaderboardDE, + ...managePayoutsDE, + ...manageProjectsDE, + ...mapsDE, + ...meDE, + ...planetDE, + ...planetcashDE, + ...profileDE, + ...redeemDE, + ...registerTreesDE, + ...tenantsDE, + ...treemapperDE, + ...treemapperAnalyticsDE, +}; + +const getMessages = (locale) => { + if (locale === 'de') { + return deepmerge(messages_en, messages_de); + } + return messages_en; +}; + +export default getMessages; diff --git a/.storybook/preview.js b/.storybook/preview.js index 4fd43f9267..56335755cd 100644 --- a/.storybook/preview.js +++ b/.storybook/preview.js @@ -3,9 +3,8 @@ import './storybook.scss'; import { ThemeProvider as MUIThemeProvider } from '@mui/material'; import materialTheme from '../src/theme/themeStyles'; import { ThemeProvider } from '@storybook/theming'; -import { I18nextProvider } from 'react-i18next'; -import i18n from './i18n'; -import { useEffect } from 'react'; +import getMessages from './i18n'; +import { NextIntlClientProvider } from 'next-intl'; // import { ThemeProvider } from 'emotion-theming'; @@ -16,20 +15,16 @@ import { useEffect } from 'react'; */ export const decorators = [ (Story, context) => { - const { locale } = context.globals; - - useEffect(() => { - i18n.changeLanguage(locale); - }, [locale]); + const locale = context.globals.locale; return ( - + - + ); }, ]; From a64fe1d52ee5880dc01c2c048c3e778e9502f385 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 11 Mar 2024 12:52:36 +0530 Subject: [PATCH 28/70] refactor: remove unused dependencies/code relating to i18next - removes commented out code for i18next as well --- i18n-config.ts | 1 + middleware.ts | 2 - next-i18next.config.js | 10 - next.config.js | 2 - package-lock.json | 860 +++++++++++++-------------- package.json | 4 - pages/_app.tsx | 20 - pages/sites/[slug]/[locale]/all.tsx | 11 +- pages/sites/[slug]/[locale]/home.tsx | 5 +- server.js | 6 - 10 files changed, 431 insertions(+), 490 deletions(-) delete mode 100644 next-i18next.config.js diff --git a/i18n-config.ts b/i18n-config.ts index 94485a80e7..57d67fd242 100644 --- a/i18n-config.ts +++ b/i18n-config.ts @@ -1,3 +1,4 @@ +// i18n config for next-intl export const i18nConfig = { defaultLocale: 'en', locales: ['en', 'de', 'cs', 'es', 'fr', 'it', 'pt-BR'], diff --git a/middleware.ts b/middleware.ts index 04acd8f7a8..791782ebde 100644 --- a/middleware.ts +++ b/middleware.ts @@ -3,9 +3,7 @@ import { getTenantSlug } from './src/utils/multiTenancy/helpers'; import { match as matchLocale } from '@formatjs/intl-localematcher'; import Negotiator from 'negotiator'; import { i18nConfig, Locale } from './i18n-config'; -// import createIntlMiddleware from 'next-intl/middleware'; -// TODO - update function to consider cookie function getLocale(request: NextRequest): string | undefined { // Negotiator expects plain object so we need to transform headers const negotiatorHeaders: Record = {}; diff --git a/next-i18next.config.js b/next-i18next.config.js deleted file mode 100644 index c295d88c8e..0000000000 --- a/next-i18next.config.js +++ /dev/null @@ -1,10 +0,0 @@ -const path = require('path'); - -module.exports = { - i18n: { - localeDetection: false, - defaultLocale: 'en', - locales: ['en', 'de', 'cs', 'es', 'fr', 'it', 'pt-BR'], - }, - localePath: path.resolve('./public/static/locales'), -}; diff --git a/next.config.js b/next.config.js index 5d6ee7805f..3b476cf901 100644 --- a/next.config.js +++ b/next.config.js @@ -1,7 +1,6 @@ const withBundleAnalyzer = require('@next/bundle-analyzer')({ enabled: process.env.ANALYZE === 'true', }); -// const { i18n } = require('./next-i18next.config'); // Use the SentryWebpack plugin to upload the source maps during build step const SentryWebpackPlugin = require('@sentry/webpack-plugin'); @@ -49,7 +48,6 @@ const hasAssetPrefix = /** @type {import('next').NextConfig} */ const nextConfig = { productionBrowserSourceMaps: true, - // i18n, serverRuntimeConfig: { rootDir: __dirname, }, diff --git a/package-lock.json b/package-lock.json index 399db50aa6..b9ee93a253 100644 --- a/package-lock.json +++ b/package-lock.json @@ -67,7 +67,6 @@ "negotiator": "^0.6.3", "next": "^13.5.6", "next-connect": "^0.13.0", - "next-i18next": "^12.1.0", "next-intl": "^3.5.3", "next-useragent": "^2.7.0", "node-cache": "^5.1.2", @@ -83,7 +82,6 @@ "react-dropzone": "^11.4.0", "react-gtm-module": "^2.0.11", "react-hook-form": "^7.44.2", - "react-i18next": "^11.16.10", "react-insta-stories": "^2.2.5", "react-json-editor-ajrm": "^2.5.13", "react-lazyload": "^3.2.0", @@ -148,8 +146,6 @@ "eslint-plugin-react-hooks": "^4.1.2", "eslint-plugin-storybook": "^0.6.15", "husky": "^8.0.3", - "i18next-browser-languagedetector": "^7.2.0", - "i18next-http-backend": "^2.4.2", "next-unused": "0.0.6", "prettier": "^2.0.5", "prisma": "^4.13.0", @@ -173,13 +169,13 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -440,9 +436,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.0.tgz", + "integrity": "sha512-efwOM90nCG6YeT8o3PCyBVSxRfmILxCNL+TNI8CGQl7a62M0Wd9VkV+XHwIlkOz1r4b+lxu6gBjdWiOMdUCrCQ==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -3691,14 +3687,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", - "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -3739,9 +3735,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz", - "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -4088,14 +4084,14 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-beta.37", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.37.tgz", - "integrity": "sha512-/o3anbb+DeCng8jNsd3704XtmmLDZju1Fo8R2o7ugrVtPQ/QpcqddwKNzKPZwa0J5T8YNW3ZVuHyQgbTnQLisQ==", + "version": "5.0.0-beta.38", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.38.tgz", + "integrity": "sha512-AsjD6Y1X5A1qndxz8xCcR8LDqv31aiwlgWMPxFAX/kCKiIGKlK65yMeVZ62iQr/6LBz+9hSKLiD1i4TZdAHKcQ==", "dependencies": { "@babel/runtime": "^7.23.9", "@floating-ui/react-dom": "^2.0.8", "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.11", + "@mui/utils": "^5.15.12", "@popperjs/core": "^2.11.8", "clsx": "^2.1.0", "prop-types": "^15.8.1" @@ -4119,18 +4115,18 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.11.tgz", - "integrity": "sha512-JVrJ9Jo4gyU707ujnRzmE8ABBWpXd6FwL9GYULmwZRtfPg89ggXs/S3MStQkpJ1JRWfdLL6S5syXmgQGq5EDAw==", + "version": "5.15.12", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.12.tgz", + "integrity": "sha512-brRO+tMFLpGyjEYHrX97bzqeF6jZmKpqqe1rY0LyIHAwP6xRVzh++zSecOQorDOCaZJg4XkGT9xfD+RWOWxZBA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" } }, "node_modules/@mui/icons-material": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.11.tgz", - "integrity": "sha512-R5ZoQqnKpd+5Ew7mBygTFLxgYsQHPhgR3TDXSgIHYIjGzYuyPLmGLSdcPUoMdi6kxiYqHlpPj4NJxlbaFD0UHA==", + "version": "5.15.12", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.12.tgz", + "integrity": "sha512-3BXiDlOd3AexZoEXa/VqpIpVIvosCzjLHsdMWzKMXbZdnBiJjmb9ECdqfjn5SpTClO49qvkKLhkTqdBH3fSFGw==", "dependencies": { "@babel/runtime": "^7.23.9" }, @@ -4153,15 +4149,15 @@ } }, "node_modules/@mui/lab": { - "version": "5.0.0-alpha.166", - "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.166.tgz", - "integrity": "sha512-a+0yorrgxLIgfKhShVKQk0/5CnB4KBhMQ64SvEB+CsvKAKKJzjIU43m2nMqdBbWzfnEuj6wR9vQ9kambdn3ZKA==", + "version": "5.0.0-alpha.167", + "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.167.tgz", + "integrity": "sha512-BNQJ7fBBvL68WGVnzAhbtTmabSuJDXaILr9dz/3RNK4TgGXPgWCAr7qtJeUdc4p1t7c4Z1ifG8UwgqD+5hzMNg==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/base": "5.0.0-beta.37", - "@mui/system": "^5.15.11", + "@mui/base": "5.0.0-beta.38", + "@mui/system": "^5.15.12", "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.11", + "@mui/utils": "^5.15.12", "clsx": "^2.1.0", "prop-types": "^15.8.1" }, @@ -4193,16 +4189,16 @@ } }, "node_modules/@mui/material": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.11.tgz", - "integrity": "sha512-FA3eEuEZaDaxgN3CgfXezMWbCZ4VCeU/sv0F0/PK5n42qIgsPVD6q+j71qS7/62sp6wRFMHtDMpXRlN+tT/7NA==", + "version": "5.15.12", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.12.tgz", + "integrity": "sha512-vXJGg6KNKucsvbW6l7w9zafnpOp0CWc0Wx4mDykuABTpQ5QQBnZxP7+oB4yAS1hDZQ1WobbeIl0CjxK4EEahkA==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/base": "5.0.0-beta.37", - "@mui/core-downloads-tracker": "^5.15.11", - "@mui/system": "^5.15.11", + "@mui/base": "5.0.0-beta.38", + "@mui/core-downloads-tracker": "^5.15.12", + "@mui/system": "^5.15.12", "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.11", + "@mui/utils": "^5.15.12", "@types/react-transition-group": "^4.4.10", "clsx": "^2.1.0", "csstype": "^3.1.3", @@ -4237,12 +4233,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.11.tgz", - "integrity": "sha512-jY/696SnSxSzO1u86Thym7ky5T9CgfidU3NFJjguldqK4f3Z5S97amZ6nffg8gTD0HBjY9scB+4ekqDEUmxZOA==", + "version": "5.15.12", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.12.tgz", + "integrity": "sha512-cqoSo9sgA5HE+8vZClbLrq9EkyOnYysooepi5eKaKvJ41lReT2c5wOZAeDDM1+xknrMDos+0mT2zr3sZmUiRRA==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.15.11", + "@mui/utils": "^5.15.12", "prop-types": "^15.8.1" }, "engines": { @@ -4294,15 +4290,15 @@ } }, "node_modules/@mui/system": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.11.tgz", - "integrity": "sha512-9j35suLFq+MgJo5ktVSHPbkjDLRMBCV17NMBdEQurh6oWyGnLM4uhU4QGZZQ75o0vuhjJghOCA1jkO3+79wKsA==", + "version": "5.15.12", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.12.tgz", + "integrity": "sha512-/pq+GO6yN3X7r3hAwFTrzkAh7K1bTF5r8IzS79B9eyKJg7v6B/t4/zZYMR6OT9qEPtwf6rYN2Utg1e6Z7F1OgQ==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.15.11", + "@mui/private-theming": "^5.15.12", "@mui/styled-engine": "^5.15.11", "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.11", + "@mui/utils": "^5.15.12", "clsx": "^2.1.0", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -4346,9 +4342,9 @@ } }, "node_modules/@mui/utils": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.11.tgz", - "integrity": "sha512-D6bwqprUa9Stf8ft0dcMqWyWDKEo7D+6pB1k8WajbqlYIRA8J8Kw9Ra7PSZKKePGBGWO+/xxrX1U8HpG/aXQCw==", + "version": "5.15.12", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.12.tgz", + "integrity": "sha512-8SDGCnO2DY9Yy+5bGzu00NZowSDtuyHP4H8gunhHGQoIlhlY2Z3w64wBzAOLpYw/ZhJNzksDTnS/i8qdJvxuow==", "dependencies": { "@babel/runtime": "^7.23.9", "@types/prop-types": "^15.7.11", @@ -5567,9 +5563,9 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.24", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", - "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==" + "version": "1.0.0-next.25", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", + "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==" }, "node_modules/@popperjs/core": { "version": "2.11.8", @@ -6884,9 +6880,9 @@ } }, "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { - "version": "18.19.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.20.tgz", - "integrity": "sha512-SKXZvI375jkpvAj8o+5U2518XQv76mAsixqfXiVyWyXZbVWQK25RurFovYpVIxVzul0rZoH58V/3SkEnm7s3qA==", + "version": "18.19.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.22.tgz", + "integrity": "sha512-p3pDIfuMg/aXBmhkyanPshdfJuX5c5+bQjYLIikPLXAUycEogij/c50n/C+8XOA5L93cU4ZRXtn+dNQGi0IZqQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -7376,9 +7372,9 @@ } }, "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "18.19.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.20.tgz", - "integrity": "sha512-SKXZvI375jkpvAj8o+5U2518XQv76mAsixqfXiVyWyXZbVWQK25RurFovYpVIxVzul0rZoH58V/3SkEnm7s3qA==", + "version": "18.19.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.22.tgz", + "integrity": "sha512-p3pDIfuMg/aXBmhkyanPshdfJuX5c5+bQjYLIikPLXAUycEogij/c50n/C+8XOA5L93cU4ZRXtn+dNQGi0IZqQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -7465,9 +7461,9 @@ } }, "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "18.19.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.20.tgz", - "integrity": "sha512-SKXZvI375jkpvAj8o+5U2518XQv76mAsixqfXiVyWyXZbVWQK25RurFovYpVIxVzul0rZoH58V/3SkEnm7s3qA==", + "version": "18.19.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.22.tgz", + "integrity": "sha512-p3pDIfuMg/aXBmhkyanPshdfJuX5c5+bQjYLIikPLXAUycEogij/c50n/C+8XOA5L93cU4ZRXtn+dNQGi0IZqQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -7538,9 +7534,9 @@ } }, "node_modules/@storybook/core-webpack/node_modules/@types/node": { - "version": "18.19.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.20.tgz", - "integrity": "sha512-SKXZvI375jkpvAj8o+5U2518XQv76mAsixqfXiVyWyXZbVWQK25RurFovYpVIxVzul0rZoH58V/3SkEnm7s3qA==", + "version": "18.19.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.22.tgz", + "integrity": "sha512-p3pDIfuMg/aXBmhkyanPshdfJuX5c5+bQjYLIikPLXAUycEogij/c50n/C+8XOA5L93cU4ZRXtn+dNQGi0IZqQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -7752,9 +7748,9 @@ } }, "node_modules/@storybook/nextjs/node_modules/@types/node": { - "version": "18.19.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.20.tgz", - "integrity": "sha512-SKXZvI375jkpvAj8o+5U2518XQv76mAsixqfXiVyWyXZbVWQK25RurFovYpVIxVzul0rZoH58V/3SkEnm7s3qA==", + "version": "18.19.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.22.tgz", + "integrity": "sha512-p3pDIfuMg/aXBmhkyanPshdfJuX5c5+bQjYLIikPLXAUycEogij/c50n/C+8XOA5L93cU4ZRXtn+dNQGi0IZqQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -7896,9 +7892,9 @@ } }, "node_modules/@storybook/preset-react-webpack/node_modules/@types/node": { - "version": "18.19.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.20.tgz", - "integrity": "sha512-SKXZvI375jkpvAj8o+5U2518XQv76mAsixqfXiVyWyXZbVWQK25RurFovYpVIxVzul0rZoH58V/3SkEnm7s3qA==", + "version": "18.19.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.22.tgz", + "integrity": "sha512-p3pDIfuMg/aXBmhkyanPshdfJuX5c5+bQjYLIikPLXAUycEogij/c50n/C+8XOA5L93cU4ZRXtn+dNQGi0IZqQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -8067,9 +8063,9 @@ } }, "node_modules/@storybook/react/node_modules/@types/node": { - "version": "18.19.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.20.tgz", - "integrity": "sha512-SKXZvI375jkpvAj8o+5U2518XQv76mAsixqfXiVyWyXZbVWQK25RurFovYpVIxVzul0rZoH58V/3SkEnm7s3qA==", + "version": "18.19.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.22.tgz", + "integrity": "sha512-p3pDIfuMg/aXBmhkyanPshdfJuX5c5+bQjYLIikPLXAUycEogij/c50n/C+8XOA5L93cU4ZRXtn+dNQGi0IZqQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -8172,9 +8168,9 @@ } }, "node_modules/@swc/core": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.2.tgz", - "integrity": "sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.6.tgz", + "integrity": "sha512-A7iK9+1qzTCIuc3IYcS8gPHCm9bZVKUJrfNnwveZYyo6OFp3jLno4WOM2yBy5uqedgYATEiWgBYHKq37KrU6IA==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -8189,16 +8185,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.4.2", - "@swc/core-darwin-x64": "1.4.2", - "@swc/core-linux-arm-gnueabihf": "1.4.2", - "@swc/core-linux-arm64-gnu": "1.4.2", - "@swc/core-linux-arm64-musl": "1.4.2", - "@swc/core-linux-x64-gnu": "1.4.2", - "@swc/core-linux-x64-musl": "1.4.2", - "@swc/core-win32-arm64-msvc": "1.4.2", - "@swc/core-win32-ia32-msvc": "1.4.2", - "@swc/core-win32-x64-msvc": "1.4.2" + "@swc/core-darwin-arm64": "1.4.6", + "@swc/core-darwin-x64": "1.4.6", + "@swc/core-linux-arm-gnueabihf": "1.4.6", + "@swc/core-linux-arm64-gnu": "1.4.6", + "@swc/core-linux-arm64-musl": "1.4.6", + "@swc/core-linux-x64-gnu": "1.4.6", + "@swc/core-linux-x64-musl": "1.4.6", + "@swc/core-win32-arm64-msvc": "1.4.6", + "@swc/core-win32-ia32-msvc": "1.4.6", + "@swc/core-win32-x64-msvc": "1.4.6" }, "peerDependencies": { "@swc/helpers": "^0.5.0" @@ -8210,9 +8206,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.2.tgz", - "integrity": "sha512-1uSdAn1MRK5C1m/TvLZ2RDvr0zLvochgrZ2xL+lRzugLlCTlSA+Q4TWtrZaOz+vnnFVliCpw7c7qu0JouhgQIw==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.6.tgz", + "integrity": "sha512-bpggpx/BfLFyy48aUKq1PsNUxb7J6CINlpAUk0V4yXfmGnpZH80Gp1pM3GkFDQyCfq7L7IpjPrIjWQwCrL4hYw==", "cpu": [ "arm64" ], @@ -8226,9 +8222,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.2.tgz", - "integrity": "sha512-TYD28+dCQKeuxxcy7gLJUCFLqrwDZnHtC2z7cdeGfZpbI2mbfppfTf2wUPzqZk3gEC96zHd4Yr37V3Tvzar+lQ==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.6.tgz", + "integrity": "sha512-vJn+/ZuBTg+vtNkcmgZdH6FQpa0hFVdnB9bAeqYwKkyqP15zaPe6jfC+qL2y/cIeC7ASvHXEKrnCZgBLxfVQ9w==", "cpu": [ "x64" ], @@ -8242,9 +8238,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.2.tgz", - "integrity": "sha512-Eyqipf7ZPGj0vplKHo8JUOoU1un2sg5PjJMpEesX0k+6HKE2T8pdyeyXODN0YTFqzndSa/J43EEPXm+rHAsLFQ==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.6.tgz", + "integrity": "sha512-hEmYcB/9XBAl02MtuVHszhNjQpjBzhk/NFulnU33tBMbNZpy2TN5yTsitezMq090QXdDz8sKIALApDyg07ZR8g==", "cpu": [ "arm" ], @@ -8258,9 +8254,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.2.tgz", - "integrity": "sha512-wZn02DH8VYPv3FC0ub4my52Rttsus/rFw+UUfzdb3tHMHXB66LqN+rR0ssIOZrH6K+VLN6qpTw9VizjyoH0BxA==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.6.tgz", + "integrity": "sha512-/UCYIVoGpm2YVvGHZM2QOA3dexa28BjcpLAIYnoCbgH5f7ulDhE8FAIO/9pasj+kixDBsdqewHfsNXFYlgGJjQ==", "cpu": [ "arm64" ], @@ -8274,9 +8270,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.2.tgz", - "integrity": "sha512-3G0D5z9hUj9bXNcwmA1eGiFTwe5rWkuL3DsoviTj73TKLpk7u64ND0XjEfO0huVv4vVu9H1jodrKb7nvln/dlw==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.6.tgz", + "integrity": "sha512-LGQsKJ8MA9zZ8xHCkbGkcPSmpkZL2O7drvwsGKynyCttHhpwVjj9lguhD4DWU3+FWIsjvho5Vu0Ggei8OYi/Lw==", "cpu": [ "arm64" ], @@ -8290,9 +8286,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.2.tgz", - "integrity": "sha512-LFxn9U8cjmYHw3jrdPNqPAkBGglKE3tCZ8rA7hYyp0BFxuo7L2ZcEnPm4RFpmSCCsExFH+LEJWuMGgWERoktvg==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.6.tgz", + "integrity": "sha512-10JL2nLIreMQDKvq2TECnQe5fCuoqBHu1yW8aChqgHUyg9d7gfZX/kppUsuimqcgRBnS0AjTDAA+JF6UsG/2Yg==", "cpu": [ "x64" ], @@ -8306,9 +8302,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.2.tgz", - "integrity": "sha512-dp0fAmreeVVYTUcb4u9njTPrYzKnbIH0EhH2qvC9GOYNNREUu2GezSIDgonjOXkHiTCvopG4xU7y56XtXj4VrQ==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.6.tgz", + "integrity": "sha512-EGyjFVzVY6Do89x8sfah7I3cuP4MwtwzmA6OlfD/KASqfCFf5eIaEBMbajgR41bVfMV7lK72lwAIea5xEyq1AQ==", "cpu": [ "x64" ], @@ -8322,9 +8318,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.2.tgz", - "integrity": "sha512-HlVIiLMQkzthAdqMslQhDkoXJ5+AOLUSTV6fm6shFKZKqc/9cJvr4S8UveNERL9zUficA36yM3bbfo36McwnvQ==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.6.tgz", + "integrity": "sha512-gfW9AuXvwSyK07Vb8Y8E9m2oJZk21WqcD+X4BZhkbKB0TCZK0zk1j/HpS2UFlr1JB2zPKPpSWLU3ll0GEHRG2A==", "cpu": [ "arm64" ], @@ -8338,9 +8334,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.2.tgz", - "integrity": "sha512-WCF8faPGjCl4oIgugkp+kL9nl3nUATlzKXCEGFowMEmVVCFM0GsqlmGdPp1pjZoWc9tpYanoXQDnp5IvlDSLhA==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.6.tgz", + "integrity": "sha512-ZuQm81FhhvNVYtVb9GfZ+Du6e7fZlkisWvuCeBeRiyseNt1tcrQ8J3V67jD2nxje8CVXrwG3oUIbPcybv2rxfQ==", "cpu": [ "ia32" ], @@ -8354,9 +8350,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.2.tgz", - "integrity": "sha512-oV71rwiSpA5xre2C5570BhCsg1HF97SNLsZ/12xv7zayGzqr3yvFALFJN8tHKpqUdCB4FGPjoP3JFdV3i+1wUw==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.6.tgz", + "integrity": "sha512-UagPb7w5V0uzWSjrXwOavGa7s9iv3wrVdEgWy+/inm0OwY4lj3zpK9qDnMWAwYLuFwkI3UG4Q3dH8wD+CUUcjw==", "cpu": [ "x64" ], @@ -10032,15 +10028,6 @@ "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.45.tgz", "integrity": "sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==" }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", - "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", @@ -10213,9 +10200,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.19", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz", - "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==", + "version": "18.2.21", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.21.tgz", + "integrity": "sha512-gnvBA/21SA4xxqNXEwNiVcP0xSGHh/gi1VhWv9Bl46a0ItbTT5nFY+G9VSQpaG/8N/qdJpJ+vftQ4zflTtnjLw==", "dev": true, "dependencies": { "@types/react": "*" @@ -11207,9 +11194,9 @@ } }, "node_modules/apexcharts": { - "version": "3.46.0", - "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.46.0.tgz", - "integrity": "sha512-ELAY6vj8JQD7QLktKasTzwm9Wt0qxqfQSo+3QWS7G7I774iK8HCkG1toGsqJH0mkK6PtYBtnSIe66uUcwoCw1w==", + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.47.0.tgz", + "integrity": "sha512-s/fgNCA69b8lJdhI3R7Z+/Df47RPplLyHwuvttecR+aaZ3/Pm6wHYPiAGjqDNbVsMGXhuA9mcOpIYU5ZWeSdeg==", "dependencies": { "@yr/monotone-cubic-spline": "^1.0.3", "svg.draggable.js": "^2.2.2", @@ -11360,6 +11347,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.findlast": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz", + "integrity": "sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.findlastindex": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", @@ -11415,6 +11421,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, "node_modules/array.prototype.tosorted": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", @@ -11460,15 +11478,14 @@ } }, "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "minimalistic-assert": "^1.0.0" } }, "node_modules/asn1.js/node_modules/bn.js": { @@ -12040,13 +12057,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", - "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.9.tgz", + "integrity": "sha512-BXIWIaO3MewbXWdJdIGDWZurv5OGJlFNo7oy20DpB3kWDVJLcY2NRypRsRUbRe5KMqSNLuOGnWTFQQtY5MAsRw==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", + "@babel/helper-define-polyfill-provider": "^0.6.0", "semver": "^6.3.1" }, "peerDependencies": { @@ -12066,6 +12083,22 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", @@ -12078,6 +12111,22 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/babel-register": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", @@ -12224,15 +12273,15 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/bare-events": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.0.tgz", - "integrity": "sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.1.tgz", + "integrity": "sha512-9GYPpsPFvrWBkelIhOhTWtkeZxVxZOdb3VnFTCzlOo3OjvmTvzLoZFUT8kNFACx0vJej6QPney1Cf9BvzCNE/A==", "optional": true }, "node_modules/bare-fs": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.2.0.tgz", - "integrity": "sha512-+VhW202E9eTVGkX7p+TNXtZC4RTzj9JfJW7PtfIbZ7mIQ/QT9uOafQTx7lx2n9ERmWsXvLHF4hStAFn4gl2mQw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.2.1.tgz", + "integrity": "sha512-+CjmZANQDFZWy4PGbVdmALIwmt33aJg8qTkVjClU6X4WmZkTPBDxRHiBn7fpqEWEfF3AC2io++erpViAIQbSjg==", "optional": true, "dependencies": { "bare-events": "^2.0.0", @@ -12382,12 +12431,12 @@ "dev": true }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -12395,7 +12444,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -12538,25 +12587,68 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", - "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dev": true, "dependencies": { "bn.js": "^5.2.1", "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.4", + "elliptic": "^6.5.5", + "hash-base": "~3.0", "inherits": "^2.0.4", - "parse-asn1": "^5.1.6", - "readable-stream": "^3.6.2", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 4" + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, + "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "node_modules/browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", @@ -12730,9 +12822,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001591", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz", - "integrity": "sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==", + "version": "1.0.30001597", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz", + "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==", "funding": [ { "type": "opencollective", @@ -13613,15 +13705,6 @@ "yarn": ">=1" } }, - "node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.12" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -15138,15 +15221,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.687", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.687.tgz", - "integrity": "sha512-Ic85cOuXSP6h7KM0AIJ2hpJ98Bo4hyTUjc4yjMbkvD+8yTxEhfK9+8exT2KKYsSjnCn2tGsKVSZwE7ZgTORQCw==", + "version": "1.4.699", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.699.tgz", + "integrity": "sha512-I7q3BbQi6e4tJJN5CRcyvxhK0iJb34TV8eJQcgh+fR2fQ8miMgZcEInckCo1U9exDHbfz7DLDnFn8oqH/VcRKw==", "dev": true }, "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", + "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", "dev": true, "dependencies": { "bn.js": "^4.11.9", @@ -15980,27 +16063,29 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "version": "7.34.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.0.tgz", + "integrity": "sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", + "es-iterator-helpers": "^1.0.17", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "string.prototype.matchall": "^4.0.10" }, "engines": { "node": ">=4" @@ -16353,13 +16438,13 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.18.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz", + "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.5.0", @@ -16987,9 +17072,9 @@ "dev": true }, "node_modules/flow-parser": { - "version": "0.229.2", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.229.2.tgz", - "integrity": "sha512-T72XV2Izvl7yV6dhHhLaJ630Y6vOZJl6dnOS6dN0bPW9ExuREu7xGAf3omtcxX76POTuux9TJPu9ZpS48a/rdw==", + "version": "0.230.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.230.0.tgz", + "integrity": "sha512-ZAfKaarESYYcP/RoLdM91vX0u/1RR7jI5TJaFLnxwRlC2mp0o+Rw7ipIY7J6qpIpQYtAobWb/J6S0XPeu0gO8g==", "dev": true, "engines": { "node": ">=0.4.0" @@ -17530,9 +17615,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -18029,14 +18114,13 @@ } }, "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", "dev": true, "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, "engines": { "node": ">=4" @@ -18053,9 +18137,9 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -18128,9 +18212,9 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", "dev": true, "funding": [ { @@ -18173,14 +18257,6 @@ "node": ">= 12" } }, - "node_modules/html-parse-stringify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", - "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", - "dependencies": { - "void-elements": "3.1.0" - } - }, "node_modules/html-tags": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", @@ -18372,51 +18448,6 @@ "node": ">=0.4" } }, - "node_modules/i18next": { - "version": "21.10.0", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.10.0.tgz", - "integrity": "sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg==", - "funding": [ - { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - } - ], - "dependencies": { - "@babel/runtime": "^7.17.2" - } - }, - "node_modules/i18next-browser-languagedetector": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.0.tgz", - "integrity": "sha512-U00DbDtFIYD3wkWsr2aVGfXGAj2TgnELzOX9qv8bT0aJtvPV9CRO77h+vgmHFBMe7LAxdwvT/7VkCWGya6L3tA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.23.2" - } - }, - "node_modules/i18next-fs-backend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-1.2.0.tgz", - "integrity": "sha512-pUx3AcgXCbur0jpFA7U67Z2RJflAcIi698Y8VL+phdOqUchahxriV3Cs+M6UkPNQSS/zPEzWLfdJ8EgjB7HVxg==" - }, - "node_modules/i18next-http-backend": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.5.0.tgz", - "integrity": "sha512-Z/aQsGZk1gSxt2/DztXk92DuDD20J+rNudT7ZCdTrNOiK8uQppfvdjq9+DFQfpAnFPn3VZS+KQIr1S/W1KxhpQ==", - "dev": true, - "dependencies": { - "cross-fetch": "4.0.0" - } - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -18688,9 +18719,9 @@ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" }, "node_modules/iron-webcrypto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.0.0.tgz", - "integrity": "sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.1.0.tgz", + "integrity": "sha512-5vgYsCakNlaQub1orZK5QmNYhwYtcllTkZBp5sfIaCqY93Cf6l+v2rtE+E4TMbcfjxDMCdrO8wmp7+ZvhDECLA==", "funding": { "url": "https://github.com/sponsors/brc-dd" } @@ -19130,10 +19161,13 @@ } }, "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -19261,10 +19295,13 @@ "dev": true }, "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -19365,10 +19402,13 @@ "dev": true }, "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -19386,13 +19426,16 @@ } }, "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -20465,9 +20508,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", - "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -21226,45 +21269,10 @@ "trouter": "^3.2.0" } }, - "node_modules/next-i18next": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/next-i18next/-/next-i18next-12.1.0.tgz", - "integrity": "sha512-rhos/PVULmZPdC0jpec2MDBQMXdGZ3+Mbh/tZfrDtjgnVN3ucdq7k8BlwsJNww6FnqC8AC31n6dSYuqVzYsGsw==", - "funding": [ - { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - } - ], - "dependencies": { - "@babel/runtime": "^7.18.9", - "@types/hoist-non-react-statics": "^3.3.1", - "core-js": "^3", - "hoist-non-react-statics": "^3.3.2", - "i18next": "^21.9.1", - "i18next-fs-backend": "^1.1.5", - "react-i18next": "^11.18.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "next": ">= 10.0.0", - "react": ">= 16.8.0" - } - }, "node_modules/next-intl": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-3.9.1.tgz", - "integrity": "sha512-1j+5lLTY5kHshqnVoeAep+gQO1xX1KlJU3irZkdCOhr0woo562qLKOsGGVh+7bB5luBMu9qQBQy7ZwNK81Z2Ig==", + "version": "3.9.4", + "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-3.9.4.tgz", + "integrity": "sha512-ktm7tKgD35GY08HrCbuTFdgaLFNykUB1EOef4JPUo63E7qDShBx8bD+A4HYjs/Y/zoq4K5IPyG03Thj+lKmymg==", "funding": [ { "type": "individual", @@ -21274,7 +21282,7 @@ "dependencies": { "@formatjs/intl-localematcher": "^0.2.32", "negotiator": "^0.6.3", - "use-intl": "^3.9.1" + "use-intl": "^3.9.4" }, "peerDependencies": { "next": "^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0", @@ -24170,15 +24178,16 @@ } }, "node_modules/nypm": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.6.tgz", - "integrity": "sha512-2CATJh3pd6CyNfU5VZM7qSwFu0ieyabkEdnogE30Obn1czrmOYiZ8DOZLe1yBdLKWoyD3Mcy2maUs+0MR3yVjQ==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.8.tgz", + "integrity": "sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==", "dev": true, "dependencies": { - "citty": "^0.1.5", + "citty": "^0.1.6", + "consola": "^3.2.3", "execa": "^8.0.1", "pathe": "^1.1.2", - "ufo": "^1.3.2" + "ufo": "^1.4.0" }, "bin": { "nypm": "dist/cli.mjs" @@ -24746,16 +24755,20 @@ } }, "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, "node_modules/parse-json": { @@ -25331,9 +25344,9 @@ "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" }, "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -26071,12 +26084,12 @@ } }, "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz", + "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==", "dev": true, "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -26139,9 +26152,9 @@ "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" }, "node_modules/radix3": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.0.tgz", - "integrity": "sha512-pNsHDxbGORSvuSScqNJ+3Km6QAVqk8CfsCBIEoDgpqLrkD2f3QM4I7d1ozJJ172OmIcoUcerZaNWqtLkRXTV3A==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.1.tgz", + "integrity": "sha512-yUUd5VTiFtcMEx0qFUxGAv5gbMc1un4RvEO1JZdP7ZUl/RHygZK6PknIKntmQRZxnMY3ZXD2ISaw1ij8GYW1yg==" }, "node_modules/raf": { "version": "3.4.1", @@ -26185,9 +26198,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -26459,9 +26472,9 @@ "integrity": "sha512-8gyj4TTxeP7eEyc2QKawEuQoAZdjKvMY4pgWfycGmqGByhs17fR+zEBs0JUDq4US/l+vbTl+6zvUIx27iDo/Vw==" }, "node_modules/react-hook-form": { - "version": "7.50.1", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.50.1.tgz", - "integrity": "sha512-3PCY82oE0WgeOgUtIr3nYNNtNvqtJ7BZjsbxh6TnYNbXButaD5WpjOmTjdxZfheuHKR68qfeFnEDVYoSSFPMTQ==", + "version": "7.51.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.51.0.tgz", + "integrity": "sha512-BggOy5j58RdhdMzzRUHGOYhSz1oeylFAv6jUSG86OvCIvlAvS7KvnRY7yoAf2pfEiPN7BesnR0xx73nEk3qIiw==", "engines": { "node": ">=12.22.0" }, @@ -26473,27 +26486,6 @@ "react": "^16.8.0 || ^17 || ^18" } }, - "node_modules/react-i18next": { - "version": "11.18.6", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.18.6.tgz", - "integrity": "sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==", - "dependencies": { - "@babel/runtime": "^7.14.5", - "html-parse-stringify": "^3.0.1" - }, - "peerDependencies": { - "i18next": ">= 19.0.0", - "react": ">= 16.8.0" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, "node_modules/react-insta-stories": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/react-insta-stories/-/react-insta-stories-2.6.2.tgz", @@ -26652,9 +26644,9 @@ } }, "node_modules/react-player": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/react-player/-/react-player-2.15.0.tgz", - "integrity": "sha512-wo7LM3CwxkjW9WdvGrQ3I0PhIl5xY1h+9EdpSnCRaQhE4dRMGmfH60RITPaauUhd2uJkGpzAj27kWYHT1j/dBw==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/react-player/-/react-player-2.15.1.tgz", + "integrity": "sha512-ni1XFuYZuhIKKdeFII+KRLmIPcvCYlyXvtSMhNOgssdfnSovmakBtBTW2bxowPvmpKy5BTR4jC4CF79ucgHT+g==", "dependencies": { "deepmerge": "^4.0.0", "load-script": "^1.0.0", @@ -26916,15 +26908,15 @@ } }, "node_modules/recast": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.4.tgz", - "integrity": "sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==", + "version": "0.23.6", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.6.tgz", + "integrity": "sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==", "dev": true, "dependencies": { - "assert": "^2.0.0", "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" }, "engines": { @@ -27453,13 +27445,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -27706,16 +27698,16 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -27861,11 +27853,11 @@ } }, "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" @@ -28768,9 +28760,9 @@ } }, "node_modules/terser": { - "version": "5.28.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz", - "integrity": "sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==", + "version": "5.29.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", + "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -29750,15 +29742,18 @@ } }, "node_modules/unplugin": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.7.1.tgz", - "integrity": "sha512-JqzORDAPxxs8ErLV4x+LL7bk5pk3YlcWqpSNsIkAZj972KzFZLClc/ekppahKkOczGkwIG6ElFgdOgOlK4tXZw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.9.0.tgz", + "integrity": "sha512-14PslvMY3gNbXnQtNIRB566Q057L5Fe7f5LDEamxVi0QQVxoz5hrveBwwZLcKyHtZ09ysmipxRRj5Lv+BGz2Iw==", "dev": true, "dependencies": { "acorn": "^8.11.3", - "chokidar": "^3.5.3", + "chokidar": "^3.6.0", "webpack-sources": "^3.2.3", "webpack-virtual-modules": "^0.6.1" + }, + "engines": { + "node": ">=14.0.0" } }, "node_modules/unplugin/node_modules/acorn": { @@ -29999,9 +29994,9 @@ } }, "node_modules/use-intl": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-3.9.1.tgz", - "integrity": "sha512-tWcT636/jYC0hILyFTLmiuE+ovbvPPBXwN/OOQxxE+4bssHXeeksdWXzpDsKqE37aV62DFrQ2jhumV8udecjNA==", + "version": "3.9.4", + "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-3.9.4.tgz", + "integrity": "sha512-z53WpHqVMnIV23YO92nUhXePjPk18VIYQayMQbPYe7wPEau7IhXcZqWLC5xrzpj7HORKzwmHDOzDQ6X09BbsTA==", "dependencies": { "@formatjs/ecma402-abstract": "^1.11.4", "intl-messageformat": "^9.3.18" @@ -30255,14 +30250,6 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/vt-pbf": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", @@ -30641,15 +30628,18 @@ } }, "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -30661,16 +30651,16 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -30850,9 +30840,9 @@ } }, "node_modules/xss": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", - "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz", + "integrity": "sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==", "dependencies": { "commander": "^2.20.3", "cssfilter": "0.0.10" diff --git a/package.json b/package.json index 33ecf51123..a0aae807a5 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,6 @@ "negotiator": "^0.6.3", "next": "^13.5.6", "next-connect": "^0.13.0", - "next-i18next": "^12.1.0", "next-intl": "^3.5.3", "next-useragent": "^2.7.0", "node-cache": "^5.1.2", @@ -116,7 +115,6 @@ "react-dropzone": "^11.4.0", "react-gtm-module": "^2.0.11", "react-hook-form": "^7.44.2", - "react-i18next": "^11.16.10", "react-insta-stories": "^2.2.5", "react-json-editor-ajrm": "^2.5.13", "react-lazyload": "^3.2.0", @@ -181,8 +179,6 @@ "eslint-plugin-react-hooks": "^4.1.2", "eslint-plugin-storybook": "^0.6.15", "husky": "^8.0.3", - "i18next-browser-languagedetector": "^7.2.0", - "i18next-http-backend": "^2.4.2", "next-unused": "0.0.6", "prettier": "^2.0.5", "prisma": "^4.13.0", diff --git a/pages/_app.tsx b/pages/_app.tsx index cffa84f0d4..2eff12641b 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -134,29 +134,10 @@ const PlanetWeb = ({ } } - // const [initialized, setInitialized] = React.useState(false); - React.useEffect(() => { storeConfig(tenantConfig); }, []); - /* React.useEffect(() => { - if (i18n && i18n.isInitialized) { - setInitialized(true); - } - }, [i18n, i18n.isInitialized]);*/ - - /* React.useEffect(() => { - if ( - localStorage.getItem('language') !== null && - i18n && - i18n.isInitialized - ) { - const languageFromLocalStorage: any = localStorage.getItem('language'); - i18n.changeLanguage(languageFromLocalStorage); - } - }, [i18n, i18n.isInitialized]); */ - React.useEffect(() => { if ( router.pathname === '/' || @@ -184,7 +165,6 @@ const PlanetWeb = ({ const ProjectProps = { pageProps, - // initialized, currencyCode, setCurrencyCode, }; diff --git a/pages/sites/[slug]/[locale]/all.tsx b/pages/sites/[slug]/[locale]/all.tsx index 5ffc4b998b..2e57ff2bac 100644 --- a/pages/sites/[slug]/[locale]/all.tsx +++ b/pages/sites/[slug]/[locale]/all.tsx @@ -25,11 +25,10 @@ import { AbstractIntlMessages } from 'next-intl'; import getMessagesForPage from '../../../../src/utils/language/getMessagesForPage'; interface Props { - initialized: Boolean; pageProps: PageProps; } -export default function Home({ initialized, pageProps }: Props) { +export default function Home({ pageProps }: Props) { const [leaderboard, setLeaderboard] = React.useState( null ); @@ -99,12 +98,8 @@ export default function Home({ initialized, pageProps }: Props) { return pageProps.tenantConfig ? ( <> - {initialized ? ( - <> - - {getAllPage()} - - ) : null} + + {getAllPage()} ) : ( <> diff --git a/pages/sites/[slug]/[locale]/home.tsx b/pages/sites/[slug]/[locale]/home.tsx index c15d10c29d..70956359c7 100644 --- a/pages/sites/[slug]/[locale]/home.tsx +++ b/pages/sites/[slug]/[locale]/home.tsx @@ -27,11 +27,10 @@ import { AbstractIntlMessages } from 'next-intl'; import getMessagesForPage from '../../../../src/utils/language/getMessagesForPage'; interface Props { - initialized: Boolean; pageProps: PageProps; } -export default function Home({ initialized, pageProps }: Props) { +export default function Home({ pageProps }: Props) { const router = useRouter(); const [leaderboard, setLeaderboard] = React.useState( @@ -119,7 +118,7 @@ export default function Home({ initialized, pageProps }: Props) { return pageProps.tenantConfig ? ( <> - {initialized ? getHomePage() : <>} + {getHomePage()} ) : ( <> diff --git a/server.js b/server.js index 8685254132..e0395997e0 100644 --- a/server.js +++ b/server.js @@ -7,9 +7,6 @@ const url = require('url'); const cluster = require('cluster'); const numCPUs = require('os').cpus().length; -// const i18next = require('./i18n'); -// const nextI18NextMiddleware = require('next-i18next/middleware').default; - const dev = process.env.NODE_ENV !== 'production'; const port = process.env.PORT || 3000; @@ -36,9 +33,6 @@ if (!dev && cluster.isMaster) { nextApp.prepare().then(async () => { const server = express(); - // await i18next.initPromise; - // server.use(nextI18NextMiddleware(i18next)); - if (!dev) { // Enforce SSL & HSTS in production // eslint-disable-next-line no-shadow From debad2028e4a65223ffffced7c4731ef83dc36c3 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Tue, 12 Mar 2024 14:43:41 +0530 Subject: [PATCH 29/70] refactor: removes unused login.json translation files --- public/static/locales/es/login.json | 9 --------- public/static/locales/fr/login.json | 16 ---------------- public/static/locales/it/login.json | 3 --- public/static/locales/pt-BR/login.json | 16 ---------------- 4 files changed, 44 deletions(-) delete mode 100644 public/static/locales/es/login.json delete mode 100644 public/static/locales/fr/login.json delete mode 100644 public/static/locales/it/login.json delete mode 100644 public/static/locales/pt-BR/login.json diff --git a/public/static/locales/es/login.json b/public/static/locales/es/login.json deleted file mode 100644 index 4e42051d80..0000000000 --- a/public/static/locales/es/login.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Login": { - "loginTitle": "{log} - Ingresa en", - "signUpText": "Inscripción completa", - "profileTypes": "{item.title}", - "profileName": "Nombre de {type}", - "createAccount": "Crear una cuenta" - } -} diff --git a/public/static/locales/fr/login.json b/public/static/locales/fr/login.json deleted file mode 100644 index f594154941..0000000000 --- a/public/static/locales/fr/login.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "Login": { - "loginTitle": "{log} - Connexion", - "signUpText": "Inscription complète", - "profileTypes": "{item.title}", - "profileName": "Nom de {type}", - "createAccount": "Créer un compte", - "individual": "Individuel", - "tpo": "Organisation de reboisement", - "education": "École", - "organization": "Société", - "profileCreated": "Profil Créé avec succès !", - "profileCreationFailed": "Erreur dans la création du profil. Veuillez réessayer.", - "profileCreationError": "Erreur dans la création du profil." - } -} diff --git a/public/static/locales/it/login.json b/public/static/locales/it/login.json deleted file mode 100644 index d5ced69eb6..0000000000 --- a/public/static/locales/it/login.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Login": {} -} \ No newline at end of file diff --git a/public/static/locales/pt-BR/login.json b/public/static/locales/pt-BR/login.json deleted file mode 100644 index 06f3e43c03..0000000000 --- a/public/static/locales/pt-BR/login.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "Login": { - "loginTitle": "{log} - Login", - "signUpText": "Inscrição completa", - "profileTypes": "{item.title}", - "profileName": "Nome do {type}", - "createAccount": "Criar Conta", - "individual": "Individual", - "tpo": "Organização de restauração", - "education": "Escola", - "organization": "Empresa", - "profileCreated": "Perfil criado com sucesso!", - "profileCreationFailed": "Erro na criação do perfil. Por favor, tente novamente.", - "profileCreationError": "Erro na criação do perfil." - } -} From 150bae6b8b9e2e22a3b787b4acd4c12671b2bda7 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Tue, 12 Mar 2024 14:44:09 +0530 Subject: [PATCH 30/70] refactor: removes i18next pluralization related strings --- public/static/locales/cs/common.json | 2 -- public/static/locales/de/common.json | 2 -- public/static/locales/de/profile.json | 8 -------- public/static/locales/en/common.json | 2 -- public/static/locales/en/profile.json | 8 -------- public/static/locales/es/common.json | 2 -- public/static/locales/fr/common.json | 2 -- public/static/locales/it/common.json | 2 -- public/static/locales/pt-BR/common.json | 2 -- 9 files changed, 30 deletions(-) diff --git a/public/static/locales/cs/common.json b/public/static/locales/cs/common.json index ea7f7ba263..4a5f2a2dd4 100644 --- a/public/static/locales/cs/common.json +++ b/public/static/locales/cs/common.json @@ -1,8 +1,6 @@ { "Common": { "tree": "{count, plural, =0 {stromů} =1 {strom} other {stromů}}", - "tree_one": " strom", - "tree_other": "stromů", "by": "Od {tpoName}", "to_project_by_tpo": "Pro {projectName} od {tpoName}", "for": "pro", diff --git a/public/static/locales/de/common.json b/public/static/locales/de/common.json index 189e3030d1..cedea337bf 100644 --- a/public/static/locales/de/common.json +++ b/public/static/locales/de/common.json @@ -1,8 +1,6 @@ { "Common": { "tree": "{count, plural, =0 {Bäume} =1 {Baum} other {Bäume}}", - "tree_one": "Baum", - "tree_other": "Bäume", "m2": "m²", "by": "Von {tpoName}", "to_project_by_tpo": "An {projectName} von {tpoName}", diff --git a/public/static/locales/de/profile.json b/public/static/locales/de/profile.json index a86c44bf51..17da43fc5c 100644 --- a/public/static/locales/de/profile.json +++ b/public/static/locales/de/profile.json @@ -15,8 +15,6 @@ }, "myForestMap": { "plantedTree": "{count, plural, =0 {Bäume} =1 {Baum} other {Bäume}}", - "plantedTree_one": "{count, number} Baum", - "plantedTree_other": "{count, number} Bäume", "treesPlanted": "Gepflanzte Bäume", "restored": "Wiederhergestellt", "registered": "Registriert", @@ -27,11 +25,7 @@ "area": "{areaConserved} m²", "zoomIn": "Für weitere Details heranzoomen", "totalDonation": "{count, plural, =0 {Spenden} =1 {Spende} other {Spenden}} ", - "totalDonation_one": "{count, number} Spende ", - "totalDonation_other": "{count, number} Spenden ", "totalProject": "für {count, plural, =0 {Projekte} =1 {Projekt} other {Projekte}}", - "totalProject_one": "für {count, number} Projekt", - "totalProject_other": "für {count, number} Projekte", "tpoName": "By {tpo}" }, "myTreeCounter": { @@ -41,8 +35,6 @@ "myContributions": { "treesPlantedAndAreaRestored": "Bäume gepflanzt & Gebiete wiederhergestellt", "treeRegistered": "{count, plural, =0 {Bäume registriert} =1 {Baum registriert} other {Bäume registriert}}", - "treeRegistered_one": "{count, number} Baum registriert", - "treeRegistered_other": "{count, number} Bäume registriert", "receivedFrom": "Empfangen von {name}", "loadMoreContribution": "Lade weitere Beiträge", "loadingContribution": "Lade Beiträge....", diff --git a/public/static/locales/en/common.json b/public/static/locales/en/common.json index 8bf0624f20..8981bacfa9 100644 --- a/public/static/locales/en/common.json +++ b/public/static/locales/en/common.json @@ -1,8 +1,6 @@ { "Common": { "tree": "{count, plural, =0 {Trees} =1 {Tree} other {Trees}}", - "tree_one": "Tree", - "tree_other": "Trees", "m2": "m²", "by": "By {tpoName}", "to_project_by_tpo": "To {projectName} by {tpoName}", diff --git a/public/static/locales/en/profile.json b/public/static/locales/en/profile.json index 7382fcfe23..669480dc93 100644 --- a/public/static/locales/en/profile.json +++ b/public/static/locales/en/profile.json @@ -15,8 +15,6 @@ }, "myForestMap": { "plantedTree": "{count, plural, =0 {Trees} =1 {Tree} other {Trees}}", - "plantedTree_one": "{count, number} Tree", - "plantedTree_other": "{count, number} Trees", "treesPlanted": "Trees Planted", "restored": "Restored", "registered": "Registered", @@ -27,11 +25,7 @@ "area": "{areaConserved} m²", "zoomIn": "zoom in for more details", "totalDonation": "{count, plural, =0 {donations} =1 {donation} other {donations}} ", - "totalDonation_one": "{count, number} donation ", - "totalDonation_other": "{count, number} donations ", "totalProject": "to {count, plural, =0 {projects} =1 {project} other {projects}}", - "totalProject_one": "to {count, number} project", - "totalProject_other": "to {count, number} projects", "tpoName": "By {tpo}" }, "myTreeCounter": { @@ -41,8 +35,6 @@ "myContributions": { "treesPlantedAndAreaRestored": "Trees Planted & Areas Restored", "treeRegistered": "{count, plural, =0 {Trees Registered} =1 {Tree Registered} other {Trees Registered}}", - "treeRegistered_one": "{count, number} Tree Registered", - "treeRegistered_other": "{count, number} Trees Registered", "receivedFrom": "Received from {name}", "loadMoreContribution": "Load More Contribution", "loadingContribution": "Loading Contribution....", diff --git a/public/static/locales/es/common.json b/public/static/locales/es/common.json index d602640a3d..5b011f4ba1 100644 --- a/public/static/locales/es/common.json +++ b/public/static/locales/es/common.json @@ -1,8 +1,6 @@ { "Common": { "tree": "{count, plural, =0 {Árboles} =1 {Árbol} other {Árboles}}", - "tree_one": "Árbol", - "tree_other": "Árboles", "by": "Por {tpoName}", "to_project_by_tpo": "Para {projectName} por {tpoName}", "for": "para", diff --git a/public/static/locales/fr/common.json b/public/static/locales/fr/common.json index 03f6f27468..2e65d9e8d2 100644 --- a/public/static/locales/fr/common.json +++ b/public/static/locales/fr/common.json @@ -1,8 +1,6 @@ { "Common": { "tree": "{count, plural, =0 {Arbres} =1 {Arbre} other {Arbres}}", - "tree_one": "Arbre", - "tree_other": "Arbres", "by": "Par {tpoName}", "to_project_by_tpo": "Au {projectName} par {tpoName}", "for": "pour", diff --git a/public/static/locales/it/common.json b/public/static/locales/it/common.json index b5c6205e82..b4adc0c227 100644 --- a/public/static/locales/it/common.json +++ b/public/static/locales/it/common.json @@ -1,8 +1,6 @@ { "Common": { "tree": "{count, plural, =0 {Alberi} =1 {Albero} other {Alberi}}", - "tree_one": "Albero", - "tree_other": "Alberi", "by": "Di {tpoName}", "to_project_by_tpo": "A {projectName} di {tpoName}", "for": "per", diff --git a/public/static/locales/pt-BR/common.json b/public/static/locales/pt-BR/common.json index 71e9054f52..7f92766bb9 100644 --- a/public/static/locales/pt-BR/common.json +++ b/public/static/locales/pt-BR/common.json @@ -1,8 +1,6 @@ { "Common": { "tree": "{count, plural, =0 {Árvores} =1 {Árvore} other {Árvores}}", - "tree_one": "Árvore", - "tree_other": "Árvores", "by": "Por {tpoName}", "to_project_by_tpo": "Para {projectName} por {tpoName}", "for": "para", From def1f0aa41f7b430ced73b88a56966f5c7f9d79d Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 13 Mar 2024 09:51:22 +0530 Subject: [PATCH 31/70] fix: corrects typos in translation namespaces --- public/static/locales/en/planetcash.json | 2 +- public/static/locales/en/registerTrees.json | 2 +- src/features/user/PlanetCash/components/AccountDetails.tsx | 2 +- src/features/user/PlanetCash/components/CreateAccountForm.tsx | 2 +- src/features/user/PlanetCash/components/NoPlanetCashAccount.tsx | 2 +- src/features/user/PlanetCash/index.tsx | 2 +- src/features/user/PlanetCash/screens/CreateAccount.tsx | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/public/static/locales/en/planetcash.json b/public/static/locales/en/planetcash.json index fd386dbd02..754efafb27 100644 --- a/public/static/locales/en/planetcash.json +++ b/public/static/locales/en/planetcash.json @@ -1,5 +1,5 @@ { - "PlanetCash": { + "Planetcash": { "title": "PlanetCash", "partnerSignupInfo": "Use of this feature by Companies is subject to partnership with Plant-for-the-Planet. Please contact partner@plant-for-the-planet.org for details.", "description": "PlanetCash is a developer friendly tool that extends the Plant-for-the-Planet Platform with APIs and built in tools. PlanetCash balance is a contribution to Plant-for-the-Planet that can be dedicated by the donor to different projects on the platform.", diff --git a/public/static/locales/en/registerTrees.json b/public/static/locales/en/registerTrees.json index c2de4da62a..80122ff760 100644 --- a/public/static/locales/en/registerTrees.json +++ b/public/static/locales/en/registerTrees.json @@ -1,5 +1,5 @@ { - "RedeemTrees": { + "RegisterTrees": { "selectLocationMap": "Select location on map", "requiredNumberOfTrees": "Number of Trees is required", "numberOfTrees": "Number of Trees", diff --git a/src/features/user/PlanetCash/components/AccountDetails.tsx b/src/features/user/PlanetCash/components/AccountDetails.tsx index 11aa405082..28b56e8eb9 100644 --- a/src/features/user/PlanetCash/components/AccountDetails.tsx +++ b/src/features/user/PlanetCash/components/AccountDetails.tsx @@ -63,7 +63,7 @@ interface AccountDetailsProps { } const AccountDetails = ({ account }: AccountDetailsProps): ReactElement => { - const t = useTranslations('PlanetCash'); + const t = useTranslations('Planetcash'); const locale = useLocale(); const { token } = useUserProps(); const { tenantConfig } = useTenant(); diff --git a/src/features/user/PlanetCash/components/CreateAccountForm.tsx b/src/features/user/PlanetCash/components/CreateAccountForm.tsx index 3a679e5c30..fd02792161 100644 --- a/src/features/user/PlanetCash/components/CreateAccountForm.tsx +++ b/src/features/user/PlanetCash/components/CreateAccountForm.tsx @@ -26,7 +26,7 @@ const CreateAccountForm = ({ allowedCountries, isPlanetCashActive, }: Props): ReactElement | null => { - const tPlanetCash = useTranslations('PlanetCash'); + const tPlanetCash = useTranslations('Planetcash'); const tCountry = useTranslations('Country'); const { setAccounts } = usePlanetCash(); const [country, setCountry] = useState(''); diff --git a/src/features/user/PlanetCash/components/NoPlanetCashAccount.tsx b/src/features/user/PlanetCash/components/NoPlanetCashAccount.tsx index 4838628e4d..64fac5f002 100644 --- a/src/features/user/PlanetCash/components/NoPlanetCashAccount.tsx +++ b/src/features/user/PlanetCash/components/NoPlanetCashAccount.tsx @@ -5,7 +5,7 @@ import { useRouter } from 'next/router'; import CenteredContainer from '../../../common/Layout/CenteredContainer'; const NoPlanetCashAccount = (): ReactElement | null => { - const t = useTranslations('PlanetCash'); + const t = useTranslations('Planetcash'); const router = useRouter(); const handleClick = () => { diff --git a/src/features/user/PlanetCash/index.tsx b/src/features/user/PlanetCash/index.tsx index 147564068e..8b956b4b6f 100644 --- a/src/features/user/PlanetCash/index.tsx +++ b/src/features/user/PlanetCash/index.tsx @@ -36,7 +36,7 @@ export default function PlanetCash({ step, setProgress, }: PlanetCashProps): ReactElement | null { - const t = useTranslations('PlanetCash'); + const t = useTranslations('Planetcash'); const locale = useLocale(); const { tenantConfig } = useTenant(); const [tabConfig, setTabConfig] = useState([]); diff --git a/src/features/user/PlanetCash/screens/CreateAccount.tsx b/src/features/user/PlanetCash/screens/CreateAccount.tsx index 212fff342f..f272c040d8 100644 --- a/src/features/user/PlanetCash/screens/CreateAccount.tsx +++ b/src/features/user/PlanetCash/screens/CreateAccount.tsx @@ -17,7 +17,7 @@ const CreateAccount = (): ReactElement | null => { CountryType[] | null >(null); const { accounts, isPlanetCashActive } = usePlanetCash(); - const t = useTranslations('PlanetCash'); + const t = useTranslations('Planetcash'); // Prevents creating a duplicate planetcash account for a country. // This condition cannot currently happen, as the frontend prevents users from creating multiple planet cash accounts From 74da2b5d35084d7c2f2285fb0f627a382c965945 Mon Sep 17 00:00:00 2001 From: "lingohub[bot]" <69908207+lingohub[bot]@users.noreply.github.com> Date: Wed, 13 Mar 2024 04:31:52 +0000 Subject: [PATCH 32/70] =?UTF-8?q?=F0=9F=8C=90=20Language=20update=20from?= =?UTF-8?q?=20LingoHub=20=F0=9F=A4=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Project Name: Planet Webapp (next-intl) Project Link: https://translate.lingohub.com/plant-for-the-planet/dashboard/planet-webapp-(next-intl) User: Mohit Bajaj Easy language translations with LingoHub 🚀 --- public/static/locales/cs/country.json | 2 +- public/static/locales/cs/donate.json | 2 -- public/static/locales/cs/donationLink.json | 2 +- public/static/locales/cs/giftfunds.json | 2 +- public/static/locales/cs/leaderboard.json | 2 +- public/static/locales/cs/me.json | 3 --- public/static/locales/cs/profile.json | 7 +++++++ public/static/locales/cs/redeem.json | 2 +- public/static/locales/cs/registerTrees.json | 2 +- public/static/locales/cs/tenants.json | 2 +- public/static/locales/cs/treemapperAnalytics.json | 2 +- public/static/locales/de/donate.json | 5 +---- public/static/locales/de/giftfunds.json | 4 ++-- public/static/locales/de/leaderboard.json | 2 +- public/static/locales/de/me.json | 4 +++- public/static/locales/de/planetcash.json | 2 +- public/static/locales/de/registerTrees.json | 4 ++-- public/static/locales/de/treemapper.json | 11 ++++++++++- public/static/locales/es/bulkCodes.json | 4 +--- public/static/locales/es/country.json | 2 +- public/static/locales/es/donate.json | 1 - public/static/locales/es/donationLink.json | 4 +--- public/static/locales/es/giftfunds.json | 4 +--- public/static/locales/es/leaderboard.json | 2 +- public/static/locales/es/managePayouts.json | 4 +--- public/static/locales/es/manageProjects.json | 2 +- public/static/locales/es/me.json | 3 --- public/static/locales/es/planetcash.json | 4 +--- public/static/locales/es/profile.json | 7 +++++++ public/static/locales/es/redeem.json | 2 +- public/static/locales/es/registerTrees.json | 2 +- public/static/locales/es/tenants.json | 2 +- public/static/locales/es/treemapper.json | 4 +--- public/static/locales/es/treemapperAnalytics.json | 4 +--- public/static/locales/fr/bulkCodes.json | 4 +--- public/static/locales/fr/country.json | 2 +- public/static/locales/fr/donate.json | 1 - public/static/locales/fr/donationLink.json | 4 +--- public/static/locales/fr/giftfunds.json | 4 +--- public/static/locales/fr/leaderboard.json | 2 +- public/static/locales/fr/managePayouts.json | 4 +--- public/static/locales/fr/manageProjects.json | 2 +- public/static/locales/fr/me.json | 3 --- public/static/locales/fr/planetcash.json | 4 +--- public/static/locales/fr/profile.json | 7 +++++++ public/static/locales/fr/registerTrees.json | 2 +- public/static/locales/fr/tenants.json | 2 +- public/static/locales/fr/treemapper.json | 2 +- public/static/locales/fr/treemapperAnalytics.json | 4 +--- public/static/locales/it/bulkCodes.json | 4 +--- public/static/locales/it/country.json | 2 +- public/static/locales/it/donationLink.json | 4 +--- public/static/locales/it/giftfunds.json | 4 +--- public/static/locales/it/leaderboard.json | 2 +- public/static/locales/it/managePayouts.json | 4 +--- public/static/locales/it/manageProjects.json | 2 +- public/static/locales/it/me.json | 3 --- public/static/locales/it/planetcash.json | 4 +--- public/static/locales/it/profile.json | 7 +++++++ public/static/locales/it/redeem.json | 2 +- public/static/locales/it/registerTrees.json | 2 +- public/static/locales/it/tenants.json | 2 +- public/static/locales/it/treemapper.json | 4 +--- public/static/locales/it/treemapperAnalytics.json | 4 +--- public/static/locales/pt-BR/bulkCodes.json | 4 +--- public/static/locales/pt-BR/country.json | 2 +- public/static/locales/pt-BR/donate.json | 1 - public/static/locales/pt-BR/donationLink.json | 4 +--- public/static/locales/pt-BR/giftfunds.json | 4 +--- public/static/locales/pt-BR/leaderboard.json | 2 +- public/static/locales/pt-BR/managePayouts.json | 4 +--- public/static/locales/pt-BR/me.json | 3 --- public/static/locales/pt-BR/planetcash.json | 4 +--- public/static/locales/pt-BR/profile.json | 7 +++++++ public/static/locales/pt-BR/redeem.json | 2 +- public/static/locales/pt-BR/registerTrees.json | 2 +- public/static/locales/pt-BR/tenants.json | 2 +- public/static/locales/pt-BR/treemapperAnalytics.json | 4 +--- 78 files changed, 112 insertions(+), 141 deletions(-) create mode 100644 public/static/locales/cs/profile.json create mode 100644 public/static/locales/es/profile.json create mode 100644 public/static/locales/fr/profile.json create mode 100644 public/static/locales/it/profile.json create mode 100644 public/static/locales/pt-BR/profile.json diff --git a/public/static/locales/cs/country.json b/public/static/locales/cs/country.json index 72d98b54de..82916018c0 100644 --- a/public/static/locales/cs/country.json +++ b/public/static/locales/cs/country.json @@ -261,4 +261,4 @@ "zm": "Zambie", "zw": "Zimbabwe" } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/donate.json b/public/static/locales/cs/donate.json index fb50e52bbe..254ca9e28b 100644 --- a/public/static/locales/cs/donate.json +++ b/public/static/locales/cs/donate.json @@ -1,6 +1,5 @@ { "Donate": { - "myTreesPlantedByOnLocation_0": "Můj {treeCount} strom se sází v {location}.", "topProjects": "Nejlepší projekty", "allCountProjects": "Všech [{projectCount}] projektů", "searchProjects": "Prohledat projekty ...", @@ -104,7 +103,6 @@ "projectPurpose": "Účel projektu", "type": "Typ", "projectType": "Typ projektu", - "conservation": "Ochrana přírody", "restoration": "Restorace", "filters": "Filtry", "perM2": "na m²" diff --git a/public/static/locales/cs/donationLink.json b/public/static/locales/cs/donationLink.json index 102f1161c3..734672df89 100644 --- a/public/static/locales/cs/donationLink.json +++ b/public/static/locales/cs/donationLink.json @@ -22,4 +22,4 @@ "automaticSelection": "Automatický výběr", "qrCodeFileName": "Darovací-link-QR-kód" } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/giftfunds.json b/public/static/locales/cs/giftfunds.json index c59f5b5ac4..c7844e8f3c 100644 --- a/public/static/locales/cs/giftfunds.json +++ b/public/static/locales/cs/giftfunds.json @@ -6,4 +6,4 @@ "project": "Projekt", "units": "Dostupné jednotky" } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/leaderboard.json b/public/static/locales/cs/leaderboard.json index fc95f900d7..c8b644721a 100644 --- a/public/static/locales/cs/leaderboard.json +++ b/public/static/locales/cs/leaderboard.json @@ -6,4 +6,4 @@ "videoTitle": "A nakonec toto", "searchUser": "Vyhledat uživatele" } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/me.json b/public/static/locales/cs/me.json index 55984c7227..acab8ffacb 100644 --- a/public/static/locales/cs/me.json +++ b/public/static/locales/cs/me.json @@ -23,7 +23,6 @@ "share": "Podíl", "registerTrees": "Registrace stromů", "registerTreesDescription": "Zaregistrujte stromy, které jste sami vysadili, např. na své zahradě.", - "redeem": "Vykoupit", "myForest": "Můj les", "giftToGiftee": "Dárek pro {gifteeName}", "settingManageProject": "Správa projektů", @@ -32,7 +31,6 @@ "accountHistory": "Historie účtu", "logout": "Odhlásit se", "close": "Zavřít", - "support": "Podpora", "addTarget": "Přidat cíl", "noOfTrees": "Kolik stromů?", "datePlanted": "Datum výsadby", @@ -54,7 +52,6 @@ "moreThanOne": "1 strom je minimum", "registered": "Registrováno", "receivedTrees": "Přijaté stromy", - "receivedFrom": "Přijato od{name}", "redeemedTrees": "Vykoupené stromy", "myAccount": "Můj účet", "all": "Vše", diff --git a/public/static/locales/cs/profile.json b/public/static/locales/cs/profile.json new file mode 100644 index 0000000000..2c89fd1616 --- /dev/null +++ b/public/static/locales/cs/profile.json @@ -0,0 +1,7 @@ +{ + "Profile": { + "myForestMap": { + "plantedTree": "{count, plural, =0 {stromů} =1 {strom} other {stromů}}" + } + } +} diff --git a/public/static/locales/cs/redeem.json b/public/static/locales/cs/redeem.json index dcd09ccf10..a6f12a595a 100644 --- a/public/static/locales/cs/redeem.json +++ b/public/static/locales/cs/redeem.json @@ -15,4 +15,4 @@ "successfullyRedeemed": "Úspěšně uplatněn", "redeemAnotherCode": "Uplatnit jiný kód" } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/registerTrees.json b/public/static/locales/cs/registerTrees.json index 235f56baee..35775a23c0 100644 --- a/public/static/locales/cs/registerTrees.json +++ b/public/static/locales/cs/registerTrees.json @@ -10,4 +10,4 @@ "clickMapMark": "Kliknutím na mapu označíte lokaci", "next": "Další" } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/tenants.json b/public/static/locales/cs/tenants.json index 2561cc371a..71491da5cd 100644 --- a/public/static/locales/cs/tenants.json +++ b/public/static/locales/cs/tenants.json @@ -50,4 +50,4 @@ "description": "Od roku 2021 se AMS připojuje k TrillionTreeCampaign a společně s Plant-for-the-Planet začneme vracet přírodě. Využijeme příležitosti, které získáváme, k podpoře udržitelnosti v našem dodavatelském řetězci a prostřednictvím našich vztahů s klienty a obchodními partnery. Připojte se k nám a #StopTalkingStartPlanting!" } } -} \ No newline at end of file +} diff --git a/public/static/locales/cs/treemapperAnalytics.json b/public/static/locales/cs/treemapperAnalytics.json index 24658c148b..7dcf9fc66b 100644 --- a/public/static/locales/cs/treemapperAnalytics.json +++ b/public/static/locales/cs/treemapperAnalytics.json @@ -56,4 +56,4 @@ "million": "m", "thousand": "k" } -} \ No newline at end of file +} diff --git a/public/static/locales/de/donate.json b/public/static/locales/de/donate.json index 23dc9dc851..b78e362ff1 100644 --- a/public/static/locales/de/donate.json +++ b/public/static/locales/de/donate.json @@ -110,11 +110,8 @@ "projectPurpose": "Zweck des Projekts", "type": "Typ", "projectType": "Typ des Projektes", - "conservation": "Schutz", "restoration": "Renaturierung", "filters": "Filter", - "perM2": "pro m²", - "plantedTrees": "Gepflanzte Bäume", - "restored": "Wiederhergestellt" + "perM2": "pro m²" } } diff --git a/public/static/locales/de/giftfunds.json b/public/static/locales/de/giftfunds.json index 9821818cdd..bacc47652e 100644 --- a/public/static/locales/de/giftfunds.json +++ b/public/static/locales/de/giftfunds.json @@ -1,7 +1,7 @@ { - "GiftFunds": { + "Giftfunds": { "title": "GiftFund", - "description1": "Wenn du diese Seite sehen, dann hast du noch Guthaben in deinem GiftFund für dein aktives PlanetCash Konto. Prüfe die Informationen unten.", + "description1": "Wenn du diese Seite siehst, dann hast du noch Guthaben in deinem GiftFund für dein aktives PlanetCash Konto. Prüfe die Informationen unten.", "description2": "Wenn du Fragen hast, wende dich bitte an deinen Key Account Manager.", "project": "Projekt", "units": "Verfügbare Einheiten" diff --git a/public/static/locales/de/leaderboard.json b/public/static/locales/de/leaderboard.json index deddf08d17..9654b886fd 100644 --- a/public/static/locales/de/leaderboard.json +++ b/public/static/locales/de/leaderboard.json @@ -1,5 +1,5 @@ { - "LeaderBoard": { + "Leaderboard": { "forestFrontrunners": "Baum-Bestenliste", "mostRecent": "Neueste Spenden", "mostTrees": "Die meisten Bäume", diff --git a/public/static/locales/de/me.json b/public/static/locales/de/me.json index c00638d680..2998a51f0d 100644 --- a/public/static/locales/de/me.json +++ b/public/static/locales/de/me.json @@ -25,7 +25,7 @@ "editTarget": "Ziel ändern", "share": "Teilen", "registerTrees": "Bäume registrieren", - "registerTree": "Baum registrieren", + "registeredTree": "Registrierter Baum", "linkedIn": "LinkedIn", "registerTreesDescription": "Registriere Bäume, die Du z. B. im Garten selbst gepflanzt hast.", "myForest": "Mein Wald", @@ -83,6 +83,7 @@ "donorNameRequired": "Name des Spenders erforderlich", "donationAmountRequired": "Spendenbetrag erforderlich", "frequencyRequired": "Häufigkeit erforderlich", + "dateRequired": "Datum erforderlich", "project": "Projektname", "planetCashPayment": "PlanetCash Zahlung", "method": "Zahlungsmethode", @@ -210,6 +211,7 @@ "sepa_debit": "SEPA (Stripe)", "offline": "Offline", "offline-offline": "Offline", + "offline-transfer": "Offline", "profile": "Profil", "projects": "Projekte", "settings": "Einstellungen", diff --git a/public/static/locales/de/planetcash.json b/public/static/locales/de/planetcash.json index 7031306d63..666def3470 100644 --- a/public/static/locales/de/planetcash.json +++ b/public/static/locales/de/planetcash.json @@ -1,5 +1,5 @@ { - "PlanetCash": { + "Planetcash": { "title": "PlanetCash", "partnerSignupInfo": "Unsere Funktion Planet Cash / Bulk-Codes ist eine neue Funktion speziell für Partner von Plant-for-the-Planet. Melden Sie sich gerne bei Interesse bei partner@plant-for-the-planet.org.", "description": "PlanetCash ist ein entwicklerfreundliches Tool, das die Plant-for-the-Planet Plattform mit APIs und eingebauten Tools erweitert. Das PlanetCash-Guthaben ist ein Beitrag zu Plant-for-the-Planet, der vom Spender für verschiedene Projekte auf der Plattform verwendet werden kann.", diff --git a/public/static/locales/de/registerTrees.json b/public/static/locales/de/registerTrees.json index 2bd8540148..d8ddb3cfa6 100644 --- a/public/static/locales/de/registerTrees.json +++ b/public/static/locales/de/registerTrees.json @@ -3,10 +3,10 @@ "selectLocationMap": "Standort auf der Karte auswählen", "requiredNumberOfTrees": "Anzahl der Bäume ist erforderlich", "numberOfTrees": "Anzahl der Bäume", - "datePlanted": "Pflanzdatum", + "datePlanted": "Datum der Anpflanzung", "treeSpecies": "Baumarten", "speciesRequired": "Art ist erforderlich", - "drawPolygonMap": "Zeichne eines Polygons auf der Karte", + "drawPolygonMap": "Zeichne ein Polygons auf der Karte", "clickMapMark": "Klicke auf die Karte, um einen Ort zu markieren", "next": "Weiter" } diff --git a/public/static/locales/de/treemapper.json b/public/static/locales/de/treemapper.json index 558513f35a..579b391acc 100644 --- a/public/static/locales/de/treemapper.json +++ b/public/static/locales/de/treemapper.json @@ -12,6 +12,7 @@ "coordinates": "Koordinaten", "guid": "GUID", "height": "Höhe", + "invalidHeight": "Ungültige Höhe", "width": "Breite", "plantDate": "Pflanzdatum", "registrationDate": "Registrierungsdatum", @@ -25,6 +26,7 @@ "plantingLocation": "Standort der Pflanzung", "reviewAndSubmit": "Überprüfen und Einreichen", "sampleTree": "Musterbaum #{number}", + "tag": "Tag", "import": "Importieren", "editor": "Editor", "draw": "Zeichnen", @@ -33,8 +35,11 @@ "downloadCSVTemplate": "CSV-Vorlage herunterladen", "treeTag": "Baum-Tag", "diameter": "Durchmesser", + "invalidDiameter": "Ungültiger Durchmesser", "latitude": "Breitengrad", + "invalidLatitude": "Ungültiger Breitengrad", "longitude": "Längengrad", + "invalidLongitude": "Ungültiger Längengrad", "addAnotherSampleTree": "Weiteren Musterbaum hinzufügen", "skip": "Überspringen", "treeSpecies": "Baumarten", @@ -63,6 +68,10 @@ "speciesValidation": "Bitte gib eine Art ein", "external": "Extern", "date": "Datum", - "measurements": "Messwerte" + "datePlantedRequired": "Datum der Anpflanzung erforderlich", + "measurements": "Messwerte", + "ignoredColumnsWarning": "Die zusätzlichen Spalten wurden ignoriert", + "back": "Zurück", + "submit": "Einreichen" } } diff --git a/public/static/locales/es/bulkCodes.json b/public/static/locales/es/bulkCodes.json index 605168db0e..ffcd4415b0 100644 --- a/public/static/locales/es/bulkCodes.json +++ b/public/static/locales/es/bulkCodes.json @@ -1,3 +1 @@ -{ - "BulkCodes": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/es/country.json b/public/static/locales/es/country.json index f924787d13..01918b0ef9 100644 --- a/public/static/locales/es/country.json +++ b/public/static/locales/es/country.json @@ -260,4 +260,4 @@ "zm": "Zambia", "zw": "Zimbabwe" } -} \ No newline at end of file +} diff --git a/public/static/locales/es/donate.json b/public/static/locales/es/donate.json index 41e6cf6345..ca9545e5de 100644 --- a/public/static/locales/es/donate.json +++ b/public/static/locales/es/donate.json @@ -109,7 +109,6 @@ "projectPurpose": "Objetivo del proyecto", "type": "Tipo", "projectType": "Tipo de proyecto", - "conservation": "Conservación", "restoration": "Restauración", "filters": "Filtros" } diff --git a/public/static/locales/es/donationLink.json b/public/static/locales/es/donationLink.json index fa17184690..ffcd4415b0 100644 --- a/public/static/locales/es/donationLink.json +++ b/public/static/locales/es/donationLink.json @@ -1,3 +1 @@ -{ - "DonationLink": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/es/giftfunds.json b/public/static/locales/es/giftfunds.json index b3f526f2ea..ffcd4415b0 100644 --- a/public/static/locales/es/giftfunds.json +++ b/public/static/locales/es/giftfunds.json @@ -1,3 +1 @@ -{ - "Giftfunds": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/es/leaderboard.json b/public/static/locales/es/leaderboard.json index 16418b9bb5..cf2ecff927 100644 --- a/public/static/locales/es/leaderboard.json +++ b/public/static/locales/es/leaderboard.json @@ -6,4 +6,4 @@ "videoTitle": "Y finalmente, este", "searchUser": "Buscar usuario" } -} \ No newline at end of file +} diff --git a/public/static/locales/es/managePayouts.json b/public/static/locales/es/managePayouts.json index 21dfda5e63..ffcd4415b0 100644 --- a/public/static/locales/es/managePayouts.json +++ b/public/static/locales/es/managePayouts.json @@ -1,3 +1 @@ -{ - "ManagePayouts": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/es/manageProjects.json b/public/static/locales/es/manageProjects.json index 04d336783c..220232e152 100644 --- a/public/static/locales/es/manageProjects.json +++ b/public/static/locales/es/manageProjects.json @@ -118,4 +118,4 @@ "latitudeRequired": "Se requiere latitud", "longitudeRequired": "Se requiere la longitud" } -} \ No newline at end of file +} diff --git a/public/static/locales/es/me.json b/public/static/locales/es/me.json index 6df880f9a5..c0e4d5dcf4 100644 --- a/public/static/locales/es/me.json +++ b/public/static/locales/es/me.json @@ -6,7 +6,6 @@ "share": "Compartir", "registerTrees": "Registra los árboles", "registerTreesDescription": "Registra los árboles que has plantado tú mismo, por ejemplo, en tu jardín.", - "redeem": "Canjear", "myForest": "Mi bosque", "giftToGiftee": "Regalo a {gifteeName}", "settingManageProject": "Administrar los proyectos", @@ -15,7 +14,6 @@ "accountHistory": "Historial de la cuenta", "logout": "Cierre de sesión", "close": "Cerrar", - "support": "Apoyo", "addTarget": "Agregar objetivo", "noOfTrees": "No de árboles", "datePlanted": "Fecha de plantación", @@ -37,7 +35,6 @@ "moreThanOne": "se requiere un mínimo de 1 árbol", "registered": "Registrado", "receivedTrees": "Árboles recibidos", - "receivedFrom": "Recibido de {name}", "redeemedTrees": "Árboles redimidos", "myAccount": "Mi cuenta", "all": "Todo", diff --git a/public/static/locales/es/planetcash.json b/public/static/locales/es/planetcash.json index d716109ddb..ffcd4415b0 100644 --- a/public/static/locales/es/planetcash.json +++ b/public/static/locales/es/planetcash.json @@ -1,3 +1 @@ -{ - "Planetcash": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/es/profile.json b/public/static/locales/es/profile.json new file mode 100644 index 0000000000..ef10dd8c1d --- /dev/null +++ b/public/static/locales/es/profile.json @@ -0,0 +1,7 @@ +{ + "Profile": { + "myForestMap": { + "plantedTree": "{count, plural, =0 {Árboles} =1 {Árbol} other {Árboles}}" + } + } +} diff --git a/public/static/locales/es/redeem.json b/public/static/locales/es/redeem.json index 6f7e35a7c7..4b9991d9a4 100644 --- a/public/static/locales/es/redeem.json +++ b/public/static/locales/es/redeem.json @@ -8,4 +8,4 @@ "invalidType": "Tipo inválido, por favor, compruebe el enlace de nuevo", "redeemDescription": "Canjea tuVale de árboles y otros códigos." } -} \ No newline at end of file +} diff --git a/public/static/locales/es/registerTrees.json b/public/static/locales/es/registerTrees.json index 4f7eef5a4a..049534f126 100644 --- a/public/static/locales/es/registerTrees.json +++ b/public/static/locales/es/registerTrees.json @@ -10,4 +10,4 @@ "clickMapMark": "Haga clic en el mapa para marcar una ubicación", "next": "Siguiente" } -} \ No newline at end of file +} diff --git a/public/static/locales/es/tenants.json b/public/static/locales/es/tenants.json index e48b523141..921b72b50b 100644 --- a/public/static/locales/es/tenants.json +++ b/public/static/locales/es/tenants.json @@ -46,4 +46,4 @@ "description": "

#WEAREALIFE ¿Schreibfehler? No, ¡no!
Con el lema ELIGE LA VIDA ya estás en marcha.
Porque a partir de ahora podrás, con Alife & Kickin y la organización Plant-for-the-Planet Bäume, plantar y vivir. Acompáñanos en el camino de Alife & Kickin. ¿Cómo?
En los últimos dos meses, la organización Plant-for-the-Planet se ha hecho cargo de la venta de plantas. Nuestro objetivo: 50.000 plantas para un desarrollo sostenible. ¿Cómo?
En el mapa se puede ver cómo se realiza nuestro Alife & Kickin Wald. Ahora busca, comparte y disfruta más de la vida. ELEGIR LA VIDA.
UNA ORDEN UN ÁRBOL
#WEAREALIFE

" } } -} \ No newline at end of file +} diff --git a/public/static/locales/es/treemapper.json b/public/static/locales/es/treemapper.json index 0d138993cc..ffcd4415b0 100644 --- a/public/static/locales/es/treemapper.json +++ b/public/static/locales/es/treemapper.json @@ -1,3 +1 @@ -{ - "Treemapper": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/es/treemapperAnalytics.json b/public/static/locales/es/treemapperAnalytics.json index 7e8da06585..ffcd4415b0 100644 --- a/public/static/locales/es/treemapperAnalytics.json +++ b/public/static/locales/es/treemapperAnalytics.json @@ -1,3 +1 @@ -{ - "TreemapperAnalytics": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/fr/bulkCodes.json b/public/static/locales/fr/bulkCodes.json index 605168db0e..ffcd4415b0 100644 --- a/public/static/locales/fr/bulkCodes.json +++ b/public/static/locales/fr/bulkCodes.json @@ -1,3 +1 @@ -{ - "BulkCodes": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/fr/country.json b/public/static/locales/fr/country.json index da4baaa397..2962f2df35 100644 --- a/public/static/locales/fr/country.json +++ b/public/static/locales/fr/country.json @@ -260,4 +260,4 @@ "zm": "Zambie", "zw": "Zimbabwe" } -} \ No newline at end of file +} diff --git a/public/static/locales/fr/donate.json b/public/static/locales/fr/donate.json index 4d6c7f0993..f865023c93 100644 --- a/public/static/locales/fr/donate.json +++ b/public/static/locales/fr/donate.json @@ -109,7 +109,6 @@ "projectPurpose": "Objectif du projet", "type": "Type", "projectType": "Type de projet", - "conservation": "Conservation", "restoration": "Restauration", "filters": "Filtres" } diff --git a/public/static/locales/fr/donationLink.json b/public/static/locales/fr/donationLink.json index fa17184690..ffcd4415b0 100644 --- a/public/static/locales/fr/donationLink.json +++ b/public/static/locales/fr/donationLink.json @@ -1,3 +1 @@ -{ - "DonationLink": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/fr/giftfunds.json b/public/static/locales/fr/giftfunds.json index b3f526f2ea..ffcd4415b0 100644 --- a/public/static/locales/fr/giftfunds.json +++ b/public/static/locales/fr/giftfunds.json @@ -1,3 +1 @@ -{ - "Giftfunds": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/fr/leaderboard.json b/public/static/locales/fr/leaderboard.json index 3da0238e6e..7a4b53e81b 100644 --- a/public/static/locales/fr/leaderboard.json +++ b/public/static/locales/fr/leaderboard.json @@ -6,4 +6,4 @@ "videoTitle": "Et enfin, ce/cette", "searchUser": "Rechercher un utilisateur" } -} \ No newline at end of file +} diff --git a/public/static/locales/fr/managePayouts.json b/public/static/locales/fr/managePayouts.json index 21dfda5e63..ffcd4415b0 100644 --- a/public/static/locales/fr/managePayouts.json +++ b/public/static/locales/fr/managePayouts.json @@ -1,3 +1 @@ -{ - "ManagePayouts": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/fr/manageProjects.json b/public/static/locales/fr/manageProjects.json index 6043d5f929..5fecf2b63b 100644 --- a/public/static/locales/fr/manageProjects.json +++ b/public/static/locales/fr/manageProjects.json @@ -121,4 +121,4 @@ "descriptionForManageProjects": "Présentez votre travail de restauration pour le suivi et pour recevoir des dons.", "manageProjects": "Gérer les projets" } -} \ No newline at end of file +} diff --git a/public/static/locales/fr/me.json b/public/static/locales/fr/me.json index 1a5d711238..022e49fcfd 100644 --- a/public/static/locales/fr/me.json +++ b/public/static/locales/fr/me.json @@ -6,7 +6,6 @@ "share": "Partager", "registerTrees": "Enregistrer les arbres", "registerTreesDescription": "Enregistrer les arbres que vous avez plantés vous-même, par exemple dans votre jardin.", - "redeem": "Redeem", "myForest": "Ma forêt", "giftToGiftee": "Cadeau à {gifteeName}", "settingManageProject": "Gérer les projets", @@ -15,7 +14,6 @@ "accountHistory": "Historique du compte", "logout": "Déconnexion", "close": "Fermer", - "support": "Soutien", "addTarget": "Ajouter une cible", "noOfTrees": "Combien d'arbres?", "datePlanted": "Date de plantation", @@ -37,7 +35,6 @@ "moreThanOne": "1 arbre minimum requis", "registered": "Enregistré", "receivedTrees": "Arbres reçus", - "receivedFrom": "Reçu de {name}", "redeemedTrees": "Arbres rachetés", "myAccount": "Mon compte", "all": "Tous", diff --git a/public/static/locales/fr/planetcash.json b/public/static/locales/fr/planetcash.json index d716109ddb..ffcd4415b0 100644 --- a/public/static/locales/fr/planetcash.json +++ b/public/static/locales/fr/planetcash.json @@ -1,3 +1 @@ -{ - "Planetcash": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/fr/profile.json b/public/static/locales/fr/profile.json new file mode 100644 index 0000000000..0804e2112b --- /dev/null +++ b/public/static/locales/fr/profile.json @@ -0,0 +1,7 @@ +{ + "Profile": { + "myForestMap": { + "plantedTree": "{count, plural, =0 {Arbres} =1 {Arbre} other {Arbres}}\n" + } + } +} diff --git a/public/static/locales/fr/registerTrees.json b/public/static/locales/fr/registerTrees.json index 3d6f53193c..22007f9ff7 100644 --- a/public/static/locales/fr/registerTrees.json +++ b/public/static/locales/fr/registerTrees.json @@ -10,4 +10,4 @@ "clickMapMark": "Cliquer sur la carte pour marquer un lieu", "next": "Suivant" } -} \ No newline at end of file +} diff --git a/public/static/locales/fr/tenants.json b/public/static/locales/fr/tenants.json index c4af4d3b85..9acd711e17 100644 --- a/public/static/locales/fr/tenants.json +++ b/public/static/locales/fr/tenants.json @@ -46,4 +46,4 @@ "description": "

#WEAREALIFE Une faute d'ortographe? Non, c'est intentionnel !
C'est tout à fait dans l'esprit de la devise CHOISIR LA VIE qu'il vous faut maintenant.
En effet, dès maintenant, vous pouvez, avec Alife & Kickin et l'organisation Plant-for-the-Planet Arbres, choisir de planter et de vivre. Rejoignez-nous sur le terrain d'Alife & Kickin. Comment ?
Pour chaque commande en ligne, nous planterons un arbre avec Plant-for-the-Planet dans les deux prochains mois. Notre objectif : 50 000 graines pour une alimentation saine. Comment ?
Sur la carte, vous pouvez voir où sera plantée la forêt Alife & Kickin. Alors, prenez le temps d'écouter, d'écouter et de vivre votre vie. CHOISISSEZ LA VIE.
UNE COMMANDE, UN ARBRE
#WEAREALIFE

" } } -} \ No newline at end of file +} diff --git a/public/static/locales/fr/treemapper.json b/public/static/locales/fr/treemapper.json index eb2be0cf10..260a2cac07 100644 --- a/public/static/locales/fr/treemapper.json +++ b/public/static/locales/fr/treemapper.json @@ -23,4 +23,4 @@ "cm": "cm", "m": "m" } -} \ No newline at end of file +} diff --git a/public/static/locales/fr/treemapperAnalytics.json b/public/static/locales/fr/treemapperAnalytics.json index 7e8da06585..ffcd4415b0 100644 --- a/public/static/locales/fr/treemapperAnalytics.json +++ b/public/static/locales/fr/treemapperAnalytics.json @@ -1,3 +1 @@ -{ - "TreemapperAnalytics": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/it/bulkCodes.json b/public/static/locales/it/bulkCodes.json index 605168db0e..ffcd4415b0 100644 --- a/public/static/locales/it/bulkCodes.json +++ b/public/static/locales/it/bulkCodes.json @@ -1,3 +1 @@ -{ - "BulkCodes": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/it/country.json b/public/static/locales/it/country.json index 9220ab6041..0628727cd1 100644 --- a/public/static/locales/it/country.json +++ b/public/static/locales/it/country.json @@ -260,4 +260,4 @@ "zm": "Zambia", "zw": "Zimbabwe" } -} \ No newline at end of file +} diff --git a/public/static/locales/it/donationLink.json b/public/static/locales/it/donationLink.json index fa17184690..ffcd4415b0 100644 --- a/public/static/locales/it/donationLink.json +++ b/public/static/locales/it/donationLink.json @@ -1,3 +1 @@ -{ - "DonationLink": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/it/giftfunds.json b/public/static/locales/it/giftfunds.json index b3f526f2ea..ffcd4415b0 100644 --- a/public/static/locales/it/giftfunds.json +++ b/public/static/locales/it/giftfunds.json @@ -1,3 +1 @@ -{ - "Giftfunds": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/it/leaderboard.json b/public/static/locales/it/leaderboard.json index 169b26a6e7..d05838a7b5 100644 --- a/public/static/locales/it/leaderboard.json +++ b/public/static/locales/it/leaderboard.json @@ -6,4 +6,4 @@ "videoTitle": "E infine, questo", "searchUser": "Ricerca utente" } -} \ No newline at end of file +} diff --git a/public/static/locales/it/managePayouts.json b/public/static/locales/it/managePayouts.json index 21dfda5e63..ffcd4415b0 100644 --- a/public/static/locales/it/managePayouts.json +++ b/public/static/locales/it/managePayouts.json @@ -1,3 +1 @@ -{ - "ManagePayouts": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/it/manageProjects.json b/public/static/locales/it/manageProjects.json index 45d49fdbf7..0e8720ed3c 100644 --- a/public/static/locales/it/manageProjects.json +++ b/public/static/locales/it/manageProjects.json @@ -118,4 +118,4 @@ "latitudeRequired": "La latitudine è richiesta", "longitudeRequired": "La longitudine è richiesta" } -} \ No newline at end of file +} diff --git a/public/static/locales/it/me.json b/public/static/locales/it/me.json index caebba86a5..38e3fa528a 100644 --- a/public/static/locales/it/me.json +++ b/public/static/locales/it/me.json @@ -6,7 +6,6 @@ "share": "Condividi", "registerTrees": "Registrare gli alberi", "registerTreesDescription": "Registrate gli alberi che avete piantato voi stessi, ad esempio nel vostro giardino.", - "redeem": "Riscatta", "myForest": "La mia foresta", "giftToGiftee": "Regalo a {gifteeName}", "settingManageProject": "Gestire progetti", @@ -15,7 +14,6 @@ "accountHistory": "Storia dell'account", "logout": "Logout", "close": "Chiudere", - "support": "Supporto", "addTarget": "Aggiungi obiettivo", "noOfTrees": "No di alberi", "datePlanted": "Data prevista", @@ -37,7 +35,6 @@ "moreThanOne": "minimo 1 albero richiesto", "registered": "Registrato", "receivedTrees": "Alberi ricevuti", - "receivedFrom": "Ricevuto da {name}", "redeemedTrees": "Alberi Riscattati", "myAccount": "Il mio conto", "all": "Tutti", diff --git a/public/static/locales/it/planetcash.json b/public/static/locales/it/planetcash.json index d716109ddb..ffcd4415b0 100644 --- a/public/static/locales/it/planetcash.json +++ b/public/static/locales/it/planetcash.json @@ -1,3 +1 @@ -{ - "Planetcash": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/it/profile.json b/public/static/locales/it/profile.json new file mode 100644 index 0000000000..dcc56deb78 --- /dev/null +++ b/public/static/locales/it/profile.json @@ -0,0 +1,7 @@ +{ + "Profile": { + "myForestMap": { + "plantedTree": "{count, plural, =0 {Alberi} =1 {Albero} other {Alberi}}\n" + } + } +} diff --git a/public/static/locales/it/redeem.json b/public/static/locales/it/redeem.json index 06b0e8c041..778fc9f02d 100644 --- a/public/static/locales/it/redeem.json +++ b/public/static/locales/it/redeem.json @@ -8,4 +8,4 @@ "invalidType": "Tipo non valido, si prega di controllare di nuovo il link", "redeemDescription": "Riscatta il tuo buono per l'albero e altri codici." } -} \ No newline at end of file +} diff --git a/public/static/locales/it/registerTrees.json b/public/static/locales/it/registerTrees.json index 97b757d7de..67ecf392ba 100644 --- a/public/static/locales/it/registerTrees.json +++ b/public/static/locales/it/registerTrees.json @@ -10,4 +10,4 @@ "clickMapMark": "Clicca sulla mappa per contrassegnare una posizione", "next": "Avanti" } -} \ No newline at end of file +} diff --git a/public/static/locales/it/tenants.json b/public/static/locales/it/tenants.json index 4e23853966..83a91b5494 100644 --- a/public/static/locales/it/tenants.json +++ b/public/static/locales/it/tenants.json @@ -46,4 +46,4 @@ "description": "

#WEAREALIFE Schreibfehler? No, Absicht!
Ganz nach dem Motto CHOOSE LIFE seid ihr jetzt dran.
Denn ab sofort könnt ihr mit Alife & Kickin und der Organisation Plant-for-the-Planet Bäume pflanzen und Leben schenken. Erschafft mit uns den Alife & Kickin Wald. Come?
Pro Onlinebestellung pflanzen wir in den nächsten 2 Monaten einen Baum mit Plant-for-the-Planet. Unser Ziel: 50.000 Bäume für eine nachhaltige Wiederaufforstung. Dove?
Auf der Karte seht ihr, wo unser Alife & Kickin Wald realisiert wird. Jetzt anschauen, mithelfen und noch mehr Leben schenken. SCEGLIERE LA VITA.
UN ORDINE UN ALBERO
#WEAREALIFE

" } } -} \ No newline at end of file +} diff --git a/public/static/locales/it/treemapper.json b/public/static/locales/it/treemapper.json index 0d138993cc..ffcd4415b0 100644 --- a/public/static/locales/it/treemapper.json +++ b/public/static/locales/it/treemapper.json @@ -1,3 +1 @@ -{ - "Treemapper": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/it/treemapperAnalytics.json b/public/static/locales/it/treemapperAnalytics.json index 7e8da06585..ffcd4415b0 100644 --- a/public/static/locales/it/treemapperAnalytics.json +++ b/public/static/locales/it/treemapperAnalytics.json @@ -1,3 +1 @@ -{ - "TreemapperAnalytics": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/pt-BR/bulkCodes.json b/public/static/locales/pt-BR/bulkCodes.json index 605168db0e..ffcd4415b0 100644 --- a/public/static/locales/pt-BR/bulkCodes.json +++ b/public/static/locales/pt-BR/bulkCodes.json @@ -1,3 +1 @@ -{ - "BulkCodes": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/pt-BR/country.json b/public/static/locales/pt-BR/country.json index a7cdedd182..d6fefdbacc 100644 --- a/public/static/locales/pt-BR/country.json +++ b/public/static/locales/pt-BR/country.json @@ -260,4 +260,4 @@ "zm": "Zâmbia", "zw": "Zimbabue" } -} \ No newline at end of file +} diff --git a/public/static/locales/pt-BR/donate.json b/public/static/locales/pt-BR/donate.json index 1a5b7f1a13..829c7a773f 100644 --- a/public/static/locales/pt-BR/donate.json +++ b/public/static/locales/pt-BR/donate.json @@ -109,7 +109,6 @@ "projectPurpose": "Objetivo do projeto", "type": "Tipo", "projectType": "Tipo de projeto", - "conservation": "Conservação", "restoration": "Restauração", "filters": "Filtros", "perM2": "por m²" diff --git a/public/static/locales/pt-BR/donationLink.json b/public/static/locales/pt-BR/donationLink.json index fa17184690..ffcd4415b0 100644 --- a/public/static/locales/pt-BR/donationLink.json +++ b/public/static/locales/pt-BR/donationLink.json @@ -1,3 +1 @@ -{ - "DonationLink": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/pt-BR/giftfunds.json b/public/static/locales/pt-BR/giftfunds.json index b3f526f2ea..ffcd4415b0 100644 --- a/public/static/locales/pt-BR/giftfunds.json +++ b/public/static/locales/pt-BR/giftfunds.json @@ -1,3 +1 @@ -{ - "Giftfunds": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/pt-BR/leaderboard.json b/public/static/locales/pt-BR/leaderboard.json index 83dc19cb62..613427d28f 100644 --- a/public/static/locales/pt-BR/leaderboard.json +++ b/public/static/locales/pt-BR/leaderboard.json @@ -6,4 +6,4 @@ "videoTitle": "E finalmente, isto", "searchUser": "Pesquisar Usuário" } -} \ No newline at end of file +} diff --git a/public/static/locales/pt-BR/managePayouts.json b/public/static/locales/pt-BR/managePayouts.json index 21dfda5e63..ffcd4415b0 100644 --- a/public/static/locales/pt-BR/managePayouts.json +++ b/public/static/locales/pt-BR/managePayouts.json @@ -1,3 +1 @@ -{ - "ManagePayouts": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/pt-BR/me.json b/public/static/locales/pt-BR/me.json index 52a517db3e..de2eb78f9f 100644 --- a/public/static/locales/pt-BR/me.json +++ b/public/static/locales/pt-BR/me.json @@ -6,7 +6,6 @@ "share": "Compartilhe", "registerTrees": "Registrar Árvores", "registerTreesDescription": "Registre as árvores que você mesmo plantou, por exemplo, no seu quintal.", - "redeem": "Resgate", "myForest": "Minha Floresta", "giftToGiftee": "Presente para {gifteeName}", "settingManageProject": "Gerenciar Projetos", @@ -15,7 +14,6 @@ "accountHistory": "Histórico da conta", "logout": "Sair", "close": "Fechar", - "support": "Suporte", "addTarget": "Adicionar Meta", "noOfTrees": "Nº de árvores", "datePlanted": "Data Plantada", @@ -37,7 +35,6 @@ "moreThanOne": "mínimo 1 árvore necessária", "registered": "Registado em", "receivedTrees": "Árvores Recebidas", - "receivedFrom": "Recebido de {name}", "redeemedTrees": "Árvores Redimidas", "myAccount": "Minha Conta", "all": "Todos", diff --git a/public/static/locales/pt-BR/planetcash.json b/public/static/locales/pt-BR/planetcash.json index d716109ddb..ffcd4415b0 100644 --- a/public/static/locales/pt-BR/planetcash.json +++ b/public/static/locales/pt-BR/planetcash.json @@ -1,3 +1 @@ -{ - "Planetcash": {} -} \ No newline at end of file +{ } diff --git a/public/static/locales/pt-BR/profile.json b/public/static/locales/pt-BR/profile.json new file mode 100644 index 0000000000..56cc946168 --- /dev/null +++ b/public/static/locales/pt-BR/profile.json @@ -0,0 +1,7 @@ +{ + "Profile": { + "myForestMap": { + "plantedTree": "{count, plural, =0 {Árvores} =1 {Árvore} other {Árvores}}\n" + } + } +} diff --git a/public/static/locales/pt-BR/redeem.json b/public/static/locales/pt-BR/redeem.json index 40d99353a4..b34704dd11 100644 --- a/public/static/locales/pt-BR/redeem.json +++ b/public/static/locales/pt-BR/redeem.json @@ -8,4 +8,4 @@ "invalidType": "Tipo inválido, por favor verifique o link novamente", "redeemDescription": "Resgate o seu voucher de árvore e outros códigos." } -} \ No newline at end of file +} diff --git a/public/static/locales/pt-BR/registerTrees.json b/public/static/locales/pt-BR/registerTrees.json index af6809b83d..eeb87b25b2 100644 --- a/public/static/locales/pt-BR/registerTrees.json +++ b/public/static/locales/pt-BR/registerTrees.json @@ -10,4 +10,4 @@ "clickMapMark": "Clique no mapa para marcar uma localização", "next": "Próximo" } -} \ No newline at end of file +} diff --git a/public/static/locales/pt-BR/tenants.json b/public/static/locales/pt-BR/tenants.json index be987be0aa..c8f2116f7b 100644 --- a/public/static/locales/pt-BR/tenants.json +++ b/public/static/locales/pt-BR/tenants.json @@ -50,4 +50,4 @@ "description": "Em 2021 a AMS junta-se à TrillionTreeCampaign e juntamente com a Plant-for-the-Planet começamos a retribuir à natureza. Utilizaremos as oportunidades que obtivermos para promover a sustentabilidade na nossa cadeia de fornecimento e através das nossas relações com clientes e parceiros comerciais. Junte-se a nós e #StopTalkingStartPlanting!" } } -} \ No newline at end of file +} diff --git a/public/static/locales/pt-BR/treemapperAnalytics.json b/public/static/locales/pt-BR/treemapperAnalytics.json index 7e8da06585..ffcd4415b0 100644 --- a/public/static/locales/pt-BR/treemapperAnalytics.json +++ b/public/static/locales/pt-BR/treemapperAnalytics.json @@ -1,3 +1 @@ -{ - "TreemapperAnalytics": {} -} \ No newline at end of file +{ } From bf5ce3b1f4121c84ae71caba78ca4b05ecb93741 Mon Sep 17 00:00:00 2001 From: "lingohub[bot]" <69908207+lingohub[bot]@users.noreply.github.com> Date: Wed, 13 Mar 2024 04:44:53 +0000 Subject: [PATCH 33/70] =?UTF-8?q?=F0=9F=8C=90=20Language=20update=20from?= =?UTF-8?q?=20LingoHub=20=F0=9F=A4=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Project Name: Planet Webapp (next-intl) Project Link: https://translate.lingohub.com/plant-for-the-planet/dashboard/planet-webapp-(next-intl) User: Mohit Bajaj Easy language translations with LingoHub 🚀 --- public/static/locales/cs/profile.json | 6 ++++++ public/static/locales/es/profile.json | 6 ++++++ public/static/locales/fr/profile.json | 6 ++++++ public/static/locales/it/profile.json | 6 ++++++ public/static/locales/pt-BR/profile.json | 6 ++++++ 5 files changed, 30 insertions(+) diff --git a/public/static/locales/cs/profile.json b/public/static/locales/cs/profile.json index 2c89fd1616..cd681bc51b 100644 --- a/public/static/locales/cs/profile.json +++ b/public/static/locales/cs/profile.json @@ -1,7 +1,13 @@ { "Profile": { + "myPublicProfile": { + "support": "Podpora" + }, "myForestMap": { "plantedTree": "{count, plural, =0 {stromů} =1 {strom} other {stromů}}" + }, + "myContributions": { + "receivedFrom": "Přijato od {name}" } } } diff --git a/public/static/locales/es/profile.json b/public/static/locales/es/profile.json index ef10dd8c1d..69a955e5eb 100644 --- a/public/static/locales/es/profile.json +++ b/public/static/locales/es/profile.json @@ -1,7 +1,13 @@ { "Profile": { + "myPublicProfile": { + "support": "Apoyo" + }, "myForestMap": { "plantedTree": "{count, plural, =0 {Árboles} =1 {Árbol} other {Árboles}}" + }, + "myContributions": { + "receivedFrom": "Recibido de {name}" } } } diff --git a/public/static/locales/fr/profile.json b/public/static/locales/fr/profile.json index 0804e2112b..a3c52e765f 100644 --- a/public/static/locales/fr/profile.json +++ b/public/static/locales/fr/profile.json @@ -1,7 +1,13 @@ { "Profile": { + "myPublicProfile": { + "support": "Soutien" + }, "myForestMap": { "plantedTree": "{count, plural, =0 {Arbres} =1 {Arbre} other {Arbres}}\n" + }, + "myContributions": { + "receivedFrom": "Reçu de {name}" } } } diff --git a/public/static/locales/it/profile.json b/public/static/locales/it/profile.json index dcc56deb78..475993042d 100644 --- a/public/static/locales/it/profile.json +++ b/public/static/locales/it/profile.json @@ -1,7 +1,13 @@ { "Profile": { + "myPublicProfile": { + "support": "Supporto" + }, "myForestMap": { "plantedTree": "{count, plural, =0 {Alberi} =1 {Albero} other {Alberi}}\n" + }, + "myContributions": { + "receivedFrom": "Ricevuto da {name}" } } } diff --git a/public/static/locales/pt-BR/profile.json b/public/static/locales/pt-BR/profile.json index 56cc946168..56354fd0f5 100644 --- a/public/static/locales/pt-BR/profile.json +++ b/public/static/locales/pt-BR/profile.json @@ -1,7 +1,13 @@ { "Profile": { + "myPublicProfile": { + "support": "Suporte" + }, "myForestMap": { "plantedTree": "{count, plural, =0 {Árvores} =1 {Árvore} other {Árvores}}\n" + }, + "myContributions": { + "receivedFrom": "Recebido de {name}" } } } From 9c783e916ce90c1b0a1b8adb247617f0a3760198 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 13 Mar 2024 11:01:53 +0530 Subject: [PATCH 34/70] fix: resolves missing message warning in SelectLanguageAndCountry --- .../Footer/SelectLanguageAndCountry.tsx | 30 +++++++++++-------- src/utils/countryCurrency/countryUtils.js | 12 +++++--- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx b/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx index 3048e8be2a..f63f9f1db6 100644 --- a/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx +++ b/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx @@ -24,6 +24,7 @@ import styles from './SelectLanguageAndCountry.module.scss'; import { useLocale, useTranslations } from 'next-intl'; import { useTenant } from '../TenantContext'; import { useRouter } from 'next/router'; +import { CountryCode } from '@planet-sdk/common'; interface MapCountryProps { value: string; @@ -44,7 +45,7 @@ interface TransitionsModalProps { interface countryInterface { countryName: string; - countryCode: string; + countryCode: CountryCode; currencyName: string; currencyCode: string; currencyCountryFlag: string; @@ -109,18 +110,21 @@ function MapCountry({ value, handleChange }: MapCountryProps) { onChange={handleChange} className={styles.currencyGrid} > - {sortedCountriesData.map((country: countryInterface) => ( - } - label={ - t(country.countryCode.toLowerCase()) + - ' · ' + - country.currencyCode - } - /> - ))} + {sortedCountriesData.map((country: countryInterface) => { + console.log(country); + return ( + } + label={ + t(country.countryCode.toLowerCase()) + + ' · ' + + country.currencyCode + } + /> + ); + })} ); diff --git a/src/utils/countryCurrency/countryUtils.js b/src/utils/countryCurrency/countryUtils.js index 1514b9a800..19614de096 100644 --- a/src/utils/countryCurrency/countryUtils.js +++ b/src/utils/countryCurrency/countryUtils.js @@ -43,11 +43,15 @@ export function sortCountriesData(sortBy) { /** * Sorts the countries array for the translated country name - * @param {Function} t - translation function + * @param {Function} tCountry - translation function * @param {String} language - language to get country names for * @param {Array} priorityCountries - country code to always show first in given order */ -export function sortCountriesByTranslation(t, language, priorityCountryCodes) { +export function sortCountriesByTranslation( + tCountry, + language, + priorityCountryCodes +) { const key = `${language}.${priorityCountryCodes}`; if (!sortedCountries[key]) { const priorityCountries = []; @@ -63,8 +67,8 @@ export function sortCountriesByTranslation(t, language, priorityCountryCodes) { // sort array of countries sortedCountries[key] = priorityCountries.concat( filteredCountries.sort((a, b) => { - const nameA = t(`country:${a.countryCode.toLowerCase()}`); - const nameB = t(`country:${b.countryCode.toLowerCase()}`); + const nameA = tCountry(a.countryCode.toLowerCase()); + const nameB = tCountry(b.countryCode.toLowerCase()); if (nameA > nameB) { return 1; } From f8cbe30904ead8549263ada0d87aaa03b7f0e52f Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 13 Mar 2024 11:04:39 +0530 Subject: [PATCH 35/70] refactor: removes commented import --- .storybook/preview.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/.storybook/preview.js b/.storybook/preview.js index 56335755cd..2a72e6bd2e 100644 --- a/.storybook/preview.js +++ b/.storybook/preview.js @@ -6,8 +6,6 @@ import { ThemeProvider } from '@storybook/theming'; import getMessages from './i18n'; import { NextIntlClientProvider } from 'next-intl'; -// import { ThemeProvider } from 'emotion-theming'; - /* * Global decorator to apply the styles to all stories * Read more about them at: From cf6f09266e62a3e581509294e21b264ccc9f1160 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 13 Mar 2024 11:12:21 +0530 Subject: [PATCH 36/70] fix: update localeRegex used in removeLocaleFromUrl - localeRegex now identifies language and region codes e.g. both 'en' and 'en-FR' will be identified --- middleware.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/middleware.ts b/middleware.ts index 791782ebde..aee4f9c523 100644 --- a/middleware.ts +++ b/middleware.ts @@ -32,7 +32,7 @@ function getLocale(request: NextRequest): string | undefined { /** Identifies locale in relative url and removes it */ function removeLocaleFromUrl(pathname: string): string { let newPathname = ''; - const localeRegex = /^[a-z]{2}$/i; + const localeRegex = /^[a-z]{2}(-[a-z]{2})?$/i; const splitPathname = pathname.split('/'); if (splitPathname.length < 2) return pathname; From cbf739b7ce3494d25726822c4da30a45db6158c1 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 13 Mar 2024 11:17:28 +0530 Subject: [PATCH 37/70] fix: resolves missing message warning for Edit Profile --- pages/sites/[slug]/[locale]/profile/edit.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/sites/[slug]/[locale]/profile/edit.tsx b/pages/sites/[slug]/[locale]/profile/edit.tsx index 3002df6813..d9fa25135b 100644 --- a/pages/sites/[slug]/[locale]/profile/edit.tsx +++ b/pages/sites/[slug]/[locale]/profile/edit.tsx @@ -78,7 +78,7 @@ export const getStaticProps: GetStaticProps = async ( const messages = await getMessagesForPage({ locale: context.params?.locale as string, - filenames: ['common', 'me', 'country'], + filenames: ['common', 'me', 'country', 'editProfile'], }); return { From 031b5a05a62b93ade4e7d6812c0ddd1452153334 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 13 Mar 2024 11:40:23 +0530 Subject: [PATCH 38/70] refactor: refactor i18nConfig and locale logic in middleware --- i18n-config.ts | 2 +- middleware.ts | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/i18n-config.ts b/i18n-config.ts index 57d67fd242..f620dc8d55 100644 --- a/i18n-config.ts +++ b/i18n-config.ts @@ -2,6 +2,6 @@ export const i18nConfig = { defaultLocale: 'en', locales: ['en', 'de', 'cs', 'es', 'fr', 'it', 'pt-BR'], -} as const; +}; export type Locale = (typeof i18nConfig)['locales'][number]; diff --git a/middleware.ts b/middleware.ts index aee4f9c523..d35db87a96 100644 --- a/middleware.ts +++ b/middleware.ts @@ -2,14 +2,14 @@ import { NextRequest, NextResponse } from 'next/server'; import { getTenantSlug } from './src/utils/multiTenancy/helpers'; import { match as matchLocale } from '@formatjs/intl-localematcher'; import Negotiator from 'negotiator'; -import { i18nConfig, Locale } from './i18n-config'; +import { i18nConfig } from './i18n-config'; function getLocale(request: NextRequest): string | undefined { // Negotiator expects plain object so we need to transform headers const negotiatorHeaders: Record = {}; request.headers.forEach((value, key) => (negotiatorHeaders[key] = value)); - const locales = i18nConfig.locales as unknown as Locale[]; + const locales = i18nConfig.locales; // Use negotiator and intl-localematcher to get best locale const languages = new Negotiator({ headers: negotiatorHeaders }).languages( @@ -19,6 +19,7 @@ function getLocale(request: NextRequest): string | undefined { const previouslySelectedLanguage = request.cookies.get('NEXT_LOCALE')?.value; if ( previouslySelectedLanguage !== undefined && + locales.includes(previouslySelectedLanguage) && languages[0] !== previouslySelectedLanguage ) { languages.unshift(previouslySelectedLanguage); @@ -31,7 +32,6 @@ function getLocale(request: NextRequest): string | undefined { /** Identifies locale in relative url and removes it */ function removeLocaleFromUrl(pathname: string): string { - let newPathname = ''; const localeRegex = /^[a-z]{2}(-[a-z]{2})?$/i; const splitPathname = pathname.split('/'); @@ -41,8 +41,7 @@ function removeLocaleFromUrl(pathname: string): string { const splitFirstSegment = firstSegment.split('-'); if (localeRegex.test(splitFirstSegment[0])) { - newPathname = splitPathname.slice(2).join('/'); - return newPathname; + return splitPathname.slice(2).join('/'); //returns the new pathname without the locale } return pathname; @@ -96,7 +95,10 @@ export default async function middleware(req: NextRequest) { // store NEXT_LOCALE cookie if available const localeFromPath = pathname.split('/')[1]; const localeCookieValue = req.cookies.get('NEXT_LOCALE')?.value; - if (localeFromPath !== localeCookieValue) { + if ( + i18nConfig.locales.includes(localeFromPath) && + localeFromPath !== localeCookieValue + ) { res.cookies.set('NEXT_LOCALE', localeFromPath, { sameSite: 'strict', maxAge: 31536000, // 1 year From 94abc5733e40b97d6ea5804b7f8a3803700a3edf Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 13 Mar 2024 11:56:42 +0530 Subject: [PATCH 39/70] refactor: handles errors in getLocale function --- middleware.ts | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/middleware.ts b/middleware.ts index d35db87a96..24ec3c7a0b 100644 --- a/middleware.ts +++ b/middleware.ts @@ -5,29 +5,35 @@ import Negotiator from 'negotiator'; import { i18nConfig } from './i18n-config'; function getLocale(request: NextRequest): string | undefined { - // Negotiator expects plain object so we need to transform headers - const negotiatorHeaders: Record = {}; - request.headers.forEach((value, key) => (negotiatorHeaders[key] = value)); + try { + // Negotiator expects plain object so we need to transform headers + const negotiatorHeaders: Record = {}; + request.headers.forEach((value, key) => (negotiatorHeaders[key] = value)); - const locales = i18nConfig.locales; + const locales = i18nConfig.locales; - // Use negotiator and intl-localematcher to get best locale - const languages = new Negotiator({ headers: negotiatorHeaders }).languages( - locales - ); + // Use negotiator and intl-localematcher to get best locale + const languages = new Negotiator({ headers: negotiatorHeaders }).languages( + locales + ); - const previouslySelectedLanguage = request.cookies.get('NEXT_LOCALE')?.value; - if ( - previouslySelectedLanguage !== undefined && - locales.includes(previouslySelectedLanguage) && - languages[0] !== previouslySelectedLanguage - ) { - languages.unshift(previouslySelectedLanguage); + const previouslySelectedLanguage = + request.cookies.get('NEXT_LOCALE')?.value; + if ( + previouslySelectedLanguage !== undefined && + locales.includes(previouslySelectedLanguage) && + languages[0] !== previouslySelectedLanguage + ) { + languages.unshift(previouslySelectedLanguage); + } + + const locale = matchLocale(languages, locales, i18nConfig.defaultLocale); + + return locale; + } catch (error) { + console.error('Error occurred while determining the locale:', error); + return i18nConfig.defaultLocale; } - - const locale = matchLocale(languages, locales, i18nConfig.defaultLocale); - - return locale; } /** Identifies locale in relative url and removes it */ From 58196f0bc7623390cf3b98dc2573f2962cb13f5f Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 13 Mar 2024 13:49:15 +0530 Subject: [PATCH 40/70] refactor: removes console logs --- .../Footer/SelectLanguageAndCountry.tsx | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx b/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx index f63f9f1db6..2420731be3 100644 --- a/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx +++ b/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx @@ -110,21 +110,18 @@ function MapCountry({ value, handleChange }: MapCountryProps) { onChange={handleChange} className={styles.currencyGrid} > - {sortedCountriesData.map((country: countryInterface) => { - console.log(country); - return ( - } - label={ - t(country.countryCode.toLowerCase()) + - ' · ' + - country.currencyCode - } - /> - ); - })} + {sortedCountriesData.map((country: countryInterface) => ( + } + label={ + t(country.countryCode.toLowerCase()) + + ' · ' + + country.currencyCode + } + /> + ))} ); From 6adf1ceda8bc7270da0e891e03aa899ea0f83ad9 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 13 Mar 2024 16:05:55 +0530 Subject: [PATCH 41/70] fix: removes unsupported country option --- src/utils/countryCurrency/countriesData.json | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/utils/countryCurrency/countriesData.json b/src/utils/countryCurrency/countriesData.json index 443a4a3ad6..e9d941bf77 100644 --- a/src/utils/countryCurrency/countriesData.json +++ b/src/utils/countryCurrency/countriesData.json @@ -1958,13 +1958,5 @@ "currencyCode": "RSD", "currencyCountryFlag": "RS", "languageCode": "en" - }, - { - "countryName": "US Armed Forces", - "countryCode": "USAF", - "currencyName": "US Dollar", - "currencyCode": "USD", - "currencyCountryFlag": "US", - "languageCode": "en" } ] From 953271d8f8c41546e0eccfe8a7c78706b7e1c476 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 13 Mar 2024 16:52:51 +0530 Subject: [PATCH 42/70] fix: updates checks on `asPath` in profile to include `locale` --- .../PlantedTreesContributions.tsx | 13 ++++++----- .../TreesOrUnitAreaAndDonateOption.tsx | 9 ++++---- .../MyForestMap/microComponents/PopUp.tsx | 5 +++-- .../microComponents/UserFeatures.tsx | 7 +++--- .../ProfileBox/microComponents/UserInfo.tsx | 22 ++++++++++--------- 5 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/features/user/Profile/components/MyContributions/microComponents/PlantedTreesContributions.tsx b/src/features/user/Profile/components/MyContributions/microComponents/PlantedTreesContributions.tsx index 931d70ce15..28810d5884 100644 --- a/src/features/user/Profile/components/MyContributions/microComponents/PlantedTreesContributions.tsx +++ b/src/features/user/Profile/components/MyContributions/microComponents/PlantedTreesContributions.tsx @@ -1,4 +1,4 @@ -import { useTranslations } from 'next-intl'; +import { useLocale, useTranslations } from 'next-intl'; import { useState } from 'react'; import Button from '@mui/material/Button'; import myForestStyles from '../../../styles/MyForest.module.scss'; @@ -18,6 +18,7 @@ const PlantedTreesContributions = ({ }: TreeContributedProjectListProps): ReactElement => { const { asPath } = useRouter(); const t = useTranslations('Profile'); + const locale = useLocale(); const [isAddTargetModalOpen, setIsAddTargetModalOpen] = useState(false); const { treePlantationContribution, additionalInfoRelatedToContributions } = useMyForest(); @@ -30,13 +31,13 @@ const PlantedTreesContributions = ({ const _checkConditions = () => { switch (true) { - case userProfile?.type === 'tpo' && asPath === '/profile': // tpo private profile + case userProfile?.type === 'tpo' && asPath === `/${locale}/profile`: // tpo private profile return true; - case userProfile?.type !== 'tpo' && asPath === '/profile': // normal user private profile + case userProfile?.type !== 'tpo' && asPath === `/${locale}/profile`: // normal user private profile return true; - case userProfile?.type === 'tpo' && asPath !== '/profile': // tpo public profile + case userProfile?.type === 'tpo' && asPath !== `/${locale}/profile`: // tpo public profile return false; - case userProfile?.type !== 'tpo' && asPath !== '/profile': // normal user public profile + case userProfile?.type !== 'tpo' && asPath !== `/${locale}/profile`: // normal user public profile return true; default: return null; @@ -85,7 +86,7 @@ const PlantedTreesContributions = ({ > {_checkConditions() && (
- {asPath === '/profile' ? ( + {asPath === `/${locale}/profile` ? (
- {userProfile?.id === verifiedUser?.id && router.asPath === '/profile' && ( -
- -
- -
- -
- )} + {userProfile?.id === verifiedUser?.id && + router.asPath === `/${locale}/profile` && ( +
+ +
+ +
+ +
+ )}
{t('myProfile.userDescription', { From d24c1f5aa1f435cf4743630a780544e65c11f641 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 20 Mar 2024 11:30:43 +0530 Subject: [PATCH 43/70] refactor: removes instances of destructuring of `router` for code readability - also updates logic for `playButtonClasses` to consider pathname as per the updated file structure --- pages/_app.tsx | 6 +++++- .../profile/bulk-codes/[method]/[id].tsx | 11 +++++------ .../profile/bulk-codes/[method]/index.tsx | 5 ++--- .../profile/treemapper/data-explorer.tsx | 8 ++++---- src/features/common/LandingVideo/PlayButton.tsx | 9 +++++++-- .../projects/components/maps/ProjectTabs.tsx | 4 ++-- .../PlantedTreesContributions.tsx | 16 ++++++++++------ .../ImpersonateUser/ImpersonationActivated.tsx | 4 ++-- 8 files changed, 37 insertions(+), 26 deletions(-) diff --git a/pages/_app.tsx b/pages/_app.tsx index 2eff12641b..2b82bb6223 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -179,7 +179,11 @@ const PlanetWeb = ({ const [localShowVideo, setLocalShowVideo] = React.useState(false); React.useEffect(() => { - if (router.pathname === '/' || router.pathname === '/sites/[slug]') { + if ( + router.pathname === '/' || + router.pathname === '/sites/[slug]' || + router.pathname === '/sites/[slug]/[locale]' + ) { if (typeof window !== 'undefined') { if (localStorage.getItem('showVideo')) { if (localStorage.getItem('showVideo') === 'true') { diff --git a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx index c8aa27f057..a8357bd7c9 100644 --- a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx +++ b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/[id].tsx @@ -35,7 +35,6 @@ export default function BulkCodeIssueCodesPage({ pageProps, }: Props): ReactElement { const router = useRouter(); - const { isReady, query } = useRouter(); const t = useTranslations('Me'); const { setTenantConfig } = useTenant(); const { redirect, setErrors } = useContext(ErrorHandlingContext); @@ -47,11 +46,11 @@ export default function BulkCodeIssueCodesPage({ const checkContext = useCallback(async () => { if (planetCashAccount) { if (!project) { - if (isReady) { + if (router.isReady) { try { const paymentOptions = await getRequest( pageProps.tenantConfig.id, - `/app/paymentOptions/${query.id}`, + `/app/paymentOptions/${router.query.id}`, { currency: planetCashAccount.country, } @@ -80,8 +79,8 @@ export default function BulkCodeIssueCodesPage({ } if (!bulkMethod) { - if (isReady) { - const _bulkMethod = query.method; + if (router.isReady) { + const _bulkMethod = router.query.method; if ( _bulkMethod === BulkCodeMethods.GENERIC || _bulkMethod === BulkCodeMethods.IMPORT @@ -93,7 +92,7 @@ export default function BulkCodeIssueCodesPage({ } } } - }, [isReady, planetCashAccount]); + }, [router.isReady, planetCashAccount]); React.useEffect(() => { if (router.isReady) { diff --git a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx index c4e58f3e4d..92dd59cbdb 100644 --- a/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/bulk-codes/[method]/index.tsx @@ -32,7 +32,6 @@ export default function BulkCodeSelectProjectPage({ }: Props): ReactElement { const t = useTranslations('Me'); const router = useRouter(); - const { isReady, query } = useRouter(); const { bulkMethod, setBulkMethod } = useBulkCode(); const { setTenantConfig } = useTenant(); @@ -45,8 +44,8 @@ export default function BulkCodeSelectProjectPage({ // Sets bulk method if not already set within context when page is loaded useEffect(() => { if (!bulkMethod) { - if (isReady) { - const _bulkMethod = query.method; + if (router.isReady) { + const _bulkMethod = router.query.method; if ( _bulkMethod === BulkCodeMethods.GENERIC || _bulkMethod === BulkCodeMethods.IMPORT diff --git a/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx b/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx index 19c44d4650..169dd321c1 100644 --- a/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx +++ b/pages/sites/[slug]/[locale]/profile/treemapper/data-explorer.tsx @@ -29,19 +29,19 @@ function TreeMapperAnalytics({ const t = useTranslations('TreemapperAnalytics'); const { user } = useUserProps(); - const { push, isReady } = useRouter(); + const router = useRouter(); const { setTenantConfig } = useTenant(); React.useEffect(() => { - if (isReady) { + if (router.isReady) { setTenantConfig(tenantConfig); } - }, [isReady]); + }, [router.isReady]); useEffect(() => { if (user) { if (!(process.env.ENABLE_ANALYTICS && user.type === 'tpo')) { - push('/profile'); + router.push('/profile'); } } }, [user]); diff --git a/src/features/common/LandingVideo/PlayButton.tsx b/src/features/common/LandingVideo/PlayButton.tsx index 781931e4a0..6ae698c82b 100644 --- a/src/features/common/LandingVideo/PlayButton.tsx +++ b/src/features/common/LandingVideo/PlayButton.tsx @@ -16,11 +16,16 @@ export default function PlayButton({ const { isImpersonationModeOn } = useUserProps(); const { embed, enableIntro, isContextLoaded } = useContext(ParamsContext); const t = useTranslations('Common'); - const { pathname } = useRouter(); + const router = useRouter(); const playButtonClasses = `${ embed === 'true' ? styles.embed_playButton : styles.playButton - } ${pathname === '/[p]' ? styles['playButton--reduce-right-offset'] : ''}`; + } ${ + router.pathname === '/[p]' || + router.pathname === '/sites/[slug]/[locale]/[p]' + ? styles['playButton--reduce-right-offset'] + : '' + }`; const canShowPlayButton = !(embed === 'true' && enableIntro !== 'true'); diff --git a/src/features/projects/components/maps/ProjectTabs.tsx b/src/features/projects/components/maps/ProjectTabs.tsx index 6a178059c6..0703b6f074 100644 --- a/src/features/projects/components/maps/ProjectTabs.tsx +++ b/src/features/projects/components/maps/ProjectTabs.tsx @@ -10,14 +10,14 @@ import { ParamsContext } from '../../../common/Layout/QueryParamsContext'; export default function ProjectTabs(): ReactElement { const { embed, showProjectDetails } = React.useContext(ParamsContext); - const { pathname } = useRouter(); + const router = useRouter(); const t = useTranslations('Maps'); const { selectedMode, setSelectedMode, rasterData } = useProjectProps(); const containerClasses = embed !== 'true' ? styles.VegetationChangeContainer - : pathname === '/[p]' && showProjectDetails === 'false' + : router.pathname.includes('/[p]') && showProjectDetails === 'false' ? `${styles.embed_VegetationChangeContainer} ${styles['no-project-details']}` : styles.embed_VegetationChangeContainer; diff --git a/src/features/user/Profile/components/MyContributions/microComponents/PlantedTreesContributions.tsx b/src/features/user/Profile/components/MyContributions/microComponents/PlantedTreesContributions.tsx index 28810d5884..3f055f8f45 100644 --- a/src/features/user/Profile/components/MyContributions/microComponents/PlantedTreesContributions.tsx +++ b/src/features/user/Profile/components/MyContributions/microComponents/PlantedTreesContributions.tsx @@ -16,7 +16,7 @@ const PlantedTreesContributions = ({ handleFetchNextPage, hasNextPage, }: TreeContributedProjectListProps): ReactElement => { - const { asPath } = useRouter(); + const router = useRouter(); const t = useTranslations('Profile'); const locale = useLocale(); const [isAddTargetModalOpen, setIsAddTargetModalOpen] = useState(false); @@ -31,13 +31,17 @@ const PlantedTreesContributions = ({ const _checkConditions = () => { switch (true) { - case userProfile?.type === 'tpo' && asPath === `/${locale}/profile`: // tpo private profile + case userProfile?.type === 'tpo' && + router.asPath === `/${locale}/profile`: // tpo private profile return true; - case userProfile?.type !== 'tpo' && asPath === `/${locale}/profile`: // normal user private profile + case userProfile?.type !== 'tpo' && + router.asPath === `/${locale}/profile`: // normal user private profile return true; - case userProfile?.type === 'tpo' && asPath !== `/${locale}/profile`: // tpo public profile + case userProfile?.type === 'tpo' && + router.asPath !== `/${locale}/profile`: // tpo public profile return false; - case userProfile?.type !== 'tpo' && asPath !== `/${locale}/profile`: // normal user public profile + case userProfile?.type !== 'tpo' && + router.asPath !== `/${locale}/profile`: // normal user public profile return true; default: return null; @@ -86,7 +90,7 @@ const PlantedTreesContributions = ({ > {_checkConditions() && (
- {asPath === `/${locale}/profile` ? ( + {router.asPath === `/${locale}/profile` ? (
- ) : router.pathname === '/complete-signup' || - (user && router.pathname === `/t/${user.slug}`) ? ( + ) : router.pathname.includes('/complete-signup') || + (user && router.pathname.includes(`/profile`)) ? ( ) : ( @@ -165,7 +163,7 @@ export default function NavbarComponent() {

{ const t = useTranslations('Me'); - // const { asPath } = useRouter(); + const locale = useLocale(); const router = useRouter(); const { user, logoutUser, contextLoaded, isImpersonationModeOn } = useUserProps(); @@ -425,7 +425,7 @@ const UserLayout: FC = ({ children }) => { if (router) { for (const link of navLinks) { //checks whether the path belongs to menu or Submenu - if (router.asPath === link.path) { + if (link.path && router.asPath === `/${locale}${link.path}`) { setactiveLink(link.path); } else if (link.subMenu && link.subMenu.length > 0) { const subMenuItem = link.subMenu.find( diff --git a/src/features/projects/components/maps/Explore.tsx b/src/features/projects/components/maps/Explore.tsx index 2ef190da1c..f9ec25bafd 100644 --- a/src/features/projects/components/maps/Explore.tsx +++ b/src/features/projects/components/maps/Explore.tsx @@ -179,7 +179,7 @@ export default function Explore(): ReactElement { }`, undefined, { - shallow: true, + shallow: true, //As Explore is only shown on the index route, we don't want to reload the page } ); } diff --git a/src/features/projects/components/maps/SitesDropdown.tsx b/src/features/projects/components/maps/SitesDropdown.tsx index 42538c94c6..2290b727a8 100644 --- a/src/features/projects/components/maps/SitesDropdown.tsx +++ b/src/features/projects/components/maps/SitesDropdown.tsx @@ -44,7 +44,7 @@ export default function SitesDropdown(): ReactElement { const dropdownContainerClasses = `${ embed === 'true' ? styles.embed_dropdownContainer : styles.dropdownContainer } ${ - router.pathname === '/[p]' + router.pathname.includes('/[p]') ? styles['dropdownContainer--reduce-right-offset'] : '' }`; @@ -54,7 +54,7 @@ export default function SitesDropdown(): ReactElement { ? styles.embed_projectSitesButton : styles.projectSitesButton } ${ - router.pathname === '/[p]' + router.pathname.includes('/[p]') ? styles['projectSitesButton--reduce-right-offset'] : '' }`; diff --git a/src/features/user/CompleteSignup/index.tsx b/src/features/user/CompleteSignup/index.tsx index 35b97fd3e8..869d2135f2 100644 --- a/src/features/user/CompleteSignup/index.tsx +++ b/src/features/user/CompleteSignup/index.tsx @@ -129,11 +129,11 @@ export default function CompleteSignup(): ReactElement | null { if (token) { if (user && user.slug) { if (typeof window !== 'undefined') { - router.push(`/t/${user.slug}`); + router.push('/profile'); } } } else { - router.push('/', undefined, { shallow: true }); + router.push('/'); } } if (contextLoaded) { From ed7dbfa3d714356e4ba781ed47751acecb87b3de Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Thu, 21 Mar 2024 16:51:31 +0530 Subject: [PATCH 51/70] refactor: minor cleanup - removing unused vars - and encoding user dependent URLs / checking for safety --- pages/sites/[slug]/[locale]/index.tsx | 5 +++-- pages/sites/[slug]/[locale]/profile/redeem/[code].tsx | 2 +- pages/sites/[slug]/[locale]/t/[id].tsx | 7 ++++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/pages/sites/[slug]/[locale]/index.tsx b/pages/sites/[slug]/[locale]/index.tsx index 6faa9850dc..9f955f49b6 100644 --- a/pages/sites/[slug]/[locale]/index.tsx +++ b/pages/sites/[slug]/[locale]/index.tsx @@ -88,8 +88,9 @@ export default function Donate({ // Deprecation Notice: This route will be removed in next major version React.useEffect(() => { - if (router.query.p) { - router.push(`/${router.query.p}`); + if (typeof router.query.p === 'string') { + const safePath = encodeURIComponent(router.query.p); + router.push(encodeURI(`/${safePath}`)); } }, [router]); diff --git a/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx b/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx index b6350be2a3..ff65380b3a 100644 --- a/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx +++ b/pages/sites/[slug]/[locale]/profile/redeem/[code].tsx @@ -1,5 +1,5 @@ import { useRouter } from 'next/router'; -import { useState, useEffect, useContext, FC } from 'react'; +import { useState, useEffect, useContext } from 'react'; import LandingSection from '../../../../../../src/features/common/Layout/LandingSection'; import { AbstractIntlMessages, useTranslations } from 'next-intl'; import { useUserProps } from '../../../../../../src/features/common/Layout/UserPropsContext'; diff --git a/pages/sites/[slug]/[locale]/t/[id].tsx b/pages/sites/[slug]/[locale]/t/[id].tsx index f2747033c6..eef2d2abea 100644 --- a/pages/sites/[slug]/[locale]/t/[id].tsx +++ b/pages/sites/[slug]/[locale]/t/[id].tsx @@ -27,15 +27,16 @@ import { defaultTenant } from '../../../../../tenant.config'; import { useTenant } from '../../../../../src/features/common/Layout/TenantContext'; import myProfileStyle from '../../../../../src/features/user/Profile/styles/MyProfile.module.scss'; import getMessagesForPage from '../../../../../src/utils/language/getMessagesForPage'; -import { AbstractIntlMessages } from 'next-intl'; +import { AbstractIntlMessages, useLocale } from 'next-intl'; interface Props { pageProps: PageProps; } function PublicProfile({ pageProps: { tenantConfig } }: Props): ReactElement { // External imports + const locale = useLocale(); const router = useRouter(); - const { user, contextLoaded, token } = useUserProps(); + const { user, contextLoaded } = useUserProps(); const { redirect, setErrors } = React.useContext(ErrorHandlingContext); const { setTenantConfig } = useTenant(); @@ -68,7 +69,7 @@ function PublicProfile({ pageProps: { tenantConfig } }: Props): ReactElement { setProfile(null); // Check if the user is authenticated and trying to access their own profile if (user && user.slug === router.query.id) { - router.replace(`/${router.query.locale}/profile`); + router.replace(encodeURI(`/${locale}/profile`)); } // If user is not access their own profile, load the public profile else { From 7e61e416a272cc109b51d08a37cee097df39e3d8 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Fri, 22 Mar 2024 10:18:41 +0530 Subject: [PATCH 52/70] fix: updates pluralized translation strings to include number --- public/static/locales/en/common.json | 2 +- public/static/locales/en/profile.json | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/public/static/locales/en/common.json b/public/static/locales/en/common.json index 8981bacfa9..ba2522324e 100644 --- a/public/static/locales/en/common.json +++ b/public/static/locales/en/common.json @@ -1,6 +1,6 @@ { "Common": { - "tree": "{count, plural, =0 {Trees} =1 {Tree} other {Trees}}", + "tree": "{count, plural, =1 {Tree} other {Trees}}", "m2": "m²", "by": "By {tpoName}", "to_project_by_tpo": "To {projectName} by {tpoName}", diff --git a/public/static/locales/en/profile.json b/public/static/locales/en/profile.json index 669480dc93..d2fac399d6 100644 --- a/public/static/locales/en/profile.json +++ b/public/static/locales/en/profile.json @@ -14,7 +14,7 @@ "link": "Link" }, "myForestMap": { - "plantedTree": "{count, plural, =0 {Trees} =1 {Tree} other {Trees}}", + "plantedTree": "{count, plural, =1 {# Tree} other {# Trees}}", "treesPlanted": "Trees Planted", "restored": "Restored", "registered": "Registered", @@ -24,8 +24,8 @@ "donations": "Donations", "area": "{areaConserved} m²", "zoomIn": "zoom in for more details", - "totalDonation": "{count, plural, =0 {donations} =1 {donation} other {donations}} ", - "totalProject": "to {count, plural, =0 {projects} =1 {project} other {projects}}", + "totalDonation": "{count, plural, =1 {# donation} other {# donations}} ", + "totalProject": "to {count, plural, =1 {# project} other {# projects}}", "tpoName": "By {tpo}" }, "myTreeCounter": { @@ -34,7 +34,7 @@ }, "myContributions": { "treesPlantedAndAreaRestored": "Trees Planted & Areas Restored", - "treeRegistered": "{count, plural, =0 {Trees Registered} =1 {Tree Registered} other {Trees Registered}}", + "treeRegistered": "{count, plural, =1 {# Tree Registered} other {# Trees Registered}}", "receivedFrom": "Received from {name}", "loadMoreContribution": "Load More Contribution", "loadingContribution": "Loading Contribution....", From dcd62547e87c315c5c9ec542cb65b6fb94aac77c Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Fri, 22 Mar 2024 10:20:45 +0530 Subject: [PATCH 53/70] fix: resolves missing translation import warnings --- pages/sites/[slug]/[locale]/profile/index.tsx | 2 +- src/features/projects/components/maps/MapHolder.tsx | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/pages/sites/[slug]/[locale]/profile/index.tsx b/pages/sites/[slug]/[locale]/profile/index.tsx index 15114d880a..54d60ead42 100644 --- a/pages/sites/[slug]/[locale]/profile/index.tsx +++ b/pages/sites/[slug]/[locale]/profile/index.tsx @@ -105,7 +105,7 @@ export const getStaticProps: GetStaticProps = async ( const messages = await getMessagesForPage({ locale: context.params?.locale as string, - filenames: ['common', 'me', 'profile', 'country', 'donate'], + filenames: ['common', 'me', 'profile', 'country', 'donate', 'redeem'], }); return { diff --git a/src/features/projects/components/maps/MapHolder.tsx b/src/features/projects/components/maps/MapHolder.tsx index d7e096fd2b..b407b48bd2 100644 --- a/src/features/projects/components/maps/MapHolder.tsx +++ b/src/features/projects/components/maps/MapHolder.tsx @@ -3,6 +3,7 @@ import PlayButton from '../../../common/LandingVideo/PlayButton'; import { useProjectProps } from '../../../common/Layout/ProjectPropsContext'; import { SetState } from '../../../common/types/common'; import MapLayout from '../ProjectsMap'; +import { useRouter } from 'next/router'; interface Props { setshowVideo: SetState; @@ -11,10 +12,20 @@ interface Props { const MapHolder = ({ setshowVideo }: Props) => { const { project, projects } = useProjectProps(); const { tenantConfig } = useTenant(); + const router = useRouter(); + + const showMapLayout = + router.pathname === '/' || + router.pathname === '/[p]' || + router.pathname === '/[p]/[id]' || + router.pathname === '/sites/[slug]/[locale]' || + router.pathname === '/sites/[slug]/[locale]/[p]' || + (router.pathname === '/sites/[slug]/[locale]/[p]/[id]' && + (project !== null || projects !== null)); return ( <> - {project !== null || projects !== null ? : null} + {showMapLayout ? : null}

Date: Fri, 22 Mar 2024 12:39:46 +0530 Subject: [PATCH 54/70] refactor: delete unused translations --- public/static/locales/en/donate.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/public/static/locales/en/donate.json b/public/static/locales/en/donate.json index a93b82128a..5eda0b5380 100644 --- a/public/static/locales/en/donate.json +++ b/public/static/locales/en/donate.json @@ -68,7 +68,6 @@ "thisDonationSupports": "This donation supports", "plantTreesWith": "Plant trees with", "textToShare": "Join {name} and thousand of others to plant a trillion trees to tackle the climate crisis #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "thankyouHeaderText": "We're on the road to a \n

Trillion Trees

", "shareTextTitle": "Stop Talking. Start Plant", "textToShareLinkedin": "Join {name} and thousand of others to plant a trillion trees to tackle the climate crisis", "textToShareForMe": "Join me and thousand of others to plant a trillion trees to tackle the climate crisis", @@ -86,7 +85,6 @@ "payWithGiroPay": "Donate with GiroPay", "payWithSofort": "Donate with SOFORT", "donationFailed": "Donation Failed", - "donationFailedMessage": "Something went wrong while completing your payment. If you continue having issues please reach out to us at support@plant-for-the-planet.org", "donationPending": "Completing your donation", "donationPendingMessage": "We are currently waiting for the confirmation from your bank. This might take some time so, please feel free to close this page. We’ll send your receipt via email shortly.", "sepaMessage": "By providing your IBAN and confirming this payment, you authorize Plant-for-the-Planet and Stripe, our payment service provider, to send instructions to your bank to debit your account. You are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. If you have any issues regarding your donation, please send us an email to support@plant-for-the-planet.org", From db0fe8a52332038a4e1fa722c8f1135a793d4368 Mon Sep 17 00:00:00 2001 From: "lingohub[bot]" <69908207+lingohub[bot]@users.noreply.github.com> Date: Fri, 22 Mar 2024 08:09:17 +0000 Subject: [PATCH 55/70] =?UTF-8?q?=F0=9F=8C=90=20Language=20update=20from?= =?UTF-8?q?=20LingoHub=20=F0=9F=A4=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Project Name: Planet Webapp (next-intl) Project Link: https://app.lingohub.com/project/pr_162Pt5opccq5-23262/branches/prb_19TNAuGFWCoT-10998 User: Mohit Bajaj Easy language translations with LingoHub 🚀 --- public/static/locales/cs/bulkCodes.json | 29 ++- public/static/locales/cs/common.json | 11 +- public/static/locales/cs/donate.json | 27 ++- public/static/locales/cs/editProfile.json | 25 ++- public/static/locales/cs/managePayouts.json | 1 + public/static/locales/cs/manageProjects.json | 59 ++++- public/static/locales/cs/maps.json | 3 +- public/static/locales/cs/me.json | 22 +- public/static/locales/cs/profile.json | 42 +++- public/static/locales/cs/redeem.json | 3 + public/static/locales/cs/treemapper.json | 11 +- public/static/locales/de/bulkCodes.json | 1 + public/static/locales/de/common.json | 2 +- public/static/locales/de/donate.json | 2 - public/static/locales/de/manageProjects.json | 35 +++ public/static/locales/de/profile.json | 8 +- public/static/locales/en/donate.json | 2 +- public/static/locales/en/manageProjects.json | 2 +- public/static/locales/en/me.json | 2 +- public/static/locales/es/bulkCodes.json | 118 +++++++++- public/static/locales/es/common.json | 57 ++++- public/static/locales/es/country.json | 5 +- public/static/locales/es/donate.json | 32 +-- public/static/locales/es/donationLink.json | 26 ++- public/static/locales/es/editProfile.json | 27 ++- public/static/locales/es/giftfunds.json | 10 +- public/static/locales/es/managePayouts.json | 77 ++++++- public/static/locales/es/manageProjects.json | 129 ++++++++++- public/static/locales/es/maps.json | 8 +- public/static/locales/es/me.json | 196 ++++++++++++++++- public/static/locales/es/planetcash.json | 27 ++- public/static/locales/es/profile.json | 42 +++- public/static/locales/es/redeem.json | 12 +- public/static/locales/es/tenants.json | 4 + public/static/locales/es/treemapper.json | 78 ++++++- .../locales/es/treemapperAnalytics.json | 60 ++++- public/static/locales/fr/bulkCodes.json | 118 +++++++++- public/static/locales/fr/common.json | 57 ++++- public/static/locales/fr/country.json | 3 +- public/static/locales/fr/donate.json | 6 +- public/static/locales/fr/donationLink.json | 26 ++- public/static/locales/fr/editProfile.json | 27 ++- public/static/locales/fr/giftfunds.json | 10 +- public/static/locales/fr/managePayouts.json | 77 ++++++- public/static/locales/fr/manageProjects.json | 136 +++++++++++- public/static/locales/fr/maps.json | 7 +- public/static/locales/fr/me.json | 141 +++++++++++- public/static/locales/fr/planetcash.json | 35 ++- public/static/locales/fr/profile.json | 42 +++- public/static/locales/fr/redeem.json | 10 +- public/static/locales/fr/tenants.json | 6 +- public/static/locales/fr/treemapper.json | 53 ++++- .../locales/fr/treemapperAnalytics.json | 60 ++++- public/static/locales/it/bulkCodes.json | 118 +++++++++- public/static/locales/it/common.json | 68 +++++- public/static/locales/it/country.json | 3 +- public/static/locales/it/donate.json | 20 +- public/static/locales/it/donationLink.json | 26 ++- public/static/locales/it/editProfile.json | 27 ++- public/static/locales/it/giftfunds.json | 10 +- public/static/locales/it/managePayouts.json | 77 ++++++- public/static/locales/it/manageProjects.json | 139 +++++++++++- public/static/locales/it/maps.json | 8 +- public/static/locales/it/me.json | 208 +++++++++++++++++- public/static/locales/it/planetcash.json | 35 ++- public/static/locales/it/profile.json | 42 +++- public/static/locales/it/redeem.json | 12 +- public/static/locales/it/tenants.json | 4 + public/static/locales/it/treemapper.json | 78 ++++++- .../locales/it/treemapperAnalytics.json | 60 ++++- public/static/locales/pt-BR/bulkCodes.json | 117 +++++++++- public/static/locales/pt-BR/common.json | 48 +++- public/static/locales/pt-BR/country.json | 3 +- public/static/locales/pt-BR/donate.json | 17 +- public/static/locales/pt-BR/donationLink.json | 26 ++- public/static/locales/pt-BR/editProfile.json | 25 ++- public/static/locales/pt-BR/giftfunds.json | 10 +- .../static/locales/pt-BR/managePayouts.json | 77 ++++++- .../static/locales/pt-BR/manageProjects.json | 116 +++++++--- public/static/locales/pt-BR/maps.json | 7 +- public/static/locales/pt-BR/me.json | 62 +++++- public/static/locales/pt-BR/planetcash.json | 35 ++- public/static/locales/pt-BR/profile.json | 42 +++- public/static/locales/pt-BR/redeem.json | 12 +- public/static/locales/pt-BR/tenants.json | 2 +- public/static/locales/pt-BR/treemapper.json | 15 +- .../locales/pt-BR/treemapperAnalytics.json | 60 ++++- 87 files changed, 3440 insertions(+), 178 deletions(-) diff --git a/public/static/locales/cs/bulkCodes.json b/public/static/locales/cs/bulkCodes.json index 3578f19422..e29a11ae74 100644 --- a/public/static/locales/cs/bulkCodes.json +++ b/public/static/locales/cs/bulkCodes.json @@ -39,6 +39,7 @@ "unitsPerCode": "Jednotky za kód*", "totalNumberOfCodes": "Celkový počet kódů*", "occasion": "Příležitost", + "notificationLanguage": "Jazyk oznámení", "total": "Celkem", "chargeConsentText": "Kliknutím na Kódy vydání, souhlasíte s tím, že výše uvedená částka bude naúčtována na váš účet.", "invalidEmailWarningText": "Ujistěte se, že příjemce_email je platný e-mail. Používání fiktivních nebo neplatných e-mailů povede k pozastavení účtu v souladu s podmínkami Platformy.", @@ -75,16 +76,42 @@ "invalidEmails": "recipient_email obsahuje figuríny/neplatné e-maily v následujících řádcích: {rowList}. Odstraňte prosím neplatné e-maily nebo přidejte platné e-maily.", "generalError": "Něco se pokazilo. Zkuste to prosím o chvíli." }, + "errorAddRecipient": { + "unitsNotProvided": "Povinné", + "requiredForNotifications": "Povinné (pro příjemce e-mailu)", + "emailInvalid": "Neplatný e-mail" + }, "successUploadCSV": { "ignoredColumns": "Další sloupce byly ignorovány" }, "importInstructions": "Přečtěte si dokumentaci zde, stáhněte si šablonu aplikace Excel zde, a šablonu CSV zde.", + "tableHeaders": { + "recipient_name": "Jméno příjemce", + "recipient_email": "E-mail příjemce", + "recipient_notify": "Odeslat e-mail?", + "units": "Jednotky", + "recipient_message": "Zpráva" + }, + "tableHeaderHelpText": { + "recipient_name": "Volitelně. Jméno příjemce, které se zobrazí na certifikátu a v případě volby i v poště zaslané příjemci. Povinné, pokud chcete odesílat e-maily.", + "recipient_email": "Volitelně. Povinné pro zaslání certifikátu příjemci e-mailem.", + "recipient_notify": "Volitelně. Pokud chcete, aby Plant-for-the-Planet automaticky informoval příjemce e-mailem, vyberte možnost Ano.", + "units": "Povinné. Počet stromů, které jsou předány příjemci, např. 5 za 5 stromů", + "recipient_message": "Volitelně. Zpráva pro příjemce, která je zahrnuta do e-mailu, pokud je možnost notify yes. Pokud není uvedena, bude odeslána výchozí zpráva." + }, "donationSuccess": "Váš dar byl úspěšný. Přesměrování na zobrazení podrobností o darování brzy...", "donationError": { "planet_cash_insufficient_credit": "Dostupný kredit = {availableBalance}. Chcete-li provést tento dar, nahrajte zůstatek na svém účtu PlanetCash.", "default": "Něco se pokazilo. Zkuste to prosím po chvíli.", "planet_cash_payment_failure": "Transakce selhala. {reason}", "planet_cash_invalid_project": "Nelze darovat vybranému projektu." - } + }, + "titleAddRecipientButton": "Přidání příjemce do tabulky", + "notifyRecipientOptions": { + "yes": "Ano", + "no": "Ne" + }, + "fileUploadWarning": "Tím se odstraní stávající údaje o příjemci, chcete pokračovat?", + "unsavedDataWarning": "Některá data příjemce nejsou uložena. Chcete pokračovat? Neuložená data budou ztracena" } } diff --git a/public/static/locales/cs/common.json b/public/static/locales/cs/common.json index 4a5f2a2dd4..a5c8dc23e1 100644 --- a/public/static/locales/cs/common.json +++ b/public/static/locales/cs/common.json @@ -1,6 +1,7 @@ { "Common": { "tree": "{count, plural, =0 {stromů} =1 {strom} other {stromů}}", + "m2": "m²", "by": "Od {tpoName}", "to_project_by_tpo": "Pro {projectName} od {tpoName}", "for": "pro", @@ -94,6 +95,7 @@ "deleteCondition": "Před pokračováním se ujistěte, že jste zrušili všechny odběry.", "showSubscriptions": "Zobrazit mé odběry", "notFound": "Požadovaná stránka nebyla nalezena.", + "tooManyRequest": "Příliš mnoho požadavků. Počkejte prosím a zkuste to později nebo se obraťte na správce systému.", "unauthorized": "Něco se pokazilo. Zkuste se odhlásit a znovu přihlásit.", "validationError": "Chyba ověření", "internalServerError": "Interní chyba serveru - zkuste to prosím později!", @@ -120,10 +122,15 @@ "active_account_exists": "Aktivní účet PlanetCash již existuje", "duplicate_account": "Účet již existuje", "token_expired": "Platnost tokenu vypršela. Přihlaste se znovu.", + "project_not_available": "Podrobnosti o projektu nejsou v současné době k dispozici", "topProject": "Top projekt", "viewReport": "Zobrazit zprávu", - "reviewInfo": " Projekt byl zkontrolován v rámci vícedenního terénního přezkumu v <2>měsíci a splňuje naše <5>standardy.", + "reviewInfo": " Projekt byl zkontrolován v rámci vícedenního terénního přezkumu v {reviewMonth} a splňuje naše standardy.", "standardsLink": "https://www.plant-for-the-planet.org/standards/", - "project": "Projekt" + "project": "Projekt", + "top_project_standards_fulfilled": "Kontrola projektu ukázala, že tento projekt splňuje nejméně 12 z 19 standardů Top projektu .", + "disabledDonateButtonText": "Projekt v současné době nepřijímá dary. Důvodem může být to, že je plně financován, že ještě nebyl přezkoumán nebo že v současné době nesplňuje všechny naše projektové standardy, nebo že se rozhodl používat platformu výhradně pro své nástroje transparentnosti.", + "notDonatable": "Nelze darovat", + "salesforceDisabledDonateButtonText": "Projekt v současné době nepřijímá dary." } } diff --git a/public/static/locales/cs/donate.json b/public/static/locales/cs/donate.json index 254ca9e28b..07f3403a3a 100644 --- a/public/static/locales/cs/donate.json +++ b/public/static/locales/cs/donate.json @@ -1,7 +1,14 @@ { "Donate": { + "fortreeCountTrees": "pro {treeCount} Stromů", + "fortreeCountTrees_plural": "pro {treeCount} Stromy", + "yourTreesPlantedByOnLocation": "Váš strom {treeCount} bude vysazen na stránkách {projectName} na adrese {location}.", + "yourTreesPlantedByOnLocation_plural": "Vaše stromy {treeCount} budou vysazeny na {projectName} na {location}.", + "myTreesPlantedByOnLocation": "Můj {treeCount} strom je zasazen na {location}.", + "myTreesPlantedByOnLocation_plural": "Moje {treeCount} stromy jsou vysazeny na {location}.", + "projects": "Projekty", "topProjects": "Nejlepší projekty", - "allCountProjects": "Všech [{projectCount}] projektů", + "allCountProjects": "Všech {projectCount} projektů", "searchProjects": "Prohledat projekty ...", "viewProfile": "Prohlédnout profil", "contactDetails": "Kontaktní údaje", @@ -61,8 +68,7 @@ "thisDonationSupports": "Tento dar podporuje", "plantTreesWith": "Zasaďte stromy s", "textToShare": "Připojte se k {name} a tisícům dalších, abyste zasadili bilion stromů a řešili tak klimatickou krizi #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "thankyouHeaderText": "Jsme na cestě k \n

Trillion Trees

", - "shareTextTitle": "Stop Talking. Start Plant", + "shareTextTitle": "Stop Talking. Start Planting.", "textToShareLinkedin": "Přidejte se k {name} a tisícům dalších, aby jsme zasadili bilion stromů, aby jsme se vypořádali s klimatickou krizí", "textToShareForMe": "Připojte se ke mně a tisícům dalších ak cíli zasazení bilionu stromů, abychom se vypořádali s klimatickou krizí", "donationTokenInvalid": "Zadaný darovací token je neplatný.", @@ -79,7 +85,6 @@ "payWithGiroPay": "Darujte pomocí GiroPay", "payWithSofort": "Darujte pomocí SOFORT", "donationFailed": "Darování selhalo", - "donationFailedMessage": "Při dokončování platby se něco pokazilo. Pokud budete mít i nadále problémy, kontaktujte nás prosím na adrese support@plant-for-the-planet.org", "donationPending": "Dokončení darování", "donationPendingMessage": "V současné době čekáme na potvrzení od vaší banky. To může nějakou dobu trvat, proto tuto stránku neváhejte zavřít. Potvrzení vám brzy zašleme e-mailem.", "sepaMessage": "Zadáním svého IBAN a potvrzením této platby opravňujete Plant-for-the-Planet a Stripe, našeho poskytovatele platebních služeb, k zaslání pokynů vaší bance k odepsání částky z vašeho účtu. Máte nárok na vrácení peněz od vaší banky podle podmínek smlouvy s vaší bankou. Pokud máte jakékoli problémy týkající se vašeho daru, pošlete nám prosím e-mail na adresu support@plant-for-the-planet.org", @@ -92,13 +97,13 @@ "orgNamePublished": "Název společnosti je viditelný na našem žebříčku a v aplikaci.", "aboutProject": "O projektu", "acceptingDonations": "Přijímání darů", - "natural-regeneration": "Přirozená regenerace", - "managed-regeneration": "Řízená regenerace", - "large-scale-planting": "Velkoplošná obnova krajiny", - "agroforestry": "Agrolesnictví", - "urban-planting": "Obnova ve městech", - "other-planting": "Obnova", - "mangroves": "Mangrovy", + "natural-regeneration": "Natural Regeneration", + "managed-regeneration": "Managed Regeneration", + "large-scale-planting": "Large Scale Restoration", + "agroforestry": "Agroforestry", + "urban-planting": "Urban Restoration", + "other-planting": "Restoration", + "mangroves": "Mangroves", "purpose": "Účel", "projectPurpose": "Účel projektu", "type": "Typ", diff --git a/public/static/locales/cs/editProfile.json b/public/static/locales/cs/editProfile.json index 2275f80ea5..907f1175cd 100644 --- a/public/static/locales/cs/editProfile.json +++ b/public/static/locales/cs/editProfile.json @@ -26,14 +26,37 @@ "termAndConditionError": "Přijměte prosím Smluvní podmínky", "fieldLabels": { "profileType": "Já jsem", + "firstName": "Jméno", + "lastName": "Příjmení", "name": "Název {type}", + "email": "E-mail", + "address": "Adresa", + "city": "Město", + "zipCode": "Poštovní/poštovní směrovací číslo", + "country": "Země", + "bio": "Popis profilu", "website": "Webstránka", "privateAccount": "Soukromý účet", "subscribe": "Přihlášení k odběru novinek e-mailem" }, "validationErrors": { + "maxChars": "Mělo by mít maximálně {max} znaků", + "firstNameRequired": "Pole Křestní jméno je povinné", + "firstNameInvalid": "Křestní jméno je neplatné. Nesmí začínat speciálním znakem a povoleny jsou pouze tyto speciální znaky: mezera ' . -", + "lastNameRequired": "Pole Příjmení je povinné", + "lastNameInvalid": "Příjmení je neplatné. Nesmí začínat speciálním znakem a povoleny jsou pouze tyto speciální znaky: mezera ' -", + "emailRequired": "Je vyžadován e-mail", "nameRequired": "Zadejte prosím jméno", - "websiteInvalid": "Zadejte prosím platnou adresu URL" + "nameInvalid": "Název je neplatný. Povoleny jsou pouze tyto speciální znaky: mezera . , ' & ( ) ! -", + "addressRequired": "Je vyžadována adresa", + "addressInvalid": "Adresa je neplatná. Povoleny jsou pouze tyto speciální znaky: mezera . , # - /", + "cityRequired": "Město je povinno", + "cityInvalid": "Město je neplatné. Povolena jsou pouze písmena a tyto speciální znaky: mezera . , ( ) -", + "zipCodeRequired": "Vyžaduje se poštovní směrovací číslo", + "zipCodeInvalid": "PSČ je neplatné", + "websiteInvalid": "Zadejte prosím platnou adresu URL", + "countryRequired": "Země je vyžadována", + "companyRequired": "Vyžaduje se název společnosti" } } } diff --git a/public/static/locales/cs/managePayouts.json b/public/static/locales/cs/managePayouts.json index e79cb465c0..ec6eca87ec 100644 --- a/public/static/locales/cs/managePayouts.json +++ b/public/static/locales/cs/managePayouts.json @@ -23,6 +23,7 @@ "payoutMinAmount": "Minimální částka výplaty", "bankName": "Název banky", "bankAddress": "Adresa banky", + "bankCountry": "Banka Země", "holderName": "Jméno majitele účtu", "holderAddress": "Adresa majitele účtu", "remarks": "Další podrobnosti", diff --git a/public/static/locales/cs/manageProjects.json b/public/static/locales/cs/manageProjects.json index 12021f9926..2eb9140f9f 100644 --- a/public/static/locales/cs/manageProjects.json +++ b/public/static/locales/cs/manageProjects.json @@ -25,6 +25,8 @@ "receiveDonations": "Přijímání darů", "receiveDonationsInfo": "Po dokončení profilu projektu jej aktivujte. Společnost Plant-for-the-Planet poté profil zkontroluje a bude vás informovat, zda jste způsobilí k získání daru prostřednictvím této platformy. To může trvat několik týdnů.", "unitCost": "Náklady na jeden strom (v EUR)", + "unitCostRequired": "Zadejte prosím náklady na jednotku", + "invalidUnitCost": "Náklady na jednotku by měly být vyšší než 0 EUR a nižší než 100 EUR", "exit": "Konec na Projekty", "projectLocation": "Lokace projektu", "visitorAssistanceLabel": "V případě vyslání recenzenta organizací Plant-for-the-Planet zajistím ubytování, přístup na místo a místní dopravu.", @@ -35,6 +37,7 @@ "youtubeURLValidation": "Neplatný odkaz na Youtube video", "addCaption": "Přidat titulek", "yearOfAbandonment": "Přibližný rok opuštění", + "labelRestorationStarted": "Zahájení restaurování", "plantingDensity": "Hustota výsadby", "maxPlantingDensity": "Maximální hustota výsadby (volitelné)", "employeeCount": "Počet zaměstnanců", @@ -67,6 +70,28 @@ "yearAbandonedInfo": "Kdy došlo k poslednímu významnému zásahu člověka do lokality? Včetně těžby dřeva, zemědělství, pastvy dobytka, vypalování způsobené člověkem.", "treePerHa": "Stromy na hektar", "employeesCountInfo": "Ekvivalent 40hodinového pracovního týdne. Tj. dva zaměstnanci na poloviční úvazek se počítají jako jeden.", + "labelRestorationSeasons": "Roční období obnovy", + "labelMainInterventions": "Hlavní intervence", + "interventionTypes": { + "assisting-seed-rain": "Assisting Seed Rain", + "control-remove-livestock": "Control/Remove Livestock", + "cut-suppressing-grass": "Cut/Suppressing Grass", + "direct-seeding": "Direct Seeding", + "enrichment-planting": "Enrichment Planting", + "establish-firebreaks": "Establish Firebreaks", + "fire-patrols": "Fire Patrols", + "fire-suppression-team": "Fire Suppression Team", + "liberating-regenerants": "Liberating Regenerants", + "maintenance": "Maintenance", + "marking-regenerants": "Marking Regenerants", + "other-interventions": "Other Interventions", + "planting-trees": "Planting Trees", + "removal-contaminated-soil": "Removal of Contaminated Soil", + "removal-invasive-species": "Removal of Invasive Species", + "soil-improvement": "Soil Improvement", + "stop-tree-harvesting": "Stop Tree Harvesting" + }, + "missingInterventionsError": "Vyberte prosím alespoň jednu intervenci", "timePeriod": "Časový úsek", "max300Chars": "Povoleno maximálně 300 znaků", "longTermPlanInfo": "Jaká opatření jsou zavedena, aby se les dlouhodobě prosperoval? Jak je to financováno? Jaké zdroje budou z webu získány?", @@ -137,6 +162,7 @@ "addConservationProjects": "Přidat projekty ochrany", "areaProtected": "Chráněná oblast (v ha)", "areaProtectedInfo": "Chcete-li zadat desetinná místa, oddělte je pomocí „.“", + "ecosystem": "Ekosystém", "protectionStartedIn": "Ochrana byla spuštěna v", "actions": "Akce", "activitySeasons": "Aktivní sezóny", @@ -164,12 +190,36 @@ "borealForests": "Boreální lesy", "tundra": "Tundra", "temperateConiferousForests": "Mírné jehličnaté lesy", + "ecosystemTypes": { + "tropical-moist-forests": "Tropical Moist Forests", + "tropical-dry-forests": "Tropical Moist Forests", + "tropical-coniferous-forests": "Tropical Coniferous Forests", + "tropical-grasslands-forests": "Tropical Grasslands Forests", + "temperate-broadleaf-forests": "Temperate Broadleaf Forests", + "temperate-coniferous-forests": "Temperate Coniferous Forests", + "temperate-grasslands-forests": "Temperate Grassland Forests", + "mediterranean-forests": "Mediterranean Forests", + "mangroves": "Mangroves", + "deserts": "Deserts", + "flooded-grasslands": "Flooded Grasslands", + "montane-grasslands": "Montane Grasslands", + "boreal-forests": "Boreal Forests", + "tundra": "Tundra" + }, + "unitTypeRequired": "Vyberte typ jednotky", + "unitType": "Typ jednotky", + "unitTypes": { + "tree": "strom", + "m2": "m²" + }, "tenure": "Držení", "rent": "Nájemné", "ownershipType": "Typ vlastnictví", "landOwnershipType": "Typ vlastnictví půdy", "restorationProject": "Projekt obnovy", "addProjetDescription": "Od předvedení své práce na platformě Plant-for-the-planet vás dělí jen pár kroků. Důležité: Vytvářejte projekty pouze v angličtině", + "englishOnly": " Projekty vytvářejte pouze v angličtině.", + "important": "Důležité:", "addProjetContact": "Pokud potřebujete pomoc, kontaktujte nás na adrese ", "supportLink": "support@plant-for-the-planet.org", "wrongCoordinates": "Špatné souřadnice", @@ -186,6 +236,13 @@ "Since": "Od", "and": "a", "errorForMaxPlantingDensity": "Tato hodnota by měla být větší než hustota výsadby", - "managePayoutsButton": "Správa plateb" + "managePayoutsButton": "Správa plateb", + "siteNameValidation": "Zadejte prosím název webu", + "reviewNote": "Důležitá poznámka: Společnost Plant-for-the-Planet vaše údaje zkontroluje a ověří. Aby bylo možné pokračovat v přijímacím a ověřovacím procesu a schválit váš projekt pro dárcovství, je třeba předložit několik Dokumentů:", + "legalAccreditation": "Právní akreditace (osvědčení o registraci/registrační číslo) prokazující charitativní/neziskový status vaší organizace - ne starší než 2 roky!", + "taxExemption": "Dokumentace o osvobození od daně (pokud je ve vaší zemi platná)", + "annualReport": "Poslední výroční zpráva", + "financialReport": "Poslední auditovaná finanční zpráva", + "PlantingReport": "Zpráva o průběhu projektu" } } diff --git a/public/static/locales/cs/maps.json b/public/static/locales/cs/maps.json index f31069143a..1c12fc1d93 100644 --- a/public/static/locales/cs/maps.json +++ b/public/static/locales/cs/maps.json @@ -46,6 +46,7 @@ "showProjectList": "Zobrazit seznam projektů", "showProjectDetails": "Zobrazit podrobnosti projektu", "hideProjectList": "Skrýt seznam projektů", - "hideProjectDetails": "Skrýt detaily projektu" + "hideProjectDetails": "Skrýt detaily projektu", + "countries": "Země" } } diff --git a/public/static/locales/cs/me.json b/public/static/locales/cs/me.json index acab8ffacb..17994190be 100644 --- a/public/static/locales/cs/me.json +++ b/public/static/locales/cs/me.json @@ -15,13 +15,18 @@ "titleTransactions": "PlanetCash - Transakce", "titleCreateAccount": "PlanetCash - Vytvořit účet" }, + "treesPlanted": "Vysazené stromy", + "treesPlanted_plural": "Vysazené stromy", "bulkCodesTitleStep3": "Generování hromadných kódů - Kódy vydání", "bulkCodesTitleStep2": "Generování hromadných kódů - vyberte projekt", "bulkCodesTitle": "Generování hromadných kódů - vyberte metodu", "bulkCodes": "Hromadné kódy", "target": "Cíl", + "editTarget": "Upravit cíl", "share": "Podíl", "registerTrees": "Registrace stromů", + "registeredTree": "Registrovaný strom", + "linkedIn": "LinkedIn", "registerTreesDescription": "Zaregistrujte stromy, které jste sami vysadili, např. na své zahradě.", "myForest": "Můj les", "giftToGiftee": "Dárek pro {gifteeName}", @@ -60,6 +65,8 @@ "registeredTrees": "Registrované stromy", "embedWidget": "Vytvořit widget", "donationLink": "Vytvořit odkaz pro darování", + "gift": "Dárek", + "donation": "Dary", "tree-donation": "Darování stromů", "tree-gift": "Stromový dárek", "tree-cash": "TreeCash", @@ -76,9 +83,11 @@ "donorNameRequired": "Jméno dárce je povinné", "donationAmountRequired": "Výše daru je povinná", "frequencyRequired": "Frekvence je povinná", + "dateRequired": "Požadované datum", "project": "Název projektu", "planetCashPayment": "Platba PlanetCash", "method": "Způsob platby", + "unitCost": "Náklady na {unitType}", "treeCount": "Počet stromů", "lastUpdate": "Poslední aktualizace", "donorCertificate": "Dárcovský certifikát ", @@ -102,7 +111,7 @@ "pausedUntil": "Pozastaveno do", "pauseUntilDate": "Pozastavit do vybraného data", "reactivateDonationConfirmation": "Znovu aktivovat dar", - "reactivateDonationDescription": "Váš dar bude znovu aktivován a bude vytvořen k datu{currentPeriodEnds}", + "reactivateDonationDescription": "Váš dar bude reaktivován a vyúčtován k datu {currentPeriodEnds}", "cancelDonationConfirmation": "Zrušit dar", "cancelDonationDescription": "Jakmile je dar zrušen, nelze jej restartovat.", "cancelDonationPaypalDescription": "Tento dar bude okamžitě zrušen, nelze jej restartovat.", @@ -202,6 +211,7 @@ "sepa_debit": "SEPA (Stripe)", "offline": "Offline", "offline-offline": "Offline", + "offline-transfer": "Offline", "profile": "Profil", "projects": "Projekty", "settings": "Nastavení", @@ -259,6 +269,14 @@ "wrongEntered": "Emailové ID nebo PIN podpory je nesprávné !!", "donatedTrees": "Darované stromy", "resetPin": "Obnovit PIN", - "document": "Dokumentace platformy (CZ)" + "donate": "Darovat", + "donated": "Darované", + "conserved": "Konzervovaný", + "restored": "Obnovené stránky", + "membershipCtaButtonText": "PŘIHLÁSIT SE", + "membershipCtaCopy": "Podpořte nás tím, že se stanete členem", + "shareUrl": "Sdílet adresu URL", + "treesOfTrees": "{count1} z {count2}", + "document": "Dokumentace platformy (EN)" } } diff --git a/public/static/locales/cs/profile.json b/public/static/locales/cs/profile.json index cd681bc51b..47bb0dad42 100644 --- a/public/static/locales/cs/profile.json +++ b/public/static/locales/cs/profile.json @@ -1,13 +1,49 @@ { "Profile": { + "myProfile": { + "memberSince": "Členem od {date}", + "userDescription": "{bio}" + }, + "feature": { + "redeem": "Vykoupit", + "registerTree": "Strom registrace", + "share": "Sdílet" + }, "myPublicProfile": { - "support": "Podpora" + "support": "Podpora", + "link": "Odkaz" }, "myForestMap": { - "plantedTree": "{count, plural, =0 {stromů} =1 {strom} other {stromů}}" + "plantedTree": "{count, plural, =1 {# strom} other {# stromů}}", + "treesPlanted": "Vysazené stromy", + "restored": "Obnovené stránky", + "registered": "Registrováno", + "conservation": "Ochrana přírody", + "projects": "Projekty", + "countries": "Země", + "donations": "Dary", + "area": "{areaConserved} m²", + "zoomIn": "přiblížení pro více informací", + "totalDonation": "{count, plural, =1 {# dar} other {# darů}} ", + "totalProject": "na {count, plural, =1 {# projekt} other {# projektů}}", + "tpoName": "Podle {tpo}" + }, + "myTreeCounter": { + "treesPlanted": "Vysazené stromy", + "editTarget": "Upravit cíl" }, "myContributions": { - "receivedFrom": "Přijato od {name}" + "treesPlantedAndAreaRestored": "Vysazené stromy a obnovené plochy", + "treeRegistered": "{count, plural, =1 {# Registrovaný strom} other {# Registrovaných stromů}}", + "receivedFrom": "Přijato od {name}", + "loadMoreContribution": "Načíst další příspěvek", + "loadingContribution": "Načítání příspěvku....", + "donate": "Darovat", + "donateAgain": "Darujte znovu", + "conservedSmall": "konzervované", + "restoredSmall": "restaurováno", + "areaType": "{areaConserved} m² {type}", + "areaConserved": "Zachované oblasti" } } } diff --git a/public/static/locales/cs/redeem.json b/public/static/locales/cs/redeem.json index a6f12a595a..b8df8651b0 100644 --- a/public/static/locales/cs/redeem.json +++ b/public/static/locales/cs/redeem.json @@ -1,5 +1,7 @@ { "Redeem": { + "myPlantedTreesByOrg": "Můj strom {formattedNumber} bude zasazen {tpoName}", + "myPlantedTreesByOrg_plural": "Moje stromy {formattedNumber} budou vysazeny {tpoName}", "congratulations": "Gratulujeme!", "addToMyTrees": "Přidat do mých stromů", "validateCode": "Ověřit kód", @@ -10,6 +12,7 @@ "invalidCode": "Tento kód je neplatný.", "alreadyRedeemed": "Kód již byl uplatněn", "redeemCode": "Použít kód", + "redeemingCode": "Uplatnění kódu...", "redeem": "Uplatnit", "redeemDescription": "Uplatněte svůj stromový poukaz a další kódy.", "successfullyRedeemed": "Úspěšně uplatněn", diff --git a/public/static/locales/cs/treemapper.json b/public/static/locales/cs/treemapper.json index e48ae521a8..3a0140792a 100644 --- a/public/static/locales/cs/treemapper.json +++ b/public/static/locales/cs/treemapper.json @@ -12,6 +12,7 @@ "coordinates": "Souřadnice", "guid": "GUID", "height": "Výška", + "invalidHeight": "Nesprávná výška", "width": "Šířka", "plantDate": "Datum rostlin", "registrationDate": "Datum registrace", @@ -25,6 +26,7 @@ "plantingLocation": "Místo výsadby", "reviewAndSubmit": "Zkontrolovat a odeslat", "sampleTree": "Vzorek stromu # {number}", + "tag": "Štítek", "import": "Importovat", "editor": "Editor", "draw": "Kreslit", @@ -33,8 +35,11 @@ "downloadCSVTemplate": "Stáhněte si šablonu CSV", "treeTag": "Tag stromu", "diameter": "Průměr", + "invalidDiameter": "Neplatný průměr", "latitude": "Zeměpisná šířka", + "invalidLatitude": "Nesprávná zeměpisná šířka", "longitude": "Zeměpisná délka", + "invalidLongitude": "Nesprávná zeměpisná délka", "addAnotherSampleTree": "Přidejte další vzorový strom", "skip": "Přeskočit", "treeSpecies": "Druhy stromů", @@ -63,6 +68,10 @@ "speciesValidation": "Zadejte prosím druh", "external": "Vnější", "date": "Datum", - "measurements": "Měření" + "datePlantedRequired": "Požadované datum výsadby", + "measurements": "Měření", + "ignoredColumnsWarning": "Další sloupce byly ignorovány", + "back": "Zpět", + "submit": "Odeslat" } } diff --git a/public/static/locales/de/bulkCodes.json b/public/static/locales/de/bulkCodes.json index 08e76fd740..8b6b9ff855 100644 --- a/public/static/locales/de/bulkCodes.json +++ b/public/static/locales/de/bulkCodes.json @@ -39,6 +39,7 @@ "unitsPerCode": "Einheiten pro Code*", "totalNumberOfCodes": "Gesamtzahl der Codes*", "occasion": "Anlass", + "notificationLanguage": "Sprache der Benachrichtigung", "total": "Insgesamt", "chargeConsentText": "Indem du auf Codes erzeugen klickst, erklärst du dich damit einverstanden, dass der oben genannte Betrag von deinem Konto abgebucht wird.", "invalidEmailWarningText": "Bitte stelle sicher, dass die Empfängeremail eine gültige E-Mail ist. Die Verwendung von Pseudo-E-Mails oder ungültigen E-Mails führt zur Sperrung des Kontos in Übereinstimmung mit den Geschäftsbedingungen der Plattform.", diff --git a/public/static/locales/de/common.json b/public/static/locales/de/common.json index cedea337bf..b6a96093b9 100644 --- a/public/static/locales/de/common.json +++ b/public/static/locales/de/common.json @@ -1,6 +1,6 @@ { "Common": { - "tree": "{count, plural, =0 {Bäume} =1 {Baum} other {Bäume}}", + "tree": "{count, plural, =1 {Baum} other {Bäume}}", "m2": "m²", "by": "Von {tpoName}", "to_project_by_tpo": "An {projectName} von {tpoName}", diff --git a/public/static/locales/de/donate.json b/public/static/locales/de/donate.json index b78e362ff1..feaf0a3d08 100644 --- a/public/static/locales/de/donate.json +++ b/public/static/locales/de/donate.json @@ -68,7 +68,6 @@ "thisDonationSupports": "Diese Spende unterstützt", "plantTreesWith": "Bäume pflanzen mit", "textToShare": "Schließe dich mit {name} und Tausenden anderen zusammen, um eine Billion Bäume zu pflanzen, um die Klimakrise zu bewältigen #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "thankyouHeaderText": "Wir sind auf dem Weg zu einer \n

Billionen Bäume

", "shareTextTitle": "Stop Talking. Start Plant", "textToShareLinkedin": "Schließe dich mit {name} und Tausenden anderen zusammen, um eine Billion Bäume zu pflanzen, um die Klimakrise zu bewältigen", "textToShareForMe": "Pflanzt mit mir und Tausenden von anderen 1.000 Milliarden Bäume, um die Klimakrise zu bekämpfen", @@ -86,7 +85,6 @@ "payWithGiroPay": "Bezahlen mit GiroPay", "payWithSofort": "Bezahlen mit SOFORT", "donationFailed": "Spende fehlgeschlagen", - "donationFailedMessage": "Beim Abschluss deiner Zahlung ist etwas schief gelaufen. Wenn du weiterhin Probleme hast, kontaktiere uns bitte unter support@plant-for-the-planet.org.", "donationPending": "Abschließen deiner Spende", "donationPendingMessage": "Wir warten derzeit auf die Bestätigung von deiner Bank. Dies kann einige Zeit dauern, daher kannst du diese Seite auch schließen. Wir werden dir den Beleg in Kürze per E-Mail zusenden.", "sepaMessage": "Indem du deine IBAN angibst und diese Zahlung bestätigst, ermächtigst du Plant-for-the-Planet und Stripe, unseren Zahlungsdienstleister, Anweisungen an deine Bank zu senden, um dein Konto zu belasten. Du hast Anspruch auf eine Rückerstattung durch deine Bank gemäß ihrer allgemeinen Geschäftsbedingungen. Wenn du irgendwelche Probleme mit deiner Spende hast, sende uns bitte eine E-Mail an support@plant-for-the-planet.org.", diff --git a/public/static/locales/de/manageProjects.json b/public/static/locales/de/manageProjects.json index f6d250f522..61a28ffaed 100644 --- a/public/static/locales/de/manageProjects.json +++ b/public/static/locales/de/manageProjects.json @@ -72,6 +72,25 @@ "employeesCountInfo": "Entspricht einer 40-Stunden-Woche. D.h. zwei Halbzeitbeschäftigte zählen als einer.", "labelRestorationSeasons": "Renaturierungszeiten", "labelMainInterventions": "Hauptinterventionen", + "interventionTypes": { + "assisting-seed-rain": "Assisting Seed Rain", + "control-remove-livestock": "Control/Remove Livestock", + "cut-suppressing-grass": "Cut/Suppressing Grass", + "direct-seeding": "Direct Seeding", + "enrichment-planting": "Enrichment Planting", + "establish-firebreaks": "Establish Firebreaks", + "fire-patrols": "Establish Firebreaks", + "fire-suppression-team": "Fire Suppression Team", + "liberating-regenerants": "Liberating Regenerants", + "maintenance": "Maintenance", + "marking-regenerants": "Marking Regenerants", + "other-interventions": "Other Interventions", + "planting-trees": "Planting Trees", + "removal-contaminated-soil": "Removal of Contaminated Soil", + "removal-invasive-species": "Removal of Invasive Species", + "soil-improvement": "Soil Improvement", + "stop-tree-harvesting": "Stop Tree Harvesting" + }, "missingInterventionsError": "Bitte wählen Sie mindestens eine Maßnahme aus", "timePeriod": "Zeitraum", "max300Chars": "Maximal 300 Zeichen erlaubt", @@ -171,6 +190,22 @@ "borealForests": "Boreale Wälder", "tundra": "Tundra", "temperateConiferousForests": "Gemäßigte Nadelwälder", + "ecosystemTypes": { + "tropical-moist-forests": "Tropical Moist Forests", + "tropical-dry-forests": "Tropical Dry Forests", + "tropical-coniferous-forests": "Tropical Coniferous Forests", + "tropical-grasslands-forests": "Tropical Grasslands Forests", + "temperate-broadleaf-forests": "Temperate Broadleaf Forests", + "temperate-coniferous-forests": "Temperate Coniferous Forests", + "temperate-grasslands-forests": "Temperate Grassland Forests", + "mediterranean-forests": "Mediterranean Forests", + "mangroves": "Mangroves", + "deserts": "Deserts", + "flooded-grasslands": "Flooded Grasslands", + "montane-grasslands": "Montane Grasslands", + "boreal-forests": "Boreal Forests", + "tundra": "Tundra" + }, "unitTypeRequired": "Wähle bitte eine Einheit aus", "unitType": "Einheit", "unitTypes": { diff --git a/public/static/locales/de/profile.json b/public/static/locales/de/profile.json index 17da43fc5c..3881af990f 100644 --- a/public/static/locales/de/profile.json +++ b/public/static/locales/de/profile.json @@ -14,7 +14,7 @@ "link": "Link" }, "myForestMap": { - "plantedTree": "{count, plural, =0 {Bäume} =1 {Baum} other {Bäume}}", + "plantedTree": "{count, plural, =1 {# Baum} other {# Bäume}}", "treesPlanted": "Gepflanzte Bäume", "restored": "Wiederhergestellt", "registered": "Registriert", @@ -24,8 +24,8 @@ "donations": "Spenden", "area": "{areaConserved} m²", "zoomIn": "Für weitere Details heranzoomen", - "totalDonation": "{count, plural, =0 {Spenden} =1 {Spende} other {Spenden}} ", - "totalProject": "für {count, plural, =0 {Projekte} =1 {Projekt} other {Projekte}}", + "totalDonation": "{count, plural, =1 {# Spende} other {# Spenden}} ", + "totalProject": "für {count, plural, =1 {# Projeckt} other {# Projeckte}}", "tpoName": "By {tpo}" }, "myTreeCounter": { @@ -34,7 +34,7 @@ }, "myContributions": { "treesPlantedAndAreaRestored": "Bäume gepflanzt & Gebiete wiederhergestellt", - "treeRegistered": "{count, plural, =0 {Bäume registriert} =1 {Baum registriert} other {Bäume registriert}}", + "treeRegistered": "{count, plural, =1 {# Baum registriert} other {# Bäume registriert}}", "receivedFrom": "Empfangen von {name}", "loadMoreContribution": "Lade weitere Beiträge", "loadingContribution": "Lade Beiträge....", diff --git a/public/static/locales/en/donate.json b/public/static/locales/en/donate.json index 5eda0b5380..a6ee8c726f 100644 --- a/public/static/locales/en/donate.json +++ b/public/static/locales/en/donate.json @@ -68,7 +68,7 @@ "thisDonationSupports": "This donation supports", "plantTreesWith": "Plant trees with", "textToShare": "Join {name} and thousand of others to plant a trillion trees to tackle the climate crisis #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "shareTextTitle": "Stop Talking. Start Plant", + "shareTextTitle": "Stop Talking. Start Planting.", "textToShareLinkedin": "Join {name} and thousand of others to plant a trillion trees to tackle the climate crisis", "textToShareForMe": "Join me and thousand of others to plant a trillion trees to tackle the climate crisis", "donationTokenInvalid": "The provided donation token is invalid.", diff --git a/public/static/locales/en/manageProjects.json b/public/static/locales/en/manageProjects.json index 6687ca7640..229334003a 100644 --- a/public/static/locales/en/manageProjects.json +++ b/public/static/locales/en/manageProjects.json @@ -217,7 +217,7 @@ "ownershipType": "Ownership Type", "landOwnershipType": "Land Ownership Type", "restorationProject": "Restoration Project", - "addProjetDescription": "You're few steps away from showcasing your work on the Plant-for-the-planet platform.", + "addProjetDescription": "You're few steps away from showcasing your work on the Plant-for-the-Planet platform.", "englishOnly": " Please create projects in English only.", "important": "Important:", "addProjetContact": "If you need any help contact us at ", diff --git a/public/static/locales/en/me.json b/public/static/locales/en/me.json index bce0eeeb36..1d71870204 100644 --- a/public/static/locales/en/me.json +++ b/public/static/locales/en/me.json @@ -111,7 +111,7 @@ "pausedUntil": "Paused until", "pauseUntilDate": "Pause until selected Date", "reactivateDonationConfirmation": "Reactivate Donation", - "reactivateDonationDescription": "Your donation will be reactivated and will be built on date {currentPeriodEnds}", + "reactivateDonationDescription": "Your donation will be reactivated and will be billed on date {currentPeriodEnds}", "cancelDonationConfirmation": "Cancel Donation", "cancelDonationDescription": "Once donation is cancelled, it can not be restarted.", "cancelDonationPaypalDescription": "This donation will be cancelled immediately, it can not be restarted.", diff --git a/public/static/locales/es/bulkCodes.json b/public/static/locales/es/bulkCodes.json index ffcd4415b0..940b7cf661 100644 --- a/public/static/locales/es/bulkCodes.json +++ b/public/static/locales/es/bulkCodes.json @@ -1 +1,117 @@ -{ } +{ + "BulkCodes": { + "bulkCodesTitle": "Emisión de certificados y códigos de árbol", + "partnerSignupInfo": "El uso de esta función por parte de las empresas está sujeto a la asociación con Plant-for-the-Planet. Para más información, póngase en contacto con partner@plant-for-the-planet.org.", + "bulkCodesDescription1": "Con PlanetCash puede generar miles de códigos en una sola operación. La generación de certificados de árbol aumentará su recuento de árboles.", + "bulkCodesDescription2": "Puede utilizar esta función para crear códigos para certificados personalizados, tarjetas regalo, donaciones en nombre de los usuarios y códigos canjeables que puede asociar a sus productos.", + "tabCreationMethod": "Método de creación", + "tabSelectProject": "Seleccionar proyecto", + "tabIssueCodes": "Códigos de emisión", + "issueCodes": "Códigos de emisión", + "issuingCodes": "Emisión de códigos...", + "importMethodText": { + "title": "Crear certificados de árbol personalizados", + "subtitle": "Utilice este método (para un máximo de 1000 destinatarios en una transacción) si alguno de los siguientes criterios coincide con su caso de uso:", + "details": { + "line1": "Quiero indicar el nombre o el correo electrónico del destinatario de cada código.", + "line2": "Quiero que Plant-for-the-Planet envíe automáticamente un correo electrónico a los destinatarios una vez que se haya generado (opcional).", + "line3": "Quiero emitir códigos para diferentes recuentos de árboles." + } + }, + "genericMethodText": { + "title": "Crear códigos genéricos", + "subtitle": "Utilice este método si los siguientes criterios coinciden con su caso de uso:", + "details": { + "line1": "Todos los códigos tendrán el mismo valor.", + "line2": "Quiero generar un número de código para destinatarios arbitrarios.", + "line3": "Los nombres y correos electrónicos no pueden asociarse al código." + } + }, + "projectName": "Nombre del proyecto", + "costPerUnit": "Coste por unidad", + "labelComment": "Comentario [Privado]", + "unitOfMeasurement": "Unidad de medida", + "units": { + "ha": "ha", + "tree": "árbol", + "m2": "m²" + }, + "unitsPerCode": "Unidades por código", + "totalNumberOfCodes": "Número total de códigos", + "occasion": "Ocasión", + "notificationLanguage": "Lengua de notificación", + "total": "Total", + "chargeConsentText": "Al hacer clic en Emitir códigos, acepta que se cargue en su cuenta el importe anterior.", + "invalidEmailWarningText": "Asegúrese de que la dirección de correo electrónico del destinatario es válida. El uso de correos electrónicos falsos o no válidos conllevará la suspensión de la cuenta de acuerdo con los términos y condiciones de la plataforma.", + "projectRequired": "No se selecciona ningún proyecto.", + "unitsPerCodeRequired": "Cada código debe contener al menos 1 unidad.", + "codeQuantityRequired": "Debe crear al menos 1 código.", + "unitsPerCodeInvalidRange": "Un código puede contener un máximo de 1000 unidades.", + "codeQuantityInvalidRange": "Se puede crear un máximo de 5000 códigos.", + "featureAvailability": "Esta función sólo está disponible para proyectos de socios.", + "planetCashDisabled": "PlanetCash no está activado. Por favor, active PlanetCash para utilizar esta función.", + "insufficientPCashBalance": "Equilibrio insuficiente.", + "addBalanceGeneric": "Haga clic aquí para añadir fondos.", + "instructionsUploadCSV": { + "empty": "Arrastre y suelte / haga clic para seleccionar un archivo .xslx / .csv para cargar.", + "error": "Por favor, compruebe si hay problemas y arrastre el archivo .xslx / .csv aquí para cargarlo.", + "processing": "Por favor, espere mientras analizamos su archivo...", + "success": "Continúe o arrastre el archivo .xlsx o .csv aquí para reemplazar el archivo actual." + }, + "statusUploadCSV": { + "error": "Error", + "success": "Análisis de ficheros finalizado" + }, + "errorUploadCSV": { + "fileInvalidType": "Sólo se permiten archivos .csv y .xslx.", + "tooManyFiles": "Cargue un solo archivo.", + "fileTooSmall": "El archivo cargado parece estar vacío.", + "fileTooLarge": "El archivo cargado debe ocupar 5 MB o menos.", + "missingColumns": "El archivo cargado no contiene las siguientes columnas: ", + "noRecipientData": "No se han encontrado datos del destinatario.", + "tooManyRecipients": "Se puede procesar un máximo de 1000 destinatarios en una transacción.", + "unitsNotProvided": "Faltan unidades/no son válidas para algunos destinatarios.", + "notifyNotPossible": "Falta el email y el nombre de algunos destinatarios que deben ser notificados.", + "instructionRowError": "Se ha producido un error en la 1ª fila. Compruebe si ha borrado las instrucciones o si hay datos adicionales.", + "invalidEmails": "recipient_email contiene emails ficticios/inválidos en las siguientes filas: {rowList}. Por favor, elimine los emails no válidos o añada emails válidos.", + "generalError": "Algo ha ido mal. Por favor, inténtelo después de un rato." + }, + "errorAddRecipient": { + "unitsNotProvided": "Obligatorio", + "requiredForNotifications": "Obligatorio (para los destinatarios del correo electrónico)", + "emailInvalid": "Correo electrónico no válido" + }, + "successUploadCSV": { + "ignoredColumns": "Se han ignorado las columnas adicionales" + }, + "importInstructions": "Consulte la documentación de aquí, descargue plantilla Excel aquí, y plantilla CSV aquí.", + "tableHeaders": { + "recipient_name": "Nombre del beneficiario", + "recipient_email": "Correo electrónico del destinatario", + "recipient_notify": "¿Enviar correo electrónico?", + "units": "Unidades", + "recipient_message": "Mensaje" + }, + "tableHeaderHelpText": { + "recipient_name": "Opcional. Nombre del destinatario, que aparece en el certificado y, si se ha optado por él, en el correo enviado al destinatario. Obligatorio si desea enviar correos electrónicos.", + "recipient_email": "Opcional. Obligatorio para enviar el certificado al destinatario por correo electrónico.", + "recipient_notify": "Opcional. Seleccione Sí si desea que Plant-for-the-Planet informe automáticamente al destinatario por correo electrónico.", + "units": "Obligatorio. Número de árboles que se entregan al beneficiario, por ejemplo, 5 por 5 árboles", + "recipient_message": "Opcional. Mensaje para el destinatario que se incluye en el correo electrónico si notificar es sí. Se enviará un mensaje por defecto si no se proporciona." + }, + "donationSuccess": "Su donación se ha realizado correctamente. Le redirigimos a ver los detalles de la donación en breve...", + "donationError": { + "planet_cash_insufficient_credit": "Crédito disponible = {availableBalance}. Por favor, cargue saldo en su cuenta PlanetCash para realizar esta donación.", + "default": "Algo ha ido mal. Por favor, inténtelo después de un rato.", + "planet_cash_payment_failure": "La transacción ha fallado. {reason}", + "planet_cash_invalid_project": "No puede hacer una donación al proyecto seleccionado." + }, + "titleAddRecipientButton": "Añadir destinatario a la tabla", + "notifyRecipientOptions": { + "yes": "Sí", + "no": "No" + }, + "fileUploadWarning": "Esto eliminará los datos de los destinatarios existentes, ¿desea continuar?", + "unsavedDataWarning": "Algunos datos del destinatario no se han guardado. ¿Desea continuar? Los datos no guardados se perderán" + } +} diff --git a/public/static/locales/es/common.json b/public/static/locales/es/common.json index 5b011f4ba1..ea726b44db 100644 --- a/public/static/locales/es/common.json +++ b/public/static/locales/es/common.json @@ -1,6 +1,7 @@ { "Common": { - "tree": "{count, plural, =0 {Árboles} =1 {Árbol} other {Árboles}}", + "tree": "{count, plural, =1 {Árbol} other {Árboles}}", + "m2": "m²", "by": "Por {tpoName}", "to_project_by_tpo": "Para {projectName} por {tpoName}", "for": "para", @@ -77,7 +78,59 @@ "logout": "Cerrar Sesión", "featured": "Destacado", "treeMapper": "TreeMapper", + "overview": "Visión general", + "childrenAndYouth": "Infancia y juventud", + "trillionTrees": "Trillones de árboles", + "yucatan": "Restauración en Yucatán", + "partners": "Socios", + "changeChocolate": "The Change Chocolate", + "stopTalkingStartPlanting": "Stop talking. Start planting.", "underMaintenance": "En mantenimiento", - "reviewInfo": "El proyecto se inspeccionó en una revisión sobre el terreno de varios días al <2>mes y cumple nuestras <5>normas." + "forbidden": "No tiene permiso para ver esta página", + "connectionError": "No se ha podido acceder al servidor. Compruebe su conexión a Internet.", + "validationFailed": "¡Validación fallida!", + "add": "Añadir", + "modalTitle": "Cancelar todas las suscripciones para continuar", + "modalSubtitle": "Por favor, cancele primero sus suscripciones", + "deleteCondition": "Antes de continuar, asegúrate de haber cancelado todas las suscripciones.", + "showSubscriptions": "Mostrar mis suscripciones", + "notFound": "Recurso no encontrado", + "tooManyRequest": "Demasiadas solicitudes. Espere y vuelva a intentarlo más tarde o póngase en contacto con el administrador del sistema para obtener ayuda.", + "unauthorized": "No autorizado", + "validationError": "Error de validación", + "internalServerError": "Error interno del servidor - ¡Inténtelo más tarde!", + "serviceUnavailable": "La aplicación está en mantenimiento, consulte status.plant-for-the-planet.org para obtener más información", + "account_duplicate": "La cuenta ya existe", + "line_item_amount_deviation": "Importe Desviación", + "line_item_amount_invalid": "Importe no válido", + "line_item_amount_prohibited": "Importe prohibido", + "idempotency_key_missing": "Falta la clave de idempotencia en la cabecera", + "line_item_invalid_donor_data": "Datos del donante no válidos", + "line_item_invalid_planet_cash_account": "Cuenta PlanetCash inválida", + "line_item_invalid_project": "Proyecto no válido", + "line_item_missing_amount": "Importe que falta", + "line_item_missing_currency": "Falta de moneda", + "line_item_missing_quantity": "Cantidad que falta", + "line_item_project_not_allowing_donations": "Proyecto que no permite donaciones", + "line_item_quantity_prohibited": "Cantidad prohibida", + "generic_error": "Algo ha ido mal. Comprueba tu conexión a Internet o inténtalo de nuevo más tarde.", + "missing_profile": "Falta el perfil", + "some_error": "Algo salió mal", + "planet_cash_payment_failure": "Falta de pago", + "planet_cash_insufficient_credit": "Crédito insuficiente", + "planet_cash_invalid_project": "Proyecto no válido", + "active_account_exists": "Ya existe una cuenta PlanetCash activa", + "duplicate_account": "La cuenta ya existe", + "token_expired": "Token caducado. Vuelva a iniciar sesión", + "project_not_available": "Los detalles del proyecto no están disponibles actualmente", + "topProject": "Proyecto Top", + "viewReport": "Ver el informe", + "reviewInfo": "El proyecto se inspeccionó en una revisión sobre el terreno de varios días al {reviewMonth} y cumple nuestras normas.", + "standardsLink": "https://www.plant-for-the-planet.org/standards/", + "project": "Proyecto", + "top_project_standards_fulfilled": "La inspección del proyecto reveló que éste cumplía al menos 12 de las 19 normas de Top Project .", + "disabledDonateButtonText": "El proyecto no acepta actualmente donaciones. Esto puede deberse a que está totalmente financiado, aún no ha sido revisado o no cumple actualmente todas nuestras normas para proyectos, o bien opta por utilizar la plataforma exclusivamente por sus herramientas de transparencia.", + "notDonatable": "No donable", + "salesforceDisabledDonateButtonText": "Actualmente el proyecto no acepta donaciones." } } diff --git a/public/static/locales/es/country.json b/public/static/locales/es/country.json index 01918b0ef9..315a126c9a 100644 --- a/public/static/locales/es/country.json +++ b/public/static/locales/es/country.json @@ -1,5 +1,6 @@ { "Country": { + "auto": "Selección automática", "ac": "Isla Ascensión", "af": "Afganistán", "ax": "Islas Åland", @@ -243,9 +244,9 @@ "ug": "Uganda", "ua": "Ucrania", "ae": "Emiratos Árabes Unidos", - "gb": "Reino Unido de Gran Bretaña e Irlanda del Norte", + "gb": "UK", "un": "Naciones Unidas", - "us": "Estados Unidos de América", + "us": "USA", "um": "Islas menores alejadas de los Estados Unidos", "uy": "Uruguay", "uz": "Uzbekistán", diff --git a/public/static/locales/es/donate.json b/public/static/locales/es/donate.json index ca9545e5de..02cf374561 100644 --- a/public/static/locales/es/donate.json +++ b/public/static/locales/es/donate.json @@ -6,6 +6,7 @@ "yourTreesPlantedByOnLocation_plural": "Sus árboles {treeCount} serán plantados por {projectName} en {location}.", "myTreesPlantedByOnLocation": "Mi árbol {treeCount} está siendo plantado en {location}.", "myTreesPlantedByOnLocation_plural": "Mis árboles {treeCount} están siendo plantados en {location}.", + "projects": "Proyectos", "topProjects": "Proyectos principales", "allCountProjects": "Todos {projectCount} los Proyectos", "searchProjects": "Buscar Proyectos", @@ -18,7 +19,7 @@ "taxDeductionNotYetAvailable": "La deducción de impuestos no está disponible todavía para ", "taxDeductionNotAvailableForProject": "La deducción de impuestos no está disponible todavía para este proyecto", "youWillReceiveTaxDeduction": "Recibirá un certificado de deducción de impuestos por ", - "toProjectByOrganization": "Para {nombre del proyecto} de {nombre de la organización}", + "toProjectByOrganization": "A {projectName} por {organizationName}", "firstName": "Nombre", "lastName": "Apellidos", "email": "Correo electrónico", @@ -54,11 +55,11 @@ "selectCurrency": "Seleccione la divisa", "treeDonationWithPFP": "Donación de árboles con Plant-for-the-Planet", "unavailable": "no disponible", - "donationSuccessfulWith": "Su {{divisa} donación fue pagada con éxito con el tipo de pago utilizado.", - "donationSuccessful": "Su {{divisa} donación fue un éxito.", - "giftSentMessage": "Hemos enviado un correo electrónico a {nombre del destinatario} sobre el regalo.", + "donationSuccessfulWith": "Su donación a {currency} {totalAmount} se ha abonado correctamente con {paymentTypeUsed}.", + "donationSuccessful": "Su donación a {currency} {totalAmount} ha sido un éxito.", + "giftSentMessage": "Hemos enviado un correo electrónico a {recipientName} sobre el regalo.", "contributionMessage": "¿Quizás los visites algún día? Mientras tanto, tal vez puedas convencer a tus amigos con algunos árboles propios contándoles sobre los tuyos", - "plantTreesAtURL": "Plantar árboles en", + "plantTreesAtURL": "Plantar árboles en {url}", "copiedToClipboard": "¡Texto copiado al portapapeles!", "noProjectsFound": "No se han encontrado proyectos", "inTimeOfTaxReturns": "a tiempo para la declaración de impuestos.", @@ -67,8 +68,7 @@ "thisDonationSupports": "Esta donación apoya", "plantTreesWith": "Plantar árboles con", "textToShare": "Únete a {name} y miles de otros para plantar un trillón de árboles para hacer frente a la crisis climática #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "thankyouHeaderText": "Vamos hacia un\n

Trillón de árboles

", - "shareTextTitle": "Deja de hablar. Inicie la planta", + "shareTextTitle": "Stop Talking. Start Planting.", "textToShareLinkedin": "Únete a {name} y miles de otros para plantar un trillón de árboles para hacer frente a la crisis climática", "textToShareForMe": "Únete a nosotros y a otros miles para plantar un billón de árboles para hacer frente a la crisis climática", "donationTokenInvalid": "La ficha de donación proporcionada es inválida.", @@ -85,7 +85,6 @@ "payWithGiroPay": "Donar con GiroPay", "payWithSofort": "Donar con SOFORT", "donationFailed": "Donación fallida", - "donationFailedMessage": "Algo ha ido mal al completar el pago. Si sigues teniendo problemas, ponte en contacto con nosotros en support@plant-for-the-planet.org", "donationPending": "Completar tu donación", "donationPendingMessage": "Actualmente estamos esperando la confirmación de tu banco. Esto puede llevar algún tiempo, así que no dudes en cerrar esta página. En breve te enviaremos un recibo por correo electrónico.", "sepaMessage": "Al proporcionar tu IBAN y confirmar este pago, autorizas a Plant-for-the-Planet y a Stripe, nuestro proveedor de servicios de pago, a enviar instrucciones a tu banco para que realice el cargo en tu cuenta. Tienes derecho a un reembolso por parte de tu banco según los términos y condiciones del acuerdo con tu banco. Si tienes algún problema relacionado con tu donación, envíanos un correo electrónico a support@plant-for-the-planet.org", @@ -98,18 +97,19 @@ "orgNamePublished": "El nombre de la empresa es visible en nuestra tabla de clasificación y en la aplicación.", "aboutProject": "Sobre el proyecto", "acceptingDonations": "Aceptación de donaciones", - "natural-regeneration": "Regeneración Natural", - "managed-regeneration": "Regeneración Asistida", - "large-scale-planting": "Restauración a gran escala", - "agroforestry": "Agroforestería", - "urban-planting": "Restauración Urbana", - "other-planting": "Restauración", - "mangroves": "Manglares", + "natural-regeneration": "Natural Regeneration", + "managed-regeneration": "Managed Regeneration", + "large-scale-planting": "Large Scale Restoration", + "agroforestry": "Agroforestry", + "urban-planting": "Urban Restoration", + "other-planting": "Restoration", + "mangroves": "Mangroves", "purpose": "Propósito", "projectPurpose": "Objetivo del proyecto", "type": "Tipo", "projectType": "Tipo de proyecto", "restoration": "Restauración", - "filters": "Filtros" + "filters": "Filtros", + "perM2": "por m²" } } diff --git a/public/static/locales/es/donationLink.json b/public/static/locales/es/donationLink.json index ffcd4415b0..dec2998964 100644 --- a/public/static/locales/es/donationLink.json +++ b/public/static/locales/es/donationLink.json @@ -1 +1,25 @@ -{ } +{ + "DonationLink": { + "donationLinkTitle": "Cree su enlace de donación", + "donationLinkDescription": "Construya el Enlace de Donación para que funcione de acuerdo a sus necesidades, para dar a sus donantes una experiencia sin problemas. Utilice Vista previa para ver cómo funcionará el resultado final.", + "qrCodeDiscription": "En lugar del enlace, también puede proporcionar el código QR para llegar al proyecto deseado.", + "labelCountry": "País", + "labelLanguages": "Idioma", + "countryLanguageTitle": "Establecer el país y el idioma", + "projectTitle": "Establezca su proyecto", + "treeCounterTitle": "Apoya mi TreeCounter", + "testingTitle": "Modo de prueba", + "urlTitle": "URL de su enlace de donación", + "qrCodeTitle": "Código QR de su enlace de donación", + "languages": "Idiomas", + "preview": "Vista previa", + "copy": "Copia", + "treeCounterSubtitle": "Las donaciones de árboles a través de este enlace apoyan directamente mi perfil", + "testingModeSubtitle1": "Para probar, utilice el enlace que se muestra ahora. Esto es sólo para probar, para que el enlace correcto para compartir es necesario desactivar el modo de prueba.", + "testingModeSubtitle2": "Puede probar el flujo de donaciones mediante tarjetas en", + "linkAndQRCodeUpdatedMessage": "Enlace y QR-Code actualizados", + "treeCounterPrivateAccountSubtitle": "Para dar soporte a tu perfil, debes configurarlo como público en los ajustes de la cuenta.", + "automaticSelection": "Selección automática", + "qrCodeFileName": "Donation-link-QR-Code" + } +} diff --git a/public/static/locales/es/editProfile.json b/public/static/locales/es/editProfile.json index 4775d2548b..cee653c305 100644 --- a/public/static/locales/es/editProfile.json +++ b/public/static/locales/es/editProfile.json @@ -22,16 +22,41 @@ "accountPrivacyChangeText": "Para crear un widget de perfil necesitas tener una cuenta pública. Al hacer clic en continuar, cambias tu configuración de privacidad a pública.", "continue": "Continúa", "cancel": "Cancelar", + "termAndCondition": "Acepto los términos y condiciones de la plataforma Plant-for-the-Planet.", + "termAndConditionError": "Acepte las condiciones generales", "fieldLabels": { "profileType": "Soy un", + "firstName": "Nombre", + "lastName": "Apellido", "name": "Nombre de {type}", + "email": "Correo electrónico", + "address": "Dirección", + "city": "Ciudad", + "zipCode": "Código postal", + "country": "País", + "bio": "Descripción del perfil", "website": "Página web", "privateAccount": "Cuenta privada", "subscribe": "Suscríbete a las noticias por correo electrónico" }, "validationErrors": { + "maxChars": "Debe tener {max} caracteres o menos", + "firstNameRequired": "El campo Nombre es obligatorio", + "firstNameInvalid": "El nombre no es válido. No puede empezar por un carácter especial, y sólo se permiten estos caracteres especiales: espacio ' . -", + "lastNameRequired": "El campo Apellido es obligatorio", + "lastNameInvalid": "El apellido no es válido. No puede empezar por un carácter especial, y sólo se permiten estos caracteres especiales: espacio ' -", + "emailRequired": "Correo electrónico obligatorio", "nameRequired": "Por favor, introduce un nombre", - "websiteInvalid": "Por favor, introduzca una URL válida" + "nameInvalid": "El nombre no es válido. Sólo se permiten estos caracteres especiales: espacio . ¡, ' & ( ) ! -", + "addressRequired": "Dirección obligatoria", + "addressInvalid": "La dirección no es válida. Sólo se permiten estos caracteres especiales: espacio . , # - /", + "cityRequired": "Se requiere la ciudad", + "cityInvalid": "Ciudad no es válido. Sólo se permiten letras y estos caracteres especiales: espacio . , ( ) -", + "zipCodeRequired": "Código postal obligatorio", + "zipCodeInvalid": "El código postal no es válido", + "websiteInvalid": "Por favor, introduzca una URL válida", + "countryRequired": "País obligatorio", + "companyRequired": "El nombre de la empresa es obligatorio" } } } diff --git a/public/static/locales/es/giftfunds.json b/public/static/locales/es/giftfunds.json index ffcd4415b0..d2776061c9 100644 --- a/public/static/locales/es/giftfunds.json +++ b/public/static/locales/es/giftfunds.json @@ -1 +1,9 @@ -{ } +{ + "Giftfunds": { + "title": "Fondo de Regalos", + "description1": "Si ve esta página, entonces le queda saldo en su GiftFund para su cuenta PlanetCash activa. Compruebe la información abajo.", + "description2": "Si tiene alguna pregunta, póngase en contacto con su gestor de grandes cuentas.", + "project": "Proyecto", + "units": "Unidades disponibles" + } +} diff --git a/public/static/locales/es/managePayouts.json b/public/static/locales/es/managePayouts.json index ffcd4415b0..a1df493d56 100644 --- a/public/static/locales/es/managePayouts.json +++ b/public/static/locales/es/managePayouts.json @@ -1 +1,76 @@ -{ } +{ + "ManagePayouts": { + "title": "Gestionar los pagos", + "description": "Mantener actualizada la información sobre los pagos (por ejemplo, calendario, datos bancarios) para facilitar los pagos", + "tabPayoutSchedule": "Calendario de pagos", + "tabAddBankDetails": "Añadir datos bancarios", + "tabOverview": "Visión general", + "payoutInformation1": "Los pagos se procesan automáticamente cada año, o cuando una organización recauda 30.000 EUR o su equivalente en otra moneda.", + "payoutInformation2": "Los pagos son emitidos por la Fundación Plant-for-the-Planet y sus organizaciones hermanas, como Plant-for-the-Planet US, Plant-for-the-Planet Suiza, etc.", + "payoutInformation3": "Puede ajustar el calendario de pagos y recibir pagos frecuentes siempre que cumpla los criterios de importe mínimo de 1.500 EUR.", + "supportInformation": "Si tiene un caso excepcional, póngase en contacto con support@plant-for-the-planet.org.", + "scheduleFrequencies": { + "monthly": "Mensualmente", + "quarterly": "Trimestral", + "semiannually": "Semestral", + "annually": "Anual", + "manual": "Manual" + }, + "defaultCurrency": "Por defecto", + "labels": { + "currency": "Moneda", + "scheduleFrequency": "Frecuencia de pago", + "payoutMinAmount": "Importe mínimo de pago", + "bankName": "Nombre del banco", + "bankAddress": "Dirección bancaria", + "bankCountry": "Banco País", + "holderName": "Nombre del titular de la cuenta", + "holderAddress": "Dirección del titular de la cuenta", + "remarks": "Más información", + "accountNumber": "IBAN / Número de cuenta", + "routingNumber": "ABA / Número de ruta (sólo US)", + "bic": "BIC / SWIFT", + "branchCode": "Código de sucursal" + }, + "errors": { + "scheduleFrequencyRequired": "Se requiere frecuencia de pago", + "payoutMinAmountRequired": "Se requiere un importe mínimo de pago", + "payoutMinAmountTooLow": "El importe mínimo de pago debe ser de al menos {currency} {minAmount}", + "bankNameRequired": "El nombre del banco es obligatorio.", + "bankAddressRequired": "Se requiere la dirección del banco.", + "holderNameRequired": "El nombre del titular es obligatorio.", + "holderAddressRequired": "Se requiere la dirección del titular.", + "accountNumberRequired": "El número de cuenta es obligatorio.", + "bicRequired": "Se requiere el código BIC / SWIFT.", + "noAccountFound": "No se ha recuperado ninguna cuenta" + }, + "placeholders": { + "payoutMinAmount": "Debe ser al menos {currency} {minAmount}", + "bankName": "por ejemplo, Century Bank LLC", + "bankAddress": "por ejemplo, 1 West St, Hamington Way, MA, 10311, US", + "holderName": "por ejemplo, John Doe", + "holderAddress": "p. ej. 21 Penn Avenue, MA 10317 USA", + "remarks": "por ejemplo: Por favor, incluya ref acct=1237 en la transferencia." + }, + "helperText": { + "currency": "Seleccione \"Predeterminado\" si esta es su cuenta bancaria estándar, si necesita proporcionar detalles especiales para una divisa por favor selecciónela aquí y proporcione los detalles. También utilizaremos los importes mínimos estándar para un pago.", + "remarks": "Proporcione aquí detalles adicionales, por ejemplo, datos bancarios del intermediario, CP (códigos de propósito) u otras referencias." + }, + "saveButton": "Guardar", + "accountError": { + "min_amount_range": "El importe mínimo de pago debe ser de al menos {currency} {min}.", + "min_amount_forbidden": "No puede especificar un importe mínimo de pago para la cuenta por defecto.", + "account_duplicate": "Ya existe una cuenta en {currency}.", + "default": "Algo ha ido mal al crear una cuenta. Por favor, inténtelo después de un rato." + }, + "accountCreationSuccess": "Los datos de tu cuenta se han guardado correctamente.", + "accountUpdationSuccess": "Los datos de su cuenta se han actualizado correctamente.", + "scheduleSaveSuccess": "Su calendario de pagos se ha guardado correctamente.", + "editAccountButton": "Editar cuenta", + "accountTitleText": "Transferencia para {currency}", + "addBankDetailsButton": "Añadir datos bancarios", + "noBankAccountText": "Aún no has añadido ningún dato bancario.", + "editBankAccountTitle": "Editar cuenta", + "minPayoutText": "Mín. Pago: {amount}" + } +} diff --git a/public/static/locales/es/manageProjects.json b/public/static/locales/es/manageProjects.json index 220232e152..8f7eee5985 100644 --- a/public/static/locales/es/manageProjects.json +++ b/public/static/locales/es/manageProjects.json @@ -5,6 +5,7 @@ "detailedAnalysis": "Análisis detallado", "projectSites": "Sitios del proyecto", "projectSpending": "Gasto en proyectos", + "protectionStartedIN": "La protección comenzó en", "review": "Revisar", "name": "Nombre del proyecto", "nameValidation": "Por favor, introduzca el nombre del proyecto", @@ -15,6 +16,7 @@ "countTarget": "Objetivo de plantación", "countTargetValidation": "Por favor, introduce el objetivo de plantación", "countTargetValidation2": "El objetivo de plantación debe ser más de 1", + "conservationImpacts": "Impactos en la conservación", "website": "Página web", "websiteValidationRequired": "Por favor, introduce la URL", "websiteValidationInvalid": "URL inválida", @@ -23,16 +25,24 @@ "receiveDonations": "Recibir donaciones", "receiveDonationsInfo": "Por favor, actívalo una vez que el perfil del proyecto esté completo. Plant-for-the-Planet revisará el perfil y te informará si es elegible para recibir donaciones a través de esta plataforma. Esto puede tardar unas semanas.", "unitCost": "Costo por árbol (en EUR)", + "unitCostRequired": "Introduzca el coste por unidad", + "invalidUnitCost": "El coste por unidad debe ser superior a 0 euros e inferior a 100 euros", + "exit": "Salida a Proyectos", "projectLocation": "Localización del proyecto", "visitorAssistanceLabel": "Proporcionaré alojamiento, acceso al sitio y transporte local si Plant-for-the-Planet envía un revisor", "publishProject": "Proyecto de publicación", "saveAndContinue": "Guardar y continuar", + "skip": "Saltar", "youtubeURL": "Enlace a video de Youtube", "youtubeURLValidation": "Enlace a video de Youtube inválido", "addCaption": "Agregar subtítulo", "yearOfAbandonment": "Año aproximado de abandono", + "labelRestorationStarted": "Restauración iniciada", "plantingDensity": "Densidad de plantación", + "maxPlantingDensity": "Densidad máxima de plantación", "employeeCount": "Recuento de empleados", + "endangeredSpeciesValidation": "Entrada no válida", + "endangeredSpecies": "Especies amenazadas", "mainChallenge": "Reto principal", "whyThisSite": "¿Por qué este sitio?", "siteOwner": "Propietario del sitio", @@ -60,6 +70,29 @@ "yearAbandonedInfo": "¿Cuándo fue la última intervención humana significativa en el lugar? Incluyendo la tala de árboles, la agricultura, el pastoreo de ganado o la quema inducida.", "treePerHa": "árboles por hectárea", "employeesCountInfo": "El equivalente a una semana de 40 horas. Es decir, dos empleados de medio tiempo cuentan como uno.", + "labelRestorationSeasons": "Temporadas de restauración", + "labelMainInterventions": "Principales intervenciones", + "interventionTypes": { + "assisting-seed-rain": "Assisting Seed Rain", + "control-remove-livestock": "Control/Remove Livestock", + "cut-suppressing-grass": "Cut/Suppressing Grass", + "direct-seeding": "Direct Seeding", + "enrichment-planting": "Enrichment Planting", + "establish-firebreaks": "Establish Firebreaks", + "fire-patrols": "Fire Patrols", + "fire-suppression-team": "Fire Suppression Team", + "liberating-regenerants": "Liberating Regenerants", + "maintenance": "Maintenance", + "marking-regenerants": "Marking Regenerants", + "other-interventions": "Other Interventions", + "planting-trees": "Planting Trees", + "removal-contaminated-soil": "Removal of Contaminated Soil", + "removal-invasive-species": "Removal of Invasive Species", + "soil-improvement": "Soil Improvement", + "stop-tree-harvesting": "Stop Tree Harvesting" + }, + "missingInterventionsError": "Seleccione al menos una intervención", + "timePeriod": "Periodo de tiempo", "max300Chars": "Máximo 300 caracteres permitidos", "longTermPlanInfo": "¿Qué medidas se han adoptado para proyectar el bosque a largo plazo? ¿Cómo se financia? ¿Qué recursos se extraerán del sitio?", "backToMedia": "Volver a los medios de comunicación del proyecto", @@ -67,6 +100,9 @@ "siteStatusPlanted": "Plantado", "siteStatusBarren": "Estéril", "siteStatusReforestation": "Reforestación", + "siteStatusNotYetprotected": "Aún no protegido", + "siteStatusPartiallyprotected": "Parcialmente protegido", + "siteStatusFullyprotected": "Totalmente protegido", "siteStatus": "Estado del sitio", "selectProjectStatus": "Por favor, selecciona el estado del proyecto", "saveAndAddSite": "Guardar y añadir otro sitio", @@ -89,6 +125,8 @@ "pendingReview": "Pendiente de revisión", "submitForReview": "Presentar para su revisión", "addProject": "Añadir proyecto", + "addNewProject": "Añadir nuevo proyecto", + "conservationProject": "Proyecto de conservación", "abandonment": "Abandono", "survivalRate": "Tasa de supervivencia", "survivalRateInfo": "Porcentaje de árboles que sobreviven al primer año de la plantación", @@ -106,6 +144,7 @@ "urbanPlanting": "Plantación urbana", "otherPlanting": "Otras plantaciones", "projectType": "Tipo de proyecto", + "protectionSeasons": "Temporadas de protección", "polygonRequired": "Se requiere un polígono", "fileSizeLimit": "El archivo es mayor de 10 mb", "fileImageOnly": "El archivo debe ser imagen", @@ -116,6 +155,94 @@ "latitude": "Latitud", "longitude": "Longitud", "latitudeRequired": "Se requiere latitud", - "longitudeRequired": "Se requiere la longitud" + "longitudeRequired": "Se requiere la longitud", + "manageProject": "Gestionar proyectos", + "descriptionForManageProjects": "Muestre su trabajo de restauración para su seguimiento y para recibir donaciones.", + "manageProjects": "Gestionar proyectos", + "addConservationProjects": "Añadir proyectos de conservación", + "areaProtected": "Superficie protegida (en ha)", + "areaProtectedInfo": "Para introducir decimales, sepárelos con \" . \"", + "ecosystem": "Ecosistema", + "protectionStartedIn": "Protección Iniciada en", + "actions": "Acciones", + "activitySeasons": "Temporadas de actividad", + "addAnotherSpecies": "Añadir otra especie", + "add": "Añadir", + "forestProtectionType": "Tipo de protección forestal/Medidas", + "ecologicalBenefits": "Beneficios ecológicos", + "socialBenefits": "Prestaciones sociales", + "coBenefits": "Co-beneficios", + "benefits": "Beneficios", + "tropicalMoistForest": "Tropical Moist Forest", + "dry": "Dry", + "ecosystemType": "Seleccione el tipo de ecosistema", + "tropicalDryForests": "Tropical Dry Forests", + "tropicalConiferousForests": "Tropical Coniferous Forests", + "tropicalGrasslandsForests": "Tropical Grasslands Forests", + "temperateBroadleafForests": "Temperate Broadleaf Forests", + "temperate-coniferous-forests": "Temperate Coniferous Forests", + "temperateGrasslandsForests": "Temperate Grasslands Forests", + "mediterraneanForests": "Mediterranean Forests", + "mangroves": "Mangroves", + "deserts": "Deserts", + "floodedGrasslands": "Flooded Grasslands", + "montaneGrasslands": "Montane Grassland", + "borealForests": "Boreal Forests", + "tundra": "Tundra", + "temperateConiferousForests": "Temperate Coniferous Forests", + "ecosystemTypes": { + "tropical-moist-forests": "Tropical Moist Forests", + "tropical-dry-forests": "Tropical Dry Forests", + "tropical-coniferous-forests": "Tropical Coniferous Forests", + "tropical-grasslands-forests": "Tropical Grasslands Forests", + "temperate-broadleaf-forests": "Temperate Broadleaf Forests", + "temperate-coniferous-forests": "Temperate Coniferous Forests", + "temperate-grasslands-forests": "Temperate Grassland Forests", + "mediterranean-forests": "Mediterranean Forests", + "mangroves": "Mangroves", + "deserts": "Deserts", + "flooded-grasslands": "Flooded Grasslands", + "montane-grasslands": "Montane Grasslands", + "boreal-forests": "Boreal Forests", + "tundra": "Tundra" + }, + "unitTypeRequired": "Seleccione un tipo de unidad", + "unitType": "Tipo de unidad", + "unitTypes": { + "tree": "árbol", + "m2": "m²" + }, + "tenure": "Tenencia", + "rent": "Alquiler", + "ownershipType": "Tipo de propiedad", + "landOwnershipType": "Tipo de propiedad", + "restorationProject": "Proyecto de restauración", + "addProjetDescription": "Estás a pocos pasos de exponer tu trabajo en la plataforma Plant-for-the-Planet.", + "englishOnly": " Por favor, cree proyectos sólo en inglés.", + "important": "Importante:", + "addProjetContact": "Si necesita ayuda, póngase en contacto con nosotros en ", + "supportLink": "support@plant-for-the-planet.org", + "wrongCoordinates": "Coordenadas erróneas", + "actionInfo": "Las acciones que su organización está llevando a cabo para conservar el ecosistema.", + "mainChallengeInfo": "El mayor reto al que se enfrenta este proyecto.", + "motivationInfo": "La motivación para proteger este ecosistema concreto.", + "hectar": "hectar", + "validation": "{fieldName} no es válido", + "date": "Fecha", + "plantingDensityValidation": "Introduzca la densidad de plantación", + "maxPlantingDensityValidation": "introduzca la densidad máxima de plantación", + "onlyEnglish": "Por favor, cree/edite proyectos sólo en inglés. Plant-for-the-Planet gestiona automáticamente las traducciones de los proyectos.", + "since": "desde", + "Since": "Desde", + "and": "y", + "errorForMaxPlantingDensity": "Este valor debe ser superior a la densidad de plantación", + "managePayoutsButton": "Gestionar los pagos", + "siteNameValidation": "Introduzca el nombre del sitio", + "reviewNote": "Nota importante: Plant-for-the-Planet revisará y validará sus datos. Para continuar con el proceso de incorporación y verificación, y para aprobar su proyecto para donaciones, se deben proporcionar varios Documentos:", + "legalAccreditation": "Acreditación legal (certificado de registro/número de registro) que demuestre la condición benéfica/sin ánimo de lucro de su organización, con una antigüedad máxima de 2 años", + "taxExemption": "Documentación de exención fiscal (si procede en su país)", + "annualReport": "Último informe anual", + "financialReport": "Último informe financiero auditado", + "PlantingReport": "Informe de situación del proyecto" } } diff --git a/public/static/locales/es/maps.json b/public/static/locales/es/maps.json index e60bb93000..0bbc0d40a5 100644 --- a/public/static/locales/es/maps.json +++ b/public/static/locales/es/maps.json @@ -41,6 +41,12 @@ "daysAgo": "{days} días atrás", "today": "Hoy", "yesterday": "Ayer", - "clickForDetails": "Haga clic para más detalles" + "clickForDetails": "Haga clic para más detalles", + "treeMapper": "TreeMapper", + "showProjectList": "Mostrar lista de proyectos", + "showProjectDetails": "Mostrar detalles del proyecto", + "hideProjectList": "Ocultar lista de proyectos", + "hideProjectDetails": "Ocultar detalles del proyecto", + "countries": "Países" } } diff --git a/public/static/locales/es/me.json b/public/static/locales/es/me.json index c0e4d5dcf4..6bf2dfc37c 100644 --- a/public/static/locales/es/me.json +++ b/public/static/locales/es/me.json @@ -1,10 +1,32 @@ { "Me": { + "managePayouts": { + "menuText": "Gestionar los pagos", + "titleOverview": "Gestión de pagos - Descripción general", + "titleAddBankDetails": "Gestionar pagos - Añadir datos bancarios", + "titlePayoutSchedule": "Gestionar pagos - Programar pagos", + "titleEditBankDetails": "Gestionar pagos - Editar datos bancarios" + }, + "donationLinkTitle": "Construir enlace de donación", + "planetcash": { + "menuText": "PlanetCash", + "submenuText": "Mi PlanetCash", + "titleAccount": "PlanetCash - Cuentas", + "titleTransactions": "PlanetCash - Transacciones", + "titleCreateAccount": "PlanetCash - Crear una cuenta" + }, "treesPlanted": "Árbol plantado", "treesPlanted_plural": "Árboles plantados", + "bulkCodesTitleStep3": "Generar certificados y códigos de árbol - Emitir códigos", + "bulkCodesTitleStep2": "Generar certificados y códigos de árbol - Seleccionar proyecto", + "bulkCodesTitle": "Generar certificados y códigos de árbol - Seleccionar método", + "bulkCodes": "Certificados y códigos", "target": "Objetivo", + "editTarget": "Editar objetivo", "share": "Compartir", "registerTrees": "Registra los árboles", + "registeredTree": "Árbol registrado", + "linkedIn": "LinkedIn", "registerTreesDescription": "Registra los árboles que has plantado tú mismo, por ejemplo, en tu jardín.", "myForest": "Mi bosque", "giftToGiftee": "Regalo a {gifteeName}", @@ -42,17 +64,60 @@ "filters": "Filtros", "registeredTrees": "Árboles registrados", "embedWidget": "Insertar Widget", + "donationLink": "Crear enlace de donación", + "gift": "Regalo", + "donation": "Donación", "tree-donation": "Donación de árboles", "tree-gift": "Árbol de regalo", "tree-cash": "TreeCash", + "planet-cash": "PlanetCash", "trees": "Árboles", "amount": "Cantidad", "created": "Fecha de creación", + "paymentMethod": "Forma de pago", + "frequency": "Frecuencia", + "monthly": "Mensualmente", + "yearly": "Anualmente", + "totalDonated": "Total donado", + "firstDonation": "Fecha de la primera donación", + "donorNameRequired": "Nombre del donante Obligatorio", + "donationAmountRequired": "Cantidad de donación requerida", + "frequencyRequired": "Frecuencia requerida", + "dateRequired": "Fecha requerida", "project": "Nombre del proyecto", + "planetCashPayment": "Pago PlanetCash", "method": "Forma de pago", + "unitCost": "Coste por {unitType}", "treeCount": "Recuento de árboles", "lastUpdate": "Última actualización", "donorCertificate": "Certificado de donación", + "editDonation": "Editar donación", + "pauseDonation": "Pausa Donación", + "cancelDonation": "Cancelar donación", + "reactivateDonation": "Reactivar donación", + "resumeDonation": "Donación de currículos", + "donationName": "Nombre de la donación", + "donationAmount": "Importe de la donación", + "makeChanges": "Realizar cambios", + "cancel": "Cancelar", + "yes": "Sí", + "no": "No", + "editDonationConfirmation": "Editar donación", + "editDonationDescription": "Puede editar las siguientes opciones:", + "pauseDonationConfirmation": "Pausa Donación", + "pauseDonationDescription": "Puede volver a iniciarlo tras la pausa reiniciándolo.", + "pauseUntilResume": "Pausa hasta que reanude", + "pausedUntilResumed": "En pausa hasta que se reanude", + "pausedUntil": "En pausa hasta", + "pauseUntilDate": "Pausa hasta la fecha seleccionada", + "reactivateDonationConfirmation": "Reactivar donación", + "reactivateDonationDescription": "Su donación se reactivará y se construirá en la fecha {currentPeriodEnds}", + "cancelDonationConfirmation": "Cancelar donación", + "cancelDonationDescription": "Una vez cancelada la donación, no se puede reiniciar.", + "cancelDonationPaypalDescription": "Esta donación se cancelará inmediatamente, no se puede reiniciar.", + "cancelledOn": "Cancelado el", + "willBeCancelledOn": "Se cancelará el", + "nextOn": "Siguiente", "download": "Descargar", "donations": "Donaciones", "in-progress": "En curso", @@ -74,14 +139,143 @@ "nameForest": "El Bosque de {name}", "taxReceipt": "Recibo de impuestos", "history": "Historia", + "recurrency": "Donaciones periódicas", + "new": "Nuevo", + "beta": "Beta", + "date": "Fecha", "treemapper": "TreeMapper", "register-trees": "Registrar árboles", "manage-projects": "Administrar proyectos", + "app-payouts": "Pagos por aplicación", + "app-payout-open": "Pagos abiertos", + "app-payout-pending": "Pagos pendientes", + "app-payout-assigned": "Pagos asignados", + "app-payout-complete": "Pagos completados", + "app-payout": "Pago por aplicación", + "reference": "Referencia", + "fee": "Tasa", + "net": "NET", + "status": "Estado", "paymentDate": "Fecha de pago", "bankName": "Nombre del banco", + "accountHolder": "Titular de la cuenta", + "aba": "ABA", + "bic": "BIC", + "iban": "IBAN", + "swift": "SWIFT", + "isDefault": "Cuenta por defecto", + "bankAccountCreated": "Cuenta bancaria creada", + "bankAccountUpdated": "Cuenta bancaria actualizada", + "donation-all": "Donaciones", + "donation-canceled": "Cancelado", + "payout-all": "Pagos", + "payout-action-required": "Acción requerida", + "payout-pending": "Pendiente", + "payout-completed": "Completado", + "donorName": "Nombre del donante", + "paidAmount": "Importe pagado", + "projectGuid": "GUID del proyecto", + "totalAmount": "Importe total", + "disputeFee": "Tasa contenciosa", + "planetFee": "Tasa Planeta", + "transactionFee": "Tasa por transacción", + "transferFee": "Tasa de transferencia", + "giftComment": "Comentario (Privado)", + "giftOccasion": "Ocasión", + "open": "Abrir", + "downloads": "Descargas", + "account": "Cuenta", + "loadMore": "Más información", "setTarget": "Fijar el objetivo..", "targetSave": "Guardar", "targetErrorMessage": "El número debe ser positivo o mayor que cero", - "profile": "Perfil" + "taxDeductibleReceipt": "Recibo deducible de impuestos", + "giftCertificate": "Cheque regalo", + "downloadCodes": "Descargar códigos", + "downloadCodesGeneralError": "La descarga ha fallado. Por favor, inténtelo después de algún tiempo.", + "downloadCodesNetworkError": "No se pueden recuperar los códigos. Compruebe su red.", + "paypal-paypal": "Paypal", + "stripe-": "Stripe", + "unknown-method": "Desconocido", + "stripe-sofort": "Sofort (Stripe)", + "tree-cash-tree-cash": "TreeCash", + "planet-cash-planet-cash": "PlanetCash", + "stripe-card": "Tarjeta de crédito/débito", + "stripe-giropay": "GiroPay (Stripe)", + "action-required": "Acción requerida", + "completed": "Completado", + "donationsSubTitle": "Gestione todas sus donaciones y pagos desde un único lugar.", + "recurrencySubTitle": "Gestione todas sus Donaciones en Recurrency desde un solo lugar.", + "payments": "Pagos", + "stripe-sepa_debit": "SEPA (Stripe)", + "sepa_debit": "SEPA (Stripe)", + "offline": "Offline", + "offline-offline": "Offline", + "offline-transfer": "Offline", + "profile": "Perfil", + "projects": "Proyectos", + "settings": "Ajustes", + "editProfile": "Editar perfil", + "deleteProfile": "Borrar perfil", + "widgets": "Widgets", + "pauseNote": "Nota: Puede seleccionar una fecha posterior al final del periodo actual.", + "cancelImmediately": "Cancelar inmediatamente", + "cancelOnSelectedDate": "Seleccione la fecha de cancelación", + "conservation-donation": "Donación para conservación", + "funds-donation": "Donación", + "bouquet-donation": "Donación de ramos", + "transferDetails": "Detalles de la transferencia", + "beneficiary": "Beneficiario", + "donationNote": { + "offline-offline": "Las transferencias bancarias suelen tardar entre 1 y 5 días laborables en llegarnos. En cuanto nos llegue la transferencia, te enviaremos un correo electrónico de confirmación con tus recibos (y tu certificado).", + "stripe-sepa_debit": "Los pagos SEPA tardan entre 2 y 14 días laborables (normalmente entre 3 y 5 días). En cuanto llegue tu transferencia, te enviaremos un correo electrónico de confirmación con tus recibos (y tu certificado).", + "stripe-sofort": "Los pagos SOFORT tardan entre 2 y 14 días laborables (normalmente entre 2 y 3 días). En cuanto llegue su transferencia, le enviaremos un correo electrónico de confirmación con sus recibos (y su certificado).", + "in-dispute": "Su transferencia ha sido impugnada. Por lo general, los proveedores de pago cobran entre 7 y 15 USD en concepto de gastos de disputa. Póngase en contacto con support@plant-for-the-planet.org para obtener más información." + }, + "active": "activo", + "canceled": "cancelado", + "incomplete": "pendiente", + "incomplete_expired": "cancelado", + "past_due": "vencido", + "unpaid": "sin pagar", + "trialing": "activo", + "paused": "en pausa", + "plantLocations": "Ubicación de las plantas", + "mySpecies": "Mi especie", + "import": "Importar", + "pausingDonation": "Donación en pausa", + "cancellingDonation": "Cancelación de la donación", + "reactivatingDonation": "Reactivación de la donación", + "editingDonation": "Donación de edición", + "noteToWait": "Nota: La actualización de la donación periódica tardará entre 5 y 10 minutos", + "apiKey": "API Key", + "apiKeyMessage1": "API Key es como una contraseña digital que le permite actuar como su perfil en cualquier aplicación. También permite a las aplicaciones donar en su nombre, utilizar PlanetCash y ver las transacciones.", + "apiKeyMessage2": "Una vez que genere una clave de API, requeriremos una autenticación de dos factores para su inicio de sesión. Podrás configurarlo la próxima vez que inicies sesión.", + "apiKeyMessage3": "La regeneración de una Clave API invalidará inmediatamente su Clave API existente.", + "regenerateKey": "Regenerar Key", + "giftFund": "GiftFund", + "dataExplorer": "Data Explorer", + "switchUser": "Suplantar la identidad de un usuario", + "switchUserMessage": "Introduzca el correo electrónico del usuario al que desea cambiar en el campo inferior.", + "profileEmail": "Perfil Correo electrónico", + "supportPin": "Support Pin", + "alphaNumeric": "Introduzca un código alfanumérico de 4 dígitos", + "switch": "Suplantar", + "targetUser": "Estás suplantando a {impersonatedEmail}", + "exitImpersonation": "Salir de suplantación", + "enterTheEmail": "Introduzca el correo electrónico del usuario de destino", + "enterSupportPin": "Introduzca el Support Pin del usuario de destino", + "invalidEmail": "Introduzca una dirección de correo electrónico válida", + "wrongEntered": "El ID de correo electrónico o el Support Pin son incorrectos", + "donatedTrees": "Árboles donados", + "resetPin": "Clavija de reinicio", + "donate": "Donar", + "donated": "Donado", + "conserved": "Conservado", + "restored": "Restaurado", + "membershipCtaButtonText": "ÚNETE AHORA", + "membershipCtaCopy": "Apóyenos HACIÉNDOSE SOCIO", + "shareUrl": "Compartir URL", + "treesOfTrees": "{count1} de {count2}" } } diff --git a/public/static/locales/es/planetcash.json b/public/static/locales/es/planetcash.json index ffcd4415b0..e7739645a1 100644 --- a/public/static/locales/es/planetcash.json +++ b/public/static/locales/es/planetcash.json @@ -1 +1,26 @@ -{ } +{ + "Planetcash": { + "accountTitleText": "{currency} Cuenta PlanetCash ({country})", + "createAccountTitleText": "Registrarse en PlanetCash", + "addBalanceButton": "Añadir saldo", + "labelAccountHolder": "Titular de la cuenta", + "labelBalance": "Saldo", + "labelCreditLimit": "Límite", + "deactivateAccountButton": "Desactivar", + "activateAccountButton": "Activar", + "accountInactiveHelpText": "Esta cuenta está inactiva y no puede utilizarse para realizar contribuciones. Para activar esta cuenta, póngase en contacto con support@plant-for-the-planet.org.", + "noAccountsText": "Parece que aún no has creado una cuenta PlanetCash.", + "createPlanetCashButton": "Crear una cuenta Planet Cash", + "accountQuotaReachedText": "No puede crear más cuentas porque ha agotado su cuota de cuentas.", + "accountCreationSuccess": "Su cuenta PlanetCash ha sido creada con éxito", + "labelCountry": "País", + "planetCashTerms1": "Al hacer clic en \"Crear cuenta PlanetCash\", acepto los Términos y Condiciones de Plant-for-the-Planet y PlanetCash.", + "planetCashTerms2": "Entiendo que las donaciones PlanetCash no son reembolsables, y que los pagos no asignados serán autoasignados a proyectos en la Plataforma después de seis meses de un Pago.", + "planetCashTerms3": "Las donaciones a la Cuenta PlanetCash por motivos personales son generalmente deducibles de impuestos en el país seleccionado en este paso. El uso comercial de PlanetCash puede no ser elegible para deducciones fiscales. Si tiene alguna pregunta, póngase en contacto con support@plant-for-the-planet.org o con su asesor fiscal.", + "accountError": { + "active_account_exists": "Ya existe una cuenta activa. Desactive esa cuenta antes de activar otra.", + "duplicate_account": "Ya ha creado una cuenta para {country}", + "default": "Algo ha ido mal al crear una cuenta. Por favor, inténtelo después de un rato." + } + } +} diff --git a/public/static/locales/es/profile.json b/public/static/locales/es/profile.json index 69a955e5eb..94e4b63cb6 100644 --- a/public/static/locales/es/profile.json +++ b/public/static/locales/es/profile.json @@ -1,13 +1,49 @@ { "Profile": { + "myProfile": { + "memberSince": "Miembro desde {date}", + "userDescription": "{bio}" + }, + "feature": { + "redeem": "Canjear", + "registerTree": "Árbol de registro", + "share": "Compartir" + }, "myPublicProfile": { - "support": "Apoyo" + "support": "Apoyo", + "link": "Enlace" }, "myForestMap": { - "plantedTree": "{count, plural, =0 {Árboles} =1 {Árbol} other {Árboles}}" + "plantedTree": "{count, plural, =1 {# Árbol} other {# Árboles}}", + "treesPlanted": "Árboles plantados", + "restored": "Restaurado", + "registered": "Registrado", + "conservation": "Conservación", + "projects": "Proyectos", + "countries": "Países", + "donations": "Donaciones", + "area": "{areaConserved} m²", + "zoomIn": "ampliar para más detalles", + "totalDonation": "{count, plural, =1 {# donación} other {# donaciones}} ", + "totalProject": "a {count, plural, =1 {# proyecto} other {# proyectos}}", + "tpoName": "Por {tpo}" + }, + "myTreeCounter": { + "treesPlanted": "Árboles plantados", + "editTarget": "Editar objetivo" }, "myContributions": { - "receivedFrom": "Recibido de {name}" + "treesPlantedAndAreaRestored": "Árboles plantados y zonas restauradas", + "treeRegistered": "{count, plural, =1 {# Árbol registrado} other {# Árboles registrados}}", + "receivedFrom": "Recibido de {name}", + "loadMoreContribution": "Cargar más contribuciones", + "loadingContribution": "Cargando Contribution....", + "donate": "Donar", + "donateAgain": "Donar de nuevo", + "conservedSmall": "conservado", + "restoredSmall": "restaurado", + "areaType": "{areaConserved} m² {type}", + "areaConserved": "Zonas conservadas" } } } diff --git a/public/static/locales/es/redeem.json b/public/static/locales/es/redeem.json index 4b9991d9a4..2be5127c10 100644 --- a/public/static/locales/es/redeem.json +++ b/public/static/locales/es/redeem.json @@ -1,11 +1,21 @@ { "Redeem": { + "myPlantedTreesByOrg": "Mi árbol {formattedNumber} será plantado por {tpoName}", + "myPlantedTreesByOrg_plural": "Mis árboles {formattedNumber} serán plantados por {tpoName}", "congratulations": "¡Felicidades!", "addToMyTrees": "Añadir a mis árboles", "validateCode": "Validar el código", "enterRedeemCode": "Por favor, introduzca un código para redimir", "validating": "Validación", "invalidType": "Tipo inválido, por favor, compruebe el enlace de nuevo", - "redeemDescription": "Canjea tuVale de árboles y otros códigos." + "redeeming": "Redentor:", + "invalidCode": "Este código no es válido.", + "alreadyRedeemed": "El código ya ha sido canjeado", + "redeemCode": "Canjear código", + "redeemingCode": "Canjear código...", + "redeem": "Canjear", + "redeemDescription": "Canjea tuVale de árboles y otros códigos.", + "successfullyRedeemed": "Canjeado con éxito", + "redeemAnotherCode": "Canjear otro código" } } diff --git a/public/static/locales/es/tenants.json b/public/static/locales/es/tenants.json index 921b72b50b..62a6e20a5b 100644 --- a/public/static/locales/es/tenants.json +++ b/public/static/locales/es/tenants.json @@ -44,6 +44,10 @@ "3pleset": { "title": "Alife & Kickin ❤️ Bäume", "description": "

#WEAREALIFE ¿Schreibfehler? No, ¡no!
Con el lema ELIGE LA VIDA ya estás en marcha.
Porque a partir de ahora podrás, con Alife & Kickin y la organización Plant-for-the-Planet Bäume, plantar y vivir. Acompáñanos en el camino de Alife & Kickin. ¿Cómo?
En los últimos dos meses, la organización Plant-for-the-Planet se ha hecho cargo de la venta de plantas. Nuestro objetivo: 50.000 plantas para un desarrollo sostenible. ¿Cómo?
En el mapa se puede ver cómo se realiza nuestro Alife & Kickin Wald. Ahora busca, comparte y disfruta más de la vida. ELEGIR LA VIDA.
UNA ORDEN UN ÁRBOL
#WEAREALIFE

" + }, + "weareams": { + "title": "AMS ❤️ Árboles", + "description": "A partir de 2021, AMS se une a la TrillionTreeCampaign y, junto con Plant-for-the-Planet, empezamos a devolver algo a la naturaleza. Aprovecharemos las oportunidades que se nos presenten para promover la sostenibilidad en nuestra cadena de suministro y a través de nuestras relaciones con clientes y socios comerciales. ¡Únete a nosotros y #StopTalkingStartPlanting!" } } } diff --git a/public/static/locales/es/treemapper.json b/public/static/locales/es/treemapper.json index ffcd4415b0..09ec5ec307 100644 --- a/public/static/locales/es/treemapper.json +++ b/public/static/locales/es/treemapper.json @@ -1 +1,77 @@ -{ } +{ + "Treemapper": { + "trees": "Árboles", + "tree": "Árbol", + "on": "en", + "partial": "Parcial", + "complete": "Complete", + "on-site": "In situ", + "off-site": "Fuera de las instalaciones", + "captureMode": "Modo Captura", + "captureStatus": "Estado de la captura", + "coordinates": "Coordenadas", + "guid": "GUID", + "height": "Altura", + "invalidHeight": "Altura no válida", + "width": "Anchura", + "plantDate": "Planta Fecha", + "registrationDate": "Fecha de inscripción", + "plantProject": "Proyecto de planta", + "species": "Especie", + "sampleTrees": "Ejemplos de árboles", + "loadMore": "Más información", + "treeMapper": "TreeMapper", + "cm": "cm", + "m": "m", + "plantingLocation": "Lugar de plantación", + "reviewAndSubmit": "Revisar y enviar", + "sampleTree": "Árbol de muestra #{number}", + "tag": "Etiqueta", + "import": "Importar", + "editor": "Editor", + "draw": "Dibujar", + "addAnotherSpecies": "Añadir otra especie", + "continue": "Continúe en", + "downloadCSVTemplate": "Descargar plantilla CSV", + "treeTag": "Etiqueta de árbol", + "diameter": "Diámetro", + "invalidDiameter": "Diámetro no válido", + "latitude": "Latitud", + "invalidLatitude": "Latitud no válida", + "longitude": "Longitud", + "invalidLongitude": "Longitud no válida", + "addAnotherSampleTree": "Añadir otro árbol de muestras", + "skip": "Saltar", + "treeSpecies": "Especies arbóreas", + "plantingDate": "Fecha de plantación", + "summary": "Resumen", + "reviewSubmitDescription": "Revise los datos que acaba de cargar y envíelos a TreeMapper.", + "submittedSuccess": "Enviado con éxito", + "submittedSuccessDescription": "Sus árboles han sido enviados a TreeMapper. Puede verlos en las ubicaciones de sus plantas o en la aplicación TreeMapper.", + "myPlantLocations": "Mis plantas", + "submitted": "Enviado", + "projectRequired": "Proyecto requerido", + "geoJsonError": "Formato GeoJSON/KML no compatible", + "atLeastOneSpeciesRequired": "Se requiere al menos una especie", + "treesRequired": "Recuento de árboles necesario", + "count": "Cuenta", + "addSampleTree": "Añadir árbol de muestra", + "uploadFile": "Cargar archivo", + "fileFormatKML": "Fichero (geojson/kml)", + "importData": "Importar datos", + "importExplanation": "Aquí puede importar datos de TreeMapper, que serán marcados como \"externos\" (no \"fuera del sitio\", por favor utilice la aplicación para eso). Para las coordenadas de los sitios de plantación aceptamos *.kml o geojson, para (opcional) árboles de muestra *.csv (la plantilla se proporciona en el paso 2).", + "downloadExplanation": "Descargue la siguiente plantilla CSV para importar datos de árboles de muestra en el formato designado. Utilice un editor sencillo para editar el archivo. La segunda y tercera línea son detalles de formato y un ejemplo y deben suprimirse.", + "importCSV": "Importar CSV", + "fileFormatCSV": "Archivo (csv)", + "aliases": "Alias", + "aliasesValidation": "Introduzca los alias", + "speciesValidation": "Introduzca una especie", + "external": "Exterior", + "date": "Fecha", + "datePlantedRequired": "Fecha de plantación requerida", + "measurements": "Medidas", + "ignoredColumnsWarning": "Se han ignorado las columnas adicionales", + "back": "Volver", + "submit": "Enviar" + } +} diff --git a/public/static/locales/es/treemapperAnalytics.json b/public/static/locales/es/treemapperAnalytics.json index ffcd4415b0..e8b8c8dee3 100644 --- a/public/static/locales/es/treemapperAnalytics.json +++ b/public/static/locales/es/treemapperAnalytics.json @@ -1 +1,59 @@ -{ } +{ + "TreemapperAnalytics": { + "title": "Explorador de datos", + "from": "En", + "to": "A", + "clearFilter": "Limpiar filtro", + "days": "Días", + "months": "Meses", + "weeks": "Semanas", + "years": "Años", + "treesPlanted": "Árboles plantados", + "speciesPlanted": "Especies plantadas", + "calenderWeek": "CW", + "project": "Proyecto", + "export": "Exportar", + "exportData": "Exportar datos", + "jan": "Jan", + "feb": "Feb", + "mar": "Mar", + "apr": "Abr", + "may": "Mayo", + "jun": "Jun", + "jul": "Jul", + "aug": "Agosto", + "sep": "Sep", + "oct": "Oct", + "nov": "Nov", + "dec": "Dec", + "exportColumnHeaders": { + "hid": "ID legible para una ubicación de planta", + "plantDate": "Fecha de plantación", + "species": "Nombre de la especie plantada", + "geometry": "GeoJson Coordenada del polígono", + "type": "Tipo de ubicación de la planta (única, múltiple)", + "treesPlanted": "Total de árboles en una ubicación", + "metadata": "Metadatos sobre la ubicación de la planta", + "plantProjectId": "ID de backend del proyecto del que forma parte la ubicación de la planta", + "sampleTreeCount": "Recuento de árboles muestra presentes en la ubicación de la planta", + "captureStatus": "Captura Estado de la ubicación de la planta.", + "created": "Fecha de creación" + }, + "readme": "READ ME", + "interventionData": "Datos de la intervención", + "monitoringPlotsData": "Datos de las parcelas de seguimiento", + "dataIntervals": "Intervalos de datos", + "errors": { + "emptyExportData": "No hay datos disponibles para el intervalo especificado. Pruebe con otro intervalo de tiempo o compruebe si se han registrado los datos de ese periodo." + }, + "timeFrame": "Duración", + "scientificName": "Nombre científico", + "type": "Tipo", + "interventions": "Intervenciones", + "monitoringPlots": "Seguimiento de parcelas (próximamente...)", + "trillion": "t", + "billion": "b", + "million": "m", + "thousand": "k" + } +} diff --git a/public/static/locales/fr/bulkCodes.json b/public/static/locales/fr/bulkCodes.json index ffcd4415b0..374aeb79b4 100644 --- a/public/static/locales/fr/bulkCodes.json +++ b/public/static/locales/fr/bulkCodes.json @@ -1 +1,117 @@ -{ } +{ + "BulkCodes": { + "bulkCodesTitle": "Délivrer des certificats et des codes d'arbres", + "partnerSignupInfo": "L'utilisation de cette fonction par les entreprises est soumise à un partenariat avec Plant-for-the-Planet. Veuillez contacter partner@plant-for-the-planet.org pour plus de détails.", + "bulkCodesDescription1": "PlanetCash vous permet de générer des milliers de codes en une seule opération. La génération de certificats d'arbre augmentera votre nombre d'arbres.", + "bulkCodesDescription2": "Vous pouvez utiliser cette fonction pour créer des codes pour des certificats personnalisés, des cartes-cadeaux, des dons au nom des utilisateurs et des codes remboursables que vous pouvez associer à vos produits.", + "tabCreationMethod": "Méthode de création", + "tabSelectProject": "Sélectionner un projet", + "tabIssueCodes": "Codes d'émission", + "issueCodes": "Codes d'émission", + "issuingCodes": "Délivrer des codes...", + "importMethodText": { + "title": "Créer des certificats d'arbre personnalisés", + "subtitle": "Utilisez cette méthode (pour un maximum de 1000 destinataires par transaction) si l'un des critères suivants correspond à votre cas d'utilisation :", + "details": { + "line1": "Je souhaite fournir le nom ou l'e-mail du destinataire pour chaque code.", + "line2": "Je souhaite que Plant-for-the-Planet envoie automatiquement un courrier électronique aux destinataires une fois qu'il a été généré (facultatif).", + "line3": "Je souhaite émettre des codes pour différents nombres d'arbres." + } + }, + "genericMethodText": { + "title": "Créer des codes génériques", + "subtitle": "Utilisez cette méthode si les critères suivants correspondent à votre cas d'utilisation :", + "details": { + "line1": "Tous les codes auront la même valeur.", + "line2": "Je souhaite générer un certain nombre de codes pour des destinataires arbitraires.", + "line3": "Les noms et les adresses électroniques ne peuvent pas être associés au code." + } + }, + "projectName": "Nom du projet", + "costPerUnit": "Coût par unité", + "labelComment": "Commentaire [Privé]", + "unitOfMeasurement": "Unité de mesure", + "units": { + "ha": "ha", + "tree": "arbre", + "m2": "m²" + }, + "unitsPerCode": "Unités par code*", + "totalNumberOfCodes": "Nombre total de codes*", + "occasion": "Occasion", + "notificationLanguage": "Langue de notification", + "total": "Total", + "chargeConsentText": "En cliquant sur Issue Codes, vous acceptez que le montant susmentionné soit débité de votre compte.", + "invalidEmailWarningText": "Veuillez vous assurer que l'adresse électronique du destinataire est valide. L'utilisation d'e-mails factices ou non valides entraînera la suspension du compte conformément aux conditions générales de la plate-forme.", + "projectRequired": "Aucun projet n'est sélectionné.", + "unitsPerCodeRequired": "Chaque code doit contenir au moins une unité.", + "codeQuantityRequired": "Vous devez créer au moins un code.", + "unitsPerCodeInvalidRange": "Un code peut contenir un maximum de 1000 unités.", + "codeQuantityInvalidRange": "Un maximum de 5000 codes peut être créé.", + "featureAvailability": "Cette fonction n'est disponible que pour les projets de partenaires.", + "planetCashDisabled": "PlanetCash n'est pas activé. Veuillez activer PlanetCash pour utiliser cette fonction.", + "insufficientPCashBalance": "Solde insuffisant.", + "addBalanceGeneric": "Cliquez ici pour ajouter des fonds.", + "instructionsUploadCSV": { + "empty": "Glisser-déposer / cliquer pour sélectionner un fichier .xslx / .csv à télécharger.", + "error": "Veuillez vérifier les problèmes et faire glisser le fichier .xslx / .csv ici pour le télécharger.", + "processing": "Veuillez patienter pendant que nous analysons votre dossier...", + "success": "Continuer ou faire glisser le fichier .xlsx ou .csv ici pour remplacer le fichier actuel." + }, + "statusUploadCSV": { + "error": "Erreur", + "success": "Analyse du fichier terminée" + }, + "errorUploadCSV": { + "fileInvalidType": "Seuls les fichiers .csv et .xslx sont autorisés.", + "tooManyFiles": "Veuillez ne télécharger qu'un seul fichier.", + "fileTooSmall": "Le fichier téléchargé semble être vide.", + "fileTooLarge": "Le fichier téléchargé ne doit pas dépasser 5 Mo.", + "missingColumns": "Le fichier téléchargé ne contient pas les colonnes suivantes : ", + "noRecipientData": "Aucune donnée sur les destinataires n'a été trouvée.", + "tooManyRecipients": "Un maximum de 1000 destinataires peut être traité en une seule transaction.", + "unitsNotProvided": "Les unités sont manquantes/invalides pour certains bénéficiaires.", + "notifyNotPossible": "L'adresse électronique et le nom manquent pour certains destinataires à notifier.", + "instructionRowError": "Une erreur s'est produite sur la première ligne. Veuillez vérifier si vous avez supprimé les instructions ou s'il y a des données supplémentaires.", + "invalidEmails": "recipient_email contient des e-mails factices/invalides sur les lignes suivantes : {rowList}. Veuillez supprimer les courriels non valides ou ajouter des courriels valides.", + "generalError": "Un problème s'est produit. Veuillez réessayer après un certain temps." + }, + "errorAddRecipient": { + "unitsNotProvided": "Obligatoire", + "requiredForNotifications": "Obligatoire (pour les destinataires du courrier électronique)", + "emailInvalid": "Courriel non valide" + }, + "successUploadCSV": { + "ignoredColumns": "Les colonnes supplémentaires ont été ignorées" + }, + "importInstructions": "Veuillez consulter la documentation ici, télécharger le modèle Excel ici, et le modèle CSV ici.", + "tableHeaders": { + "recipient_name": "Nom du bénéficiaire", + "recipient_email": "Courriel du destinataire", + "recipient_notify": "Envoyer un courriel ?", + "units": "Unités", + "recipient_message": "Message" + }, + "tableHeaderHelpText": { + "recipient_name": "Facultatif. Nom du destinataire, figurant sur le certificat et, en cas d'acceptation, dans le courrier envoyé au destinataire. Obligatoire si vous souhaitez envoyer des courriers électroniques.", + "recipient_email": "Facultatif. Requis pour envoyer le certificat au destinataire par courrier électronique.", + "recipient_notify": "Optionnel. Sélectionnez Oui si vous souhaitez que Plant-for-the-Planet informe automatiquement le destinataire par courrier électronique.", + "units": "Obligatoire. Nombre d'arbres remis au bénéficiaire, par exemple 5 pour 5 arbres", + "recipient_message": "Facultatif. Message destiné au destinataire qui est inclus dans le courrier électronique si le mot \"notify\" (notifier) a la valeur \"yes\" (oui). Un message par défaut sera envoyé s'il n'est pas fourni." + }, + "donationSuccess": "Votre don a été effectué avec succès. Nous vous redirigeons vers les détails de votre don sous peu...", + "donationError": { + "planet_cash_insufficient_credit": "Crédit disponible = {availableBalance} Veuillez charger le solde de votre compte PlanetCash pour effectuer ce don.", + "default": "Un problème s'est produit. Veuillez réessayer après un certain temps.", + "planet_cash_payment_failure": "La transaction a échoué. {reason}", + "planet_cash_invalid_project": "Vous ne pouvez pas faire de don au projet sélectionné." + }, + "titleAddRecipientButton": "Ajouter un destinataire au tableau", + "notifyRecipientOptions": { + "yes": "Oui", + "no": "Non" + }, + "fileUploadWarning": "Cette opération supprimera vos données de destinataire existantes. Voulez-vous continuer ?", + "unsavedDataWarning": "Certaines données du destinataire ne sont pas sauvegardées. Souhaitez-vous continuer ? Les données non sauvegardées seront perdues" + } +} diff --git a/public/static/locales/fr/common.json b/public/static/locales/fr/common.json index 2e65d9e8d2..cfa00123e8 100644 --- a/public/static/locales/fr/common.json +++ b/public/static/locales/fr/common.json @@ -1,6 +1,7 @@ { "Common": { - "tree": "{count, plural, =0 {Arbres} =1 {Arbre} other {Arbres}}", + "tree": "{count, plural, =1 {Arbre} other {Arbres}}", + "m2": "m²", "by": "Par {tpoName}", "to_project_by_tpo": "Au {projectName} par {tpoName}", "for": "pour", @@ -77,7 +78,59 @@ "logout": "Se déconnecter", "featured": "Recommandé", "treeMapper": "TreeMapper", + "overview": "Vue d'ensemble", + "childrenAndYouth": "Enfants et jeunes", + "trillionTrees": "Trillion d'arbres", + "yucatan": "Restauration du Yucatán", + "partners": "Partenaires", + "changeChocolate": "Le chocolat à changer", + "stopTalkingStartPlanting": "Cessez de parler. Commencez à planter.", "underMaintenance": "En cours de maintenance", - "reviewInfo": "Le projet a fait l'objet d'une inspection sur le terrain de plusieurs jours au cours du <2>mois et répond à nos <5>normes." + "forbidden": "Vous n'êtes pas autorisé à consulter cette page !", + "connectionError": "Impossible d'atteindre le serveur. Veuillez vérifier votre connexion internet.", + "validationFailed": "Échec de la validation !", + "add": "Ajouter", + "modalTitle": "Annuler tous les abonnements pour continuer", + "modalSubtitle": "Veuillez d'abord résilier vos abonnements", + "deleteCondition": "Avant de poursuivre, assurez-vous d'avoir annulé tous les abonnements.", + "showSubscriptions": "Afficher mes abonnements", + "notFound": "Ressource non trouvée", + "tooManyRequest": "Trop de demandes. Veuillez patienter et réessayer plus tard ou contacter l'administrateur du système pour obtenir de l'aide.", + "unauthorized": "Non autorisé", + "validationError": "Erreur de validation", + "internalServerError": "Erreur de serveur interne - Veuillez réessayer plus tard !", + "serviceUnavailable": "L'application fait l'objet d'une maintenance, veuillez consulter status.plant-for-the-planet.org pour plus de détails", + "account_duplicate": "Le compte existe déjà", + "line_item_amount_deviation": "Montant Écart", + "line_item_amount_invalid": "Montant non valide", + "line_item_amount_prohibited": "Montant interdit", + "idempotency_key_missing": "Clé d'idempotence manquante dans l'en-tête", + "line_item_invalid_donor_data": "Données du donneur invalides", + "line_item_invalid_planet_cash_account": "Compte PlanetCash invalide", + "line_item_invalid_project": "Projet invalide", + "line_item_missing_amount": "Montant manquant", + "line_item_missing_currency": "Monnaie manquante", + "line_item_missing_quantity": "Quantité manquante", + "line_item_project_not_allowing_donations": "Le projet n'autorise pas les dons", + "line_item_quantity_prohibited": "Quantité interdite", + "generic_error": "Un problème s'est produit. Veuillez vérifier votre connexion internet ou réessayer plus tard.", + "missing_profile": "Profil manquant", + "some_error": "Quelque chose n'a pas fonctionné", + "planet_cash_payment_failure": "Défaut de paiement", + "planet_cash_insufficient_credit": "Crédit insuffisant", + "planet_cash_invalid_project": "Projet non valide", + "active_account_exists": "Un compte PlanetCash actif existe déjà", + "duplicate_account": "Le compte existe déjà", + "token_expired": "Token expiré. Veuillez vous connecter à nouveau", + "project_not_available": "Les détails du projet ne sont pas disponibles pour l'instant", + "topProject": "Projet de premier plan", + "viewReport": "Voir le rapport", + "reviewInfo": "Le projet a fait l'objet d'une inspection sur le terrain de plusieurs jours au cours du {reviewMonth} et répond à nos normes.", + "standardsLink": "https://www.plant-for-the-planet.org/standards/", + "project": "Projet", + "top_project_standards_fulfilled": "L'inspection du projet a révélé que ce projet répondait à au moins 12 des 19 normes Top Project .", + "disabledDonateButtonText": "Le projet n'accepte pas de dons pour le moment. Cela peut s'expliquer par le fait qu'il est entièrement financé, qu'il n'a pas encore été examiné ou qu'il ne répond pas actuellement à toutes nos normes de projet, ou encore qu'il choisit d'utiliser la plateforme exclusivement pour ses outils de transparence.", + "notDonatable": "Pas de don", + "salesforceDisabledDonateButtonText": "Le projet n'accepte pas de dons pour le moment." } } diff --git a/public/static/locales/fr/country.json b/public/static/locales/fr/country.json index 2962f2df35..908ac4b055 100644 --- a/public/static/locales/fr/country.json +++ b/public/static/locales/fr/country.json @@ -1,5 +1,6 @@ { "Country": { + "auto": "Sélection automatique", "ac": "L'île de l'Ascension", "af": "Afghanistan", "ax": "Îles Åland", @@ -243,7 +244,7 @@ "ug": "Ouganda", "ua": "Ukraine", "ae": "Émirats Arabes Unis", - "gb": "Royaume-Uni de Grande-Bretagne et d'Irlande du Nord", + "gb": "UK", "un": "Nations Unies", "us": "États-Unis d'Amérique", "um": "Îles mineures éloignées des États-Unis", diff --git a/public/static/locales/fr/donate.json b/public/static/locales/fr/donate.json index f865023c93..1ad02afce2 100644 --- a/public/static/locales/fr/donate.json +++ b/public/static/locales/fr/donate.json @@ -6,6 +6,7 @@ "yourTreesPlantedByOnLocation_plural": "Vos {treeCount} arbres seront plantés par {projectName} à {location}.", "myTreesPlantedByOnLocation": "Mes {treeCount} arbres sont plantés à {location}.", "myTreesPlantedByOnLocation_plural": "Mes {treeCount} arbres sont plantés à {location}.", + "projects": "Projets", "topProjects": "Principaux projets", "allCountProjects": "Tous {projectCount} Projets", "searchProjects": "Recherche de projets", @@ -67,7 +68,6 @@ "thisDonationSupports": "Ce don soutient", "plantTreesWith": "Planter des arbres avec", "textToShare": "Rejoignez {name} et des milliers d'autres pour planter un billion d'arbres pour lutter contre la crise climatique ! #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "thankyouHeaderText": "Nous sommes sur la voie d'une \n

Trillion d'arbres

", "shareTextTitle": "Arrêtez de parler. Commencer à planter", "textToShareLinkedin": "Rejoignez {name} et des milliers d'autres pour planter un mille milliards d'arbres afin de lutter contre la crise climatique", "textToShareForMe": "Rejoignez-moi ainsi que des milliers d'autres personnes pour planter mille milliards d'arbres et lutter contre la crise climatique", @@ -85,7 +85,6 @@ "payWithGiroPay": "Payer avec GiroPay", "payWithSofort": "Payer avec SOFORT", "donationFailed": "Echec du don", - "donationFailedMessage": "Un problème est survenu lors de votre paiement. Si vous continuez à avoir des problèmes, veuillez nous contacter à l'adresse suivante : support@plant-for-the-planet.org", "donationPending": "Compléter votre don", "donationPendingMessage": "Nous attendons actuellement la confirmation de votre banque. Cela pourrait prendre un certain temps, alors n'hésitez pas à fermer cette page. Nous vous enverrons sous peu votre reçu par courrier électronique.", "sepaMessage": "En fournissant votre IBAN et en confirmant ce paiement, vous autorisez Plant-for-the-Planet and Stripe, notre fournisseur de services de paiement, à envoyer des instructions à votre banque pour débiter votre compte. Vous avez droit à un remboursement de votre banque selon les termes et conditions de votre accord avec votre banque. Si vous avez des problèmes concernant votre don, veuillez nous envoyer un courriel à support@plant-for-the-planet.org", @@ -110,6 +109,7 @@ "type": "Type", "projectType": "Type de projet", "restoration": "Restauration", - "filters": "Filtres" + "filters": "Filtres", + "perM2": "par m²" } } diff --git a/public/static/locales/fr/donationLink.json b/public/static/locales/fr/donationLink.json index ffcd4415b0..588b88c9f5 100644 --- a/public/static/locales/fr/donationLink.json +++ b/public/static/locales/fr/donationLink.json @@ -1 +1,25 @@ -{ } +{ + "DonationLink": { + "donationLinkTitle": "Créez votre lien de don", + "donationLinkDescription": "Créez le lien de don en fonction de vos besoins, afin d'offrir à vos donateurs une expérience agréable. Utilisez l'aperçu pour voir comment fonctionnera le résultat final.", + "qrCodeDiscription": "Au lieu d'un lien, vous pouvez également fournir le code QR pour accéder au projet souhaité.", + "labelCountry": "Pays", + "labelLanguages": "Langue", + "countryLanguageTitle": "Définir le pays et la langue", + "projectTitle": "Définissez votre projet", + "treeCounterTitle": "Soutenir mon TreeCounter", + "testingTitle": "Mode de test", + "urlTitle": "L'URL de votre lien de don", + "qrCodeTitle": "Votre lien de don QR-Code", + "languages": "Langues", + "preview": "Avant-première", + "copy": "Copie", + "treeCounterSubtitle": "Les dons d'arbres via ce lien soutiennent directement mon profil", + "testingModeSubtitle1": "Pour tester, utilisez le lien qui s'affiche maintenant. Il s'agit d'un test uniquement, pour que le lien correct soit partagé, vous devez désactiver le mode test.", + "testingModeSubtitle2": "Vous pouvez tester le flux de dons en utilisant des cartes à l'adresse suivante", + "linkAndQRCodeUpdatedMessage": "Le lien et le code QR ont été mis à jour", + "treeCounterPrivateAccountSubtitle": "Pour soutenir votre profil, vous devez le rendre public dans les paramètres du compte.", + "automaticSelection": "Sélection automatique", + "qrCodeFileName": "Lien de donation-Code QR" + } +} diff --git a/public/static/locales/fr/editProfile.json b/public/static/locales/fr/editProfile.json index 066f2100a0..575581550a 100644 --- a/public/static/locales/fr/editProfile.json +++ b/public/static/locales/fr/editProfile.json @@ -22,16 +22,41 @@ "accountPrivacyChangeText": "Pour créer un widget de profil, vous devez avoir un compte public. En cliquant sur Continuer, vous changez vos paramètres de confidentialité en public.", "continue": "Continuer", "cancel": "Annuler", + "termAndCondition": "J'accepte les conditions générales de la plateforme Plant-for-the-Planet", + "termAndConditionError": "Veuillez accepter les conditions générales", "fieldLabels": { "profileType": "Je suis un", + "firstName": "Prénom", + "lastName": "Nom de famille", "name": "Nom de {type}", + "email": "Courriel", + "address": "Adresse", + "city": "Ville", + "zipCode": "Code postal", + "country": "Pays", + "bio": "Description du profil", "website": "Site web", "privateAccount": "Compte privé", "subscribe": "S'abonner aux actualités par email" }, "validationErrors": { + "maxChars": "Doit être {max} caractères ou moins", + "firstNameRequired": "Le champ Prénom est obligatoire", + "firstNameInvalid": "Le prénom n'est pas valide. Il ne peut pas commencer par un caractère spécial, et seuls ces caractères spéciaux sont autorisés : espace ' . -", + "lastNameRequired": "Le champ Nom de famille est obligatoire", + "lastNameInvalid": "Le nom de famille n'est pas valide. Il ne peut pas commencer par un caractère spécial, et seuls ces caractères spéciaux sont autorisés : espace ' -", + "emailRequired": "L'adresse électronique est requise", "nameRequired": "Saisir un nom", - "websiteInvalid": "Veuillez entrer une URL de site web valide" + "nameInvalid": "Le nom n'est pas valide. Seuls les caractères spéciaux suivants sont autorisés : espace . , ' & ( ) ! -", + "addressRequired": "L'adresse est obligatoire", + "addressInvalid": "L'adresse n'est pas valide. Seuls les caractères spéciaux suivants sont autorisés : espace . , # - /", + "cityRequired": "La ville est requise", + "cityInvalid": "La ville n'est pas valide. Seules les lettres et les caractères spéciaux suivants sont autorisés : espace . , ( ) -", + "zipCodeRequired": "Le code postal est requis", + "zipCodeInvalid": "Le code postal n'est pas valide", + "websiteInvalid": "Veuillez entrer une URL de site web valide", + "countryRequired": "Le pays est requis", + "companyRequired": "Le nom de l'entreprise est obligatoire" } } } diff --git a/public/static/locales/fr/giftfunds.json b/public/static/locales/fr/giftfunds.json index ffcd4415b0..1eb8ac7467 100644 --- a/public/static/locales/fr/giftfunds.json +++ b/public/static/locales/fr/giftfunds.json @@ -1 +1,9 @@ -{ } +{ + "Giftfunds": { + "title": "GiftFund", + "description1": "Si vous voyez cette page, c'est qu'il vous reste du solde dans votre GiftFund pour votre compte PlanetCash actif. Vérifiez les informations ci-dessous.", + "description2": "Pour toute question, veuillez contacter votre Key Account Manager.", + "project": "Projet", + "units": "Unités disponibles" + } +} diff --git a/public/static/locales/fr/managePayouts.json b/public/static/locales/fr/managePayouts.json index ffcd4415b0..c2eab95217 100644 --- a/public/static/locales/fr/managePayouts.json +++ b/public/static/locales/fr/managePayouts.json @@ -1 +1,76 @@ -{ } +{ + "ManagePayouts": { + "title": "Gérer les paiements", + "description": "Tenir à jour les informations relatives aux paiements (calendrier, coordonnées bancaires, etc.) afin de faciliter les paiements", + "tabPayoutSchedule": "Calendrier des paiements", + "tabAddBankDetails": "Ajouter les coordonnées bancaires", + "tabOverview": "Vue d'ensemble", + "payoutInformation1": "Les paiements sont effectués automatiquement chaque année, ou lorsqu'une organisation collecte 30 000 EUR ou l'équivalent dans une autre devise.", + "payoutInformation2": "Les paiements sont effectués par la Fondation Plant-for-the-Planet et ses organisations sœurs, par exemple Plant-for-the-Planet US, Plant-for-the-Planet Suisse, etc.", + "payoutInformation3": "Vous pouvez ajuster le calendrier des paiements et recevoir des paiements fréquents tant que vous remplissez le critère du montant minimum de 1 500 EUR.", + "supportInformation": "Si vous avez un cas exceptionnel, veuillez contacter support@plant-for-the-planet.org.", + "scheduleFrequencies": { + "monthly": "Mensuel", + "quarterly": "Trimestrielle", + "semiannually": "Semestrielle", + "annually": "Annuel", + "manual": "Manuel" + }, + "defaultCurrency": "Défaut", + "labels": { + "currency": "Monnaie", + "scheduleFrequency": "Fréquence des paiements", + "payoutMinAmount": "Montant minimum du paiement", + "bankName": "Nom de la banque", + "bankAddress": "Adresse de la banque", + "bankCountry": "Banque Pays", + "holderName": "Nom du titulaire du compte", + "holderAddress": "Adresse du titulaire du compte", + "remarks": "Détails supplémentaires", + "accountNumber": "IBAN / Numéro de compte", + "routingNumber": "ABA / Numéro de routage (US uniquement)", + "bic": "BIC / SWIFT", + "branchCode": "Code de la branche" + }, + "errors": { + "scheduleFrequencyRequired": "La fréquence des paiements est requise", + "payoutMinAmountRequired": "Un montant minimum de paiement est requis", + "payoutMinAmountTooLow": "Le montant minimum du versement doit être d'au moins {currency} {minAmount}", + "bankNameRequired": "Le nom de la banque est obligatoire.", + "bankAddressRequired": "L'adresse de la banque est requise.", + "holderNameRequired": "Le nom du titulaire est obligatoire.", + "holderAddressRequired": "L'adresse du titulaire est requise.", + "accountNumberRequired": "Le numéro de compte est requis.", + "bicRequired": "Le code BIC / SWIFT est requis.", + "noAccountFound": "Aucun compte n'a été récupéré" + }, + "placeholders": { + "payoutMinAmount": "Il devrait être au moins de {currency} {minAmount}", + "bankName": "par exemple Century Bank LLC", + "bankAddress": "par exemple 1 West St, Hamington Way, MA, 10311, USA", + "holderName": "par exemple, John Doe", + "holderAddress": "ex. 21 Penn Avenue, MA 10317 USA", + "remarks": "par exemple, veuillez inclure la référence acct=1237 sur le virement." + }, + "helperText": { + "currency": "Sélectionnez \"Défaut\" s'il s'agit de votre compte bancaire standard. Si vous devez fournir des détails particuliers pour une devise, sélectionnez-la ici et fournissez les détails. Nous utiliserons également les montants minimums standard pour un paiement.", + "remarks": "Fournir des détails supplémentaires, par exemple les coordonnées de la banque intermédiaire, les PC (codes d'objet) ou d'autres références ici." + }, + "saveButton": "Économiser", + "accountError": { + "min_amount_range": "Le montant minimum du paiement doit être d'au moins {currency} {min}.", + "min_amount_forbidden": "Vous ne pouvez pas spécifier un montant minimum de paiement pour le compte par défaut.", + "account_duplicate": "Il existe déjà un compte {currency}.", + "default": "Un problème s'est produit lors de la création d'un compte. Veuillez réessayer après un certain temps." + }, + "accountCreationSuccess": "Les données de votre compte ont été enregistrées avec succès.", + "accountUpdationSuccess": "Les données de votre compte ont été mises à jour avec succès.", + "scheduleSaveSuccess": "Votre calendrier de paiement a été sauvegardé avec succès.", + "editAccountButton": "Modifier le compte", + "accountTitleText": "Transfert pour {currency}", + "addBankDetailsButton": "Ajouter les coordonnées bancaires", + "noBankAccountText": "Vous n'avez pas encore ajouté de coordonnées bancaires.", + "editBankAccountTitle": "Modifier le compte", + "minPayoutText": "Min. Paiement : {amount}" + } +} diff --git a/public/static/locales/fr/manageProjects.json b/public/static/locales/fr/manageProjects.json index 5fecf2b63b..db60054d5f 100644 --- a/public/static/locales/fr/manageProjects.json +++ b/public/static/locales/fr/manageProjects.json @@ -5,6 +5,7 @@ "detailedAnalysis": "Analyse détaillée", "projectSites": "Sites du projet", "projectSpending": "Dépenses des projets", + "protectionStartedIN": "La protection a commencé en", "review": "Revue", "name": "Nom du projet", "nameValidation": "Entrer le nom du projet", @@ -15,6 +16,7 @@ "countTarget": "Cible d'arbres", "countTargetValidation": "Entrer la cible d'arbres", "countTargetValidation2": "L'objectif d'arbres devrait être supérieur à 1", + "conservationImpacts": "Impacts sur la conservation", "website": "Site web", "websiteValidationRequired": "Entrer l'URL du site web", "websiteValidationInvalid": "URL du site web invalide", @@ -23,16 +25,24 @@ "receiveDonations": "Recevoir des dons", "receiveDonationsInfo": "Veuillez l'activer une fois que le profil du projet est complet. Plant-for-the-Planet examinera alors le profil et vous informera si vous êtes éligible pour recevoir un don par le biais de cette plateforme. Cela peut prendre quelques semaines.", "unitCost": "Coût par arbre (en euros)", + "unitCostRequired": "Veuillez indiquer le coût par unité", + "invalidUnitCost": "Le coût unitaire doit être supérieur à 0 € et inférieur à 100 €", + "exit": "Sortie vers les projets", "projectLocation": "Localisation du projet", "visitorAssistanceLabel": "Je fournirai le logement, l'accès au site et le transport local si un examinateur est envoyé par Plant-pour-la-Planète.", "publishProject": "Publier le projet", "saveAndContinue": "Sauvegarder et continuer", + "skip": "Sauter", "youtubeURL": "Lien vidéo Youtube", "youtubeURLValidation": "Lien vidéo Youtube invalide", "addCaption": "Ajouter une légende", "yearOfAbandonment": "Année approximative d'abandon", + "labelRestorationStarted": "Début de la restauration", "plantingDensity": "Densité de plantation", + "maxPlantingDensity": "Densité maximale de plantation", "employeeCount": "Nombre d'employés", + "endangeredSpeciesValidation": "Entrée non valide", + "endangeredSpecies": "Espèces menacées", "mainChallenge": "Principal défi", "whyThisSite": "Pourquoi ce site ?", "siteOwner": "Propriétaire du site", @@ -60,6 +70,29 @@ "yearAbandonedInfo": "Quand a eu lieu la dernière intervention humaine significative sur le site ? Y compris l'exploitation forestière, l'agriculture, le pâturage du bétail, l'incendie provoqué par l'homme.", "treePerHa": "arbres par ha", "employeesCountInfo": "Équivalent d'une semaine de 40 heures. C'est-à-dire que deux employés à mi-temps comptent pour un.", + "labelRestorationSeasons": "Saisons de restauration", + "labelMainInterventions": "Principales interventions", + "interventionTypes": { + "assisting-seed-rain": "Assisting Seed Rain", + "control-remove-livestock": "Control/Remove Livestock", + "cut-suppressing-grass": "Cut/Suppressing Grass", + "direct-seeding": "Direct Seeding", + "enrichment-planting": "Enrichment Planting", + "establish-firebreaks": "Establish Firebreaks", + "fire-patrols": "Fire Patrols", + "fire-suppression-team": "Fire Suppression Team", + "liberating-regenerants": "Régénérants libérateurs", + "maintenance": "Maintenance", + "marking-regenerants": "Marking Regenerants", + "other-interventions": "Other Interventions", + "planting-trees": "Planting Trees", + "removal-contaminated-soil": "Removal of Contaminated Soil", + "removal-invasive-species": "Removal of Invasive Species", + "soil-improvement": "Soil Improvement", + "stop-tree-harvesting": "Stop Tree Harvesting" + }, + "missingInterventionsError": "Veuillez sélectionner au moins une intervention", + "timePeriod": "Période de temps", "max300Chars": "300 caractères maximum autorisés", "longTermPlanInfo": "Quelles sont les mesures en place pour projeter la forêt à long terme ? Comment ce projet est-il financé ? Quelles sont les ressources qui seront extraites du site ?", "backToMedia": "Retour aux médias du projet", @@ -67,6 +100,9 @@ "siteStatusPlanted": "Planté", "siteStatusBarren": "Stérile", "siteStatusReforestation": "Reboisement", + "siteStatusNotYetprotected": "Pas encore protégé", + "siteStatusPartiallyprotected": "Partiellement protégé", + "siteStatusFullyprotected": "Protection totale", "siteStatus": "Statut du site", "selectProjectStatus": "Sélectionner le statut du projet", "saveAndAddSite": "Enregistrer et ajouter un autre site", @@ -89,6 +125,8 @@ "pendingReview": "En cours d'examen", "submitForReview": "Soumettre pour examen", "addProject": "Ajouter un projet", + "addNewProject": "Ajouter un nouveau projet", + "conservationProject": "Projet de conservation", "abandonment": "Abandon", "survivalRate": "Taux de reprise", "survivalRateInfo": "Pourcentage d'arbres qui survivent à la première année de plantation", @@ -100,12 +138,13 @@ "issueDate": "Date d'émission", "acquisitionYear": "Année d'acquisition", "largeScalePlanting": "Plantation à grande échelle", - "agroforestry": "Agroforesterie", - "naturalRegeneration": "Régénération naturelle", - "managedRegeneration": "Régénération artificielle", - "urbanPlanting": "Plantation urbaine", - "otherPlanting": "Autres plantations", + "agroforestry": "Agroforestry", + "naturalRegeneration": "Natural Regeneration", + "managedRegeneration": "Managed Regeneration", + "urbanPlanting": "Urban Planting", + "otherPlanting": "Other Planting", "projectType": "Type de projet", + "protectionSeasons": "Saisons de protection", "polygonRequired": "Le polygone est nécessaire", "fileSizeLimit": "Le fichier est supérieur à 10 mb", "fileImageOnly": "Le type de fichier doit être une image", @@ -119,6 +158,91 @@ "longitudeRequired": "La longitude est requise", "manageProject": "Gérer les projets", "descriptionForManageProjects": "Présentez votre travail de restauration pour le suivi et pour recevoir des dons.", - "manageProjects": "Gérer les projets" + "manageProjects": "Gérer les projets", + "addConservationProjects": "Ajouter des projets de conservation", + "areaProtected": "Zone protégée (en ha)", + "areaProtectedInfo": "Pour saisir des décimales, veuillez les séparer par un \" . \"", + "ecosystem": "Écosystème", + "protectionStartedIn": "Protection entamée en", + "actions": "Actions", + "activitySeasons": "Saisons d'activité", + "addAnotherSpecies": "Ajouter une autre espèce", + "add": "Ajouter", + "forestProtectionType": "Type de protection des forêts/Mesures", + "ecologicalBenefits": "Avantages écologiques", + "socialBenefits": "Prestations sociales", + "coBenefits": "Co-bénéfices", + "benefits": "Avantages", + "tropicalMoistForest": "Tropical Moist Forest", + "dry": "Dry", + "ecosystemType": "Please Select Ecosystem Type", + "tropicalDryForests": "Tropical Dry Forests", + "tropicalConiferousForests": "Tropical Coniferous Forests", + "tropicalGrasslandsForests": "Tropical Grasslands Forests", + "temperateBroadleafForests": "Temperate Broadleaf Forests", + "temperate-coniferous-forests": "Temperate Coniferous Forests", + "temperateGrasslandsForests": "Temperate Grasslands Forests", + "mediterraneanForests": "Mediterranean Forests", + "mangroves": "Mangroves", + "deserts": "Deserts", + "floodedGrasslands": "Flooded Grasslands", + "montaneGrasslands": "Montane Grassland", + "borealForests": "Boreal Forests", + "tundra": "Tundra", + "temperateConiferousForests": "Temperate Coniferous Forests", + "ecosystemTypes": { + "tropical-moist-forests": "Tropical Moist Forests", + "tropical-dry-forests": "Tropical Dry Forests", + "tropical-coniferous-forests": "Tropical Coniferous Forests", + "tropical-grasslands-forests": "Tropical Grasslands Forests", + "temperate-broadleaf-forests": "Temperate Broadleaf Forests", + "temperate-coniferous-forests": "Temperate Coniferous Forests", + "temperate-grasslands-forests": "Temperate Grassland Forests", + "mediterranean-forests": "Mediterranean Forests", + "mangroves": "Mangroves", + "deserts": "Deserts", + "flooded-grasslands": "Flooded Grasslands", + "montane-grasslands": "Montane Grasslands", + "boreal-forests": "Boreal Forests", + "tundra": "Tundra" + }, + "unitTypeRequired": "Veuillez sélectionner un type d'unité", + "unitType": "Type d'unité", + "unitTypes": { + "tree": "arbre", + "m2": "m²" + }, + "tenure": "Titularisation", + "rent": "Loyer", + "ownershipType": "Type de propriété", + "landOwnershipType": "Type de propriété foncière", + "restorationProject": "Projet de restauration", + "addProjetDescription": "Vous n'êtes plus qu'à quelques pas de présenter votre travail sur la plateforme Plant-for-the-Planet.", + "englishOnly": " Les projets doivent être rédigés en anglais uniquement.", + "important": "Important :", + "addProjetContact": "Si vous avez besoin d'aide, contactez-nous à l'adresse suivante ", + "supportLink": "support@plant-for-the-planet.org", + "wrongCoordinates": "Coordonnées erronées", + "actionInfo": "Les mesures prises par votre organisation pour préserver l'écosystème.", + "mainChallengeInfo": "Le plus grand défi auquel ce projet est confronté.", + "motivationInfo": "Motivation de la protection de cet écosystème spécifique.", + "hectar": "hectare", + "validation": "{fieldName} est invalide", + "date": "Date", + "plantingDensityValidation": "Veuillez saisir la densité de plantation", + "maxPlantingDensityValidation": "veuillez saisir la densité maximale de plantation", + "onlyEnglish": "Veuillez créer/modifier des projets en anglais uniquement. Les traductions des projets sont gérées automatiquement par Plant-for-the-Planet.", + "since": "depuis", + "Since": "Depuis", + "and": "et", + "errorForMaxPlantingDensity": "Cette valeur doit être supérieure à la densité de plantation", + "managePayoutsButton": "Gérer les paiements", + "siteNameValidation": "Veuillez saisir un nom de site", + "reviewNote": "Note importante: Plant-for-the-Planet examinera et validera vos données. Afin de poursuivre le processus d'intégration et de vérification, et d'approuver votre projet pour les dons, plusieurs documents doivent être fournis :", + "legalAccreditation": "Accréditation légale (certificat d'enregistrement/numéro d'enregistrement) attestant du statut d'organisation caritative/à but non lucratif de votre organisation - datant de moins de 2 ans !", + "taxExemption": "Documentation relative à l'exonération fiscale (si applicable dans votre pays)", + "annualReport": "Dernier rapport annuel", + "financialReport": "Dernier rapport financier audité", + "PlantingReport": "Rapport sur l'état d'avancement du projet" } } diff --git a/public/static/locales/fr/maps.json b/public/static/locales/fr/maps.json index 22ded435fc..61e15a96c4 100644 --- a/public/static/locales/fr/maps.json +++ b/public/static/locales/fr/maps.json @@ -42,6 +42,11 @@ "today": "Aujourd'hui", "yesterday": "Hier", "clickForDetails": "Cliquez pour plus de détails", - "treeMapper": "TreeMapper" + "treeMapper": "TreeMapper", + "showProjectList": "Afficher la liste des projets", + "showProjectDetails": "Afficher les détails du projet", + "hideProjectList": "Masquer la liste des projets", + "hideProjectDetails": "Cacher les détails du projet", + "countries": "Pays" } } diff --git a/public/static/locales/fr/me.json b/public/static/locales/fr/me.json index 022e49fcfd..b826511d5d 100644 --- a/public/static/locales/fr/me.json +++ b/public/static/locales/fr/me.json @@ -1,10 +1,32 @@ { "Me": { + "managePayouts": { + "menuText": "Gérer les paiements", + "titleOverview": "Gérer les paiements - Vue d'ensemble", + "titleAddBankDetails": "Gérer les paiements - Ajouter les coordonnées bancaires", + "titlePayoutSchedule": "Gérer les paiements - Planifier les paiements", + "titleEditBankDetails": "Gérer les paiements - Modifier les coordonnées bancaires" + }, + "donationLinkTitle": "Créer un lien de don", + "planetcash": { + "menuText": "PlanetCash", + "submenuText": "Mon PlanetCash", + "titleAccount": "PlanetCash - Comptes", + "titleTransactions": "PlanetCash - Transactions", + "titleCreateAccount": "PlanetCash - Créer un compte" + }, "treesPlanted": "Arbre planté", "treesPlanted_plural": "Arbres plantés", + "bulkCodesTitleStep3": "Générer des certificats et des codes d'arborescence - Emettre des codes", + "bulkCodesTitleStep2": "Générer des certificats et des codes d'arbres - Sélectionner un projet", + "bulkCodesTitle": "Générer des certificats et des codes d'arbres - Sélectionner une méthode", + "bulkCodes": "Certificats et codes", "target": "Cible", + "editTarget": "Modifier la cible", "share": "Partager", "registerTrees": "Enregistrer les arbres", + "registeredTree": "Arbre enregistré", + "linkedIn": "LinkedIn", "registerTreesDescription": "Enregistrer les arbres que vous avez plantés vous-même, par exemple dans votre jardin.", "myForest": "Ma forêt", "giftToGiftee": "Cadeau à {gifteeName}", @@ -42,17 +64,60 @@ "filters": "Filtres", "registeredTrees": "Arbres enregistrés", "embedWidget": "Créer un widget de profil", + "donationLink": "Créer un lien de don", + "gift": "Cadeau", + "donation": "Donation", "tree-donation": "Don d'arbres", "tree-gift": "Cadeau d'arbre", "tree-cash": "TreeCash", + "planet-cash": "PlanetCash", "trees": "Arbres", "amount": "Montant", "created": "Date de création", + "paymentMethod": "Mode de paiement", + "frequency": "Fréquence", + "monthly": "Mensuel", + "yearly": "Annuel", + "totalDonated": "Total des dons", + "firstDonation": "Date du premier don", + "donorNameRequired": "Nom du donateur requis", + "donationAmountRequired": "Montant du don requis", + "frequencyRequired": "Fréquence requise", + "dateRequired": "Date requise", "project": "Nom du projet", + "planetCashPayment": "Paiement PlanetCash", "method": "Mode de paiement", + "unitCost": "Coût par {unitType}", "treeCount": "Nombre d'arbres", "lastUpdate": "Dernière mise à jour", "donorCertificate": "Certificat de donateur", + "editDonation": "Modifier le don", + "pauseDonation": "Pause Donation", + "cancelDonation": "Annuler le don", + "reactivateDonation": "Réactiver le don", + "resumeDonation": "Continuer de CV", + "donationName": "Nom du donateur", + "donationAmount": "Montant du don", + "makeChanges": "Apporter des modifications", + "cancel": "Annuler", + "yes": "Oui", + "no": "Non", + "editDonationConfirmation": "Modifier le don", + "editDonationDescription": "Vous pouvez modifier les options suivantes :", + "pauseDonationConfirmation": "Pause Donation", + "pauseDonationDescription": "Vous pouvez le relancer après une pause en le redémarrant.", + "pauseUntilResume": "Pause jusqu'à ce que je reprenne", + "pausedUntilResumed": "Mise en pause jusqu'à la reprise", + "pausedUntil": "En pause jusqu'à ce que", + "pauseUntilDate": "Pause jusqu'à la date sélectionnée", + "reactivateDonationConfirmation": "Réactiver le don", + "reactivateDonationDescription": "Votre don sera réactivé et sera facturé à la date prévue {currentPeriodEnds}", + "cancelDonationConfirmation": "Annuler le don", + "cancelDonationDescription": "Une fois que le don est annulé, il ne peut pas être relancé.", + "cancelDonationPaypalDescription": "Ce don sera annulé immédiatement, il ne pourra pas être relancé.", + "cancelledOn": "Annulé le", + "willBeCancelledOn": "Sera annulée le", + "nextOn": "Suivant", "download": "Télécharger", "donations": "Dons", "in-progress": "En cours", @@ -74,6 +139,10 @@ "nameForest": "La forêt des {name}", "taxReceipt": "Reçu fiscal", "history": "Histoire", + "recurrency": "Dons récurrents", + "new": "Nouveau", + "beta": "Bêta", + "date": "Date", "treemapper": "TreeMapper", "register-trees": "Enregistrer les arbres", "manage-projects": "Gérer les projets", @@ -111,6 +180,8 @@ "planetFee": "Frais Planet", "transactionFee": "Frais de transaction", "transferFee": "Frais de transfert", + "giftComment": "Commentaire (privé)", + "giftOccasion": "Occasion", "open": "Ouvrir", "downloads": "Télécharger", "account": "Comptes", @@ -120,24 +191,92 @@ "targetErrorMessage": "Le nombre doit être supérieur à zéro", "taxDeductibleReceipt": "Reçu déductible des impôts", "giftCertificate": "Certificat de don", + "downloadCodes": "Télécharger les codes", + "downloadCodesGeneralError": "Le téléchargement a échoué. Veuillez réessayer après un certain temps.", + "downloadCodesNetworkError": "Impossible de récupérer les codes. Veuillez vérifier votre réseau.", "paypal-paypal": "Paypal", "stripe-": "Stripe", "unknown-method": "Inconnu", "stripe-sofort": "Sofort (Stripe)", "tree-cash-tree-cash": "TreeCash", + "planet-cash-planet-cash": "PlanetCash", "stripe-card": "Carte de crédit/débit", "stripe-giropay": "GiroPay (Stripe)", "action-required": "Action requise", "completed": "Complété", "donationsSubTitle": "Gérez tous vos dons et paiements à partir d'un seul endroit.", + "recurrencySubTitle": "Gérez tous vos dons en devises à partir d'un seul endroit.", "payments": "Paiements", "stripe-sepa_debit": "SEPA (Stripe)", + "sepa_debit": "SEPA (Stripe)", + "offline": "Hors ligne", "offline-offline": "Hors ligne", + "offline-transfer": "Hors ligne", "profile": "Profil", "projects": "Projets", "settings": "Paramètres", "editProfile": "Editer le profil", "deleteProfile": "Supprimer le Profil", - "widgets": "Widgets" + "widgets": "Widgets", + "pauseNote": "Note : Vous pouvez sélectionner une date postérieure à la fin de la période en cours.", + "cancelImmediately": "Annuler immédiatement", + "cancelOnSelectedDate": "Sélectionnez la date d'annulation", + "conservation-donation": "Donation pour la conservation", + "funds-donation": "Donation", + "bouquet-donation": "Don de bouquets", + "transferDetails": "Détails du transfert", + "beneficiary": "Bénéficiaire", + "donationNote": { + "offline-offline": "Les virements bancaires prennent généralement de 1 à 5 jours ouvrables pour nous parvenir. Dès que votre virement arrive, nous vous envoyons un courriel de confirmation avec vos reçus (et votre certificat).", + "stripe-sepa_debit": "Les paiements SEPA prennent de 2 à 14 jours ouvrables (généralement de 3 à 5 jours). Dès que votre virement arrive, nous vous envoyons un courriel de confirmation avec vos reçus (et votre certificat).", + "stripe-sofort": "Les paiements SOFORT prennent de 2 à 14 jours ouvrables (généralement 2 à 3 jours). Dès que votre virement arrive, nous vous envoyons un courriel de confirmation avec vos reçus (et votre certificat).", + "in-dispute": "Votre transfert a été contesté. Des frais de contestation de 7 à 15 dollars sont généralement facturés par les fournisseurs de services de paiement. Veuillez contacter support@plant-for-the-planet.org pour plus de détails." + }, + "active": "actif", + "canceled": "annulé", + "incomplete": "en attente", + "incomplete_expired": "annulé", + "past_due": "en souffrance", + "unpaid": "non rémunéré", + "trialing": "actif", + "paused": "en pause", + "plantLocations": "Emplacement des usines", + "mySpecies": "Mon espèce", + "import": "Importation", + "pausingDonation": "Mise en pause du don", + "cancellingDonation": "Annulation d'un don", + "reactivatingDonation": "Réactivation du don", + "editingDonation": "Éditer le don", + "noteToWait": "Note : La mise à jour des dons récurrents prendra 5 à 10 minutes", + "apiKey": "Clé API", + "apiKeyMessage1": "La clé API est comme un mot de passe numérique qui vous permet d'agir comme votre profil dans n'importe quelle application. Elle permet également aux applications de faire des dons en votre nom, d'utiliser PlanetCash et de consulter les transactions.", + "apiKeyMessage2": "Une fois que vous aurez généré une clé API, nous vous demanderons une authentification à deux facteurs pour votre connexion. Vous pourrez configurer cette authentification lors de votre prochaine connexion.", + "apiKeyMessage3": "La régénération d'une clé API invalidera immédiatement votre clé API existante.", + "regenerateKey": "Régénérer la clé", + "giftFund": "Fonds de donation", + "dataExplorer": "Explorateur de données", + "switchUser": "Usurpation d'identité", + "switchUserMessage": "Saisissez l'adresse électronique de l'utilisateur vers lequel vous souhaitez basculer dans le champ ci-dessous.", + "profileEmail": "Profil Email", + "supportPin": "Broche de support", + "alphaNumeric": "Saisir un code alphanumérique à 4 chiffres", + "switch": "Usurpation d'identité", + "targetUser": "Vous vous faites actuellement passer pour {impersonatedEmail}", + "exitImpersonation": "Sortir de l'usurpation d'identité", + "enterTheEmail": "Saisissez l'adresse électronique de l'utilisateur cible", + "enterSupportPin": "Saisir le code d'accès à l'assistance de l'utilisateur cible", + "invalidEmail": "Saisir le code d'accès à l'assistance de l'utilisateur cible", + "wrongEntered": "L'adresse e-mail ou le numéro d'identification de l'assistance est incorrect !", + "donatedTrees": "Arbres donnés", + "resetPin": "Broche de réinitialisation", + "donate": "Faire un don", + "donated": "Donation", + "conserved": "Conservé", + "restored": "Restauré", + "membershipCtaButtonText": "S'INSCRIRE MAINTENANT", + "membershipCtaCopy": "Soutenez-nous EN DEVENANT MEMBRE", + "shareUrl": "Partager l'URL", + "treesOfTrees": "{count1} de {count2}", + "document": "Documentation de la plate-forme (EN)" } } diff --git a/public/static/locales/fr/planetcash.json b/public/static/locales/fr/planetcash.json index ffcd4415b0..3fe9dda5a1 100644 --- a/public/static/locales/fr/planetcash.json +++ b/public/static/locales/fr/planetcash.json @@ -1 +1,34 @@ -{ } +{ + "Planetcash": { + "title": "PlanetCash", + "partnerSignupInfo": "L'utilisation de cette fonction par les entreprises est soumise à un partenariat avec Plant-for-the-Planet. Veuillez contacter partner@plant-for-the-planet.org pour plus de détails.", + "description": "PlanetCash est un outil convivial pour les développeurs qui étend la plateforme Plant-for-the-Planet avec des API et des outils intégrés. Le solde de PlanetCash est une contribution à Plant-for-the-Planet qui peut être consacrée par le donateur à différents projets sur la plateforme.", + "termsText": "Voir les conditions générales.", + "learnMoreText": "En savoir plus sur PlanetCash.", + "tabAccounts": "Comptes", + "tabCreateAccount": "Créer un compte", + "tabTransactions": "Transactions", + "accountTitleText": "{currency} Compte PlanetCash ({country})", + "createAccountTitleText": "S'inscrire à PlanetCash", + "addBalanceButton": "Ajouter un solde", + "labelAccountHolder": "Titulaire du compte", + "labelBalance": "Équilibre", + "labelCreditLimit": "Limite", + "deactivateAccountButton": "Désactiver", + "activateAccountButton": "Activer", + "accountInactiveHelpText": "Ce compte est inactif et ne peut pas être utilisé pour verser des contributions. Pour activer ce compte, veuillez contacter support@plant-for-the-planet.org.", + "noAccountsText": "Vous ne semblez pas avoir créé de compte PlanetCash.", + "createPlanetCashButton": "Créer un compte Planet Cash", + "accountQuotaReachedText": "Vous ne pouvez pas créer d'autres comptes car vous avez épuisé votre quota de comptes.", + "accountCreationSuccess": "Votre compte PlanetCash a été créé avec succès", + "labelCountry": "Pays", + "planetCashTerms1": "En cliquant sur \"Créer un compte PlanetCash\", j'accepte les conditions générales de Plant-for-the-Planet et de PlanetCash.", + "planetCashTerms2": "Je comprends que les dons de PlanetCash ne sont pas remboursables et que les paiements non attribués seront automatiquement alloués à des projets sur la plateforme après six mois de paiement.", + "planetCashTerms3": "Les dons au compte PlanetCash pour des raisons personnelles sont généralement déductibles des impôts dans le pays sélectionné à cette étape. L'utilisation commerciale de PlanetCash peut ne pas donner droit à des déductions fiscales. Si vous avez des questions, veuillez contacter support@plant-for-the-planet.org ou votre conseiller fiscal.", + "accountError": { + "active_account_exists": "Un compte actif existe déjà. Désactivez ce compte avant d'en activer un autre.", + "duplicate_account": "Vous avez déjà créé un compte pour {country}", + "default": "Un problème s'est produit lors de la création d'un compte. Veuillez réessayer après un certain temps." + } + } +} diff --git a/public/static/locales/fr/profile.json b/public/static/locales/fr/profile.json index a3c52e765f..e78387d091 100644 --- a/public/static/locales/fr/profile.json +++ b/public/static/locales/fr/profile.json @@ -1,13 +1,49 @@ { "Profile": { + "myProfile": { + "memberSince": "Membre depuis {date}", + "userDescription": "{bio}" + }, + "feature": { + "redeem": "Racheter", + "registerTree": "Enregistrer l'arbre", + "share": "Partager" + }, "myPublicProfile": { - "support": "Soutien" + "support": "Soutien", + "link": "Lien" }, "myForestMap": { - "plantedTree": "{count, plural, =0 {Arbres} =1 {Arbre} other {Arbres}}\n" + "plantedTree": "{count, plural, =1 {# Arbre} other {# Arbres}}", + "treesPlanted": "Arbres plantés", + "restored": "Restauré", + "registered": "Enregistré", + "conservation": "Conservation", + "projects": "Projets", + "countries": "Pays", + "donations": "Dons", + "area": "{areaConserved} m²", + "zoomIn": "zoom avant pour plus de détails", + "totalDonation": "{count, plural, =1 {# don} other {# dons}} ", + "totalProject": "à {count, plural, =1 {# projet} other {# projets}}", + "tpoName": "Par {tpo}" + }, + "myTreeCounter": { + "treesPlanted": "Arbres plantés", + "editTarget": "Modifier la cible" }, "myContributions": { - "receivedFrom": "Reçu de {name}" + "treesPlantedAndAreaRestored": "Arbres plantés et zones restaurées", + "treeRegistered": "{count, plural, =1 {# Arbre enregistré} other {# Arbres enregistrés}}", + "receivedFrom": "Reçu de {name}", + "loadMoreContribution": "Charger plus de contributions", + "loadingContribution": "Chargement Contribution....", + "donate": "Faire un don", + "donateAgain": "Faire un nouveau don", + "conservedSmall": "conservé", + "restoredSmall": "restauré", + "areaType": "{areaConserved} m² {type}", + "areaConserved": "Zones conservées" } } } diff --git a/public/static/locales/fr/redeem.json b/public/static/locales/fr/redeem.json index 277aac870c..955eb9d7d8 100644 --- a/public/static/locales/fr/redeem.json +++ b/public/static/locales/fr/redeem.json @@ -8,6 +8,14 @@ "enterRedeemCode": "Veuillez entrer un code pour le rachat", "validating": "Validation", "invalidType": "Type non valide, vérifier à nouveau le lien", - "redeemDescription": "Échangez votre bon d'arbre et d'autres codes." + "redeeming": "La rédemption :", + "invalidCode": "Ce code n'est pas valide.", + "alreadyRedeemed": "Le code a déjà été utilisé", + "redeemCode": "Code d'échange", + "redeemingCode": "Code d'échange...", + "redeem": "Racheter", + "redeemDescription": "Échangez votre bon d'arbre et d'autres codes.", + "successfullyRedeemed": "Remboursé avec succès", + "redeemAnotherCode": "Utiliser un autre code" } } diff --git a/public/static/locales/fr/tenants.json b/public/static/locales/fr/tenants.json index 9acd711e17..ddb0f9cb4a 100644 --- a/public/static/locales/fr/tenants.json +++ b/public/static/locales/fr/tenants.json @@ -6,7 +6,7 @@ }, "energizer": { "title": "Energizer ❤️ Baeume", - "description": "\"La richesse est pour nous, la centrale de l'Etat, une de nos priorités. Depuis la première batterie gratuite de 1989, nos batteries sont fabriquées avec des matériaux de haute qualité, de la langue et des matériaux de haute qualité. Notre partenariat avec l'association \"Une plante pour la planète\" s'inscrit dans cette tradition, qui vise à promouvoir l'environnement et à assurer la sécurité de mes enfants. Gemeinsam pflanzen wir Bäume und veranstalten Bildungsprogramme für Kinder und Jugendliche, um ein Bewusstsein für global Gerechtigkeit und die Klimakrise zu schaffen. Einbinden wollen wir dabei auch unsere Konsumenten und den Handel, denn nur gemeinsam kann diese zentrale Herausforderung unserer Zeit gelöst werden. Bist du dabei ?" + "description": "`Das Richtige tun` ist für uns der zentrale Leitgedanke, an dem wir unser Handeln ausrichten. Seit der ersten quecksilberfreien Batterie im Jahre 1989 gelingt es uns, unsere Batterien immer weiter zu verbessern, langlebiger und damit umweltfreundlicher zu machen. Unsere Partnerschaft mit Plant-for-the-Planet steht genau in dieser Tradition, die Umwelt zu schonen und für mehr Nachhaltigkeit einzustehen. Gemeinsam pflanzen wir Bäume und veranstalten Bildungsprogramme für Kinder und Jugendliche, um ein Bewusstsein für globale Gerechtigkeit und die Klimakrise zu schaffen. Einbinden wollen wir dabei auch unsere Konsumenten und den Handel, denn nur gemeinsam kann diese zentrale Herausforderung unserer Zeit gelöst werden. Bist du dabei?" }, "senatDerWirtschaft": { "title": "Senat Der Wirtschaft", @@ -44,6 +44,10 @@ "3pleset": { "title": "Alife & Kickin ❤️ Arbre", "description": "

#WEAREALIFE Une faute d'ortographe? Non, c'est intentionnel !
C'est tout à fait dans l'esprit de la devise CHOISIR LA VIE qu'il vous faut maintenant.
En effet, dès maintenant, vous pouvez, avec Alife & Kickin et l'organisation Plant-for-the-Planet Arbres, choisir de planter et de vivre. Rejoignez-nous sur le terrain d'Alife & Kickin. Comment ?
Pour chaque commande en ligne, nous planterons un arbre avec Plant-for-the-Planet dans les deux prochains mois. Notre objectif : 50 000 graines pour une alimentation saine. Comment ?
Sur la carte, vous pouvez voir où sera plantée la forêt Alife & Kickin. Alors, prenez le temps d'écouter, d'écouter et de vivre votre vie. CHOISISSEZ LA VIE.
UNE COMMANDE, UN ARBRE
#WEAREALIFE

" + }, + "weareams": { + "title": "AMS ❤️ Arbres", + "description": "À partir de 2021, AMS s'associe à la campagne TrillionTreeCampaign et, avec Plant-for-the-Planet, nous commençons à rendre à la nature ce qu'elle nous a donné. Nous utiliserons les opportunités qui s'offrent à nous pour promouvoir la durabilité dans notre chaîne d'approvisionnement et à travers nos relations avec les clients et les partenaires commerciaux. Rejoignez-nous et #StopTalkingStartPlanting !" } } } diff --git a/public/static/locales/fr/treemapper.json b/public/static/locales/fr/treemapper.json index 260a2cac07..cd9a8d05d0 100644 --- a/public/static/locales/fr/treemapper.json +++ b/public/static/locales/fr/treemapper.json @@ -12,6 +12,7 @@ "coordinates": "Coordonnées", "guid": "GUID", "height": "Hauteur", + "invalidHeight": "Hauteur non valide", "width": "Largeur", "plantDate": "Date de plantation", "registrationDate": "Date d'inscription", @@ -21,6 +22,56 @@ "loadMore": "Charger plus", "treeMapper": "TreeMapper", "cm": "cm", - "m": "m" + "m": "m", + "plantingLocation": "Lieu de plantation", + "reviewAndSubmit": "Réviser et soumettre", + "sampleTree": "Exemple d'arbre #{number}", + "tag": "Étiquette", + "import": "Importation", + "editor": "Éditeur", + "draw": "Dessiner", + "addAnotherSpecies": "Ajouter une autre espèce", + "continue": "Continuer", + "downloadCSVTemplate": "Télécharger le modèle CSV", + "treeTag": "Étiquette d'arbre", + "diameter": "Diamètre", + "invalidDiameter": "Diamètre non valide", + "latitude": "Latitude", + "invalidLatitude": "Latitude non valide", + "longitude": "Longitude", + "invalidLongitude": "Longitude non valide", + "addAnotherSampleTree": "Ajouter un autre arbre échantillon", + "skip": "Sauter", + "treeSpecies": "Espèces d'arbres", + "plantingDate": "Date de plantation", + "summary": "Résumé", + "reviewSubmitDescription": "Examinez les données que vous venez de télécharger et soumettez-les à TreeMapper.", + "submittedSuccess": "Soumis avec succès", + "submittedSuccessDescription": "Vos arbres ont été soumis à TreeMapper. Vous pouvez les voir dans vos emplacements de plantes ou dans l'application TreeMapper.", + "myPlantLocations": "Mes implantations", + "submitted": "Soumis", + "projectRequired": "Projet requis", + "geoJsonError": "Format GeoJSON/KML non pris en charge", + "atLeastOneSpeciesRequired": "Au moins une espèce est requise", + "treesRequired": "Nombre d'arbres requis", + "count": "Compter", + "addSampleTree": "Ajouter un exemple d'arbre", + "uploadFile": "Télécharger le fichier", + "fileFormatKML": "Fichier (geojson/kml)", + "importData": "Importer des données", + "importExplanation": "Ici, vous pouvez importer des données TreeMapper, qui seront marquées comme \"externes\" (pas \"hors site\", veuillez utiliser l'application pour cela). Pour les coordonnées des sites de plantation, nous acceptons *.kml ou geojson, pour les arbres échantillons (optionnels) *.csv (le modèle est fourni à l'étape 2).", + "downloadExplanation": "Téléchargez le modèle CSV suivant pour importer des échantillons de données sur les arbres dans le format indiqué. Utilisez un éditeur simple pour modifier le fichier. Les deuxième et troisième lignes sont des détails de formatage et un exemple et doivent être supprimées.", + "importCSV": "Importer CSV", + "fileFormatCSV": "Fichier (csv)", + "aliases": "Alias", + "aliasesValidation": "Veuillez saisir les alias", + "speciesValidation": "Veuillez saisir une espèce", + "external": "Externe", + "date": "Date", + "datePlantedRequired": "Date de plantation requise", + "measurements": "Mesures", + "ignoredColumnsWarning": "Les colonnes supplémentaires ont été ignorées", + "back": "Retour", + "submit": "Soumettre" } } diff --git a/public/static/locales/fr/treemapperAnalytics.json b/public/static/locales/fr/treemapperAnalytics.json index ffcd4415b0..95d8b91c7b 100644 --- a/public/static/locales/fr/treemapperAnalytics.json +++ b/public/static/locales/fr/treemapperAnalytics.json @@ -1 +1,59 @@ -{ } +{ + "TreemapperAnalytics": { + "title": "Explorateur de données", + "from": "De", + "to": "Pour", + "clearFilter": "Effacer le filtre", + "days": "Jours", + "months": "Mois", + "weeks": "Semaines", + "years": "Années", + "treesPlanted": "Arbres plantés", + "speciesPlanted": "Espèces plantées", + "calenderWeek": "CW", + "project": "Projet", + "export": "Exportation", + "exportData": "Exportation de données", + "jan": "Jan", + "feb": "Fév", + "mar": "Mar", + "apr": "Avr", + "may": "Mai", + "jun": "Jun", + "jul": "Jul", + "aug": "Août", + "sep": "Sep", + "oct": "Oct", + "nov": "Nov", + "dec": "Déc", + "exportColumnHeaders": { + "hid": "ID lisible par l'homme pour un site d'usine", + "plantDate": "Date de plantation", + "species": "Nom de l'espèce plantée", + "geometry": "GeoJson Coordonnées du polygone", + "type": "Type d'implantation de l'usine (simple, multiple)", + "treesPlanted": "Nombre total d'arbres dans une plantation", + "metadata": "Métadonnées sur l'emplacement de l'usine", + "plantProjectId": "ID de backend du projet dont fait partie la localisation de l'usine", + "sampleTreeCount": "Nombre d'arbres échantillons présents sur le site de l'usine", + "captureStatus": "Capture Statut de l'emplacement de l'usine.", + "created": "Horodatage de la création" + }, + "readme": "LISEZ-MOI", + "interventionData": "Données d'intervention", + "monitoringPlotsData": "Données sur les placettes de surveillance", + "dataIntervals": "Intervalles de données", + "errors": { + "emptyExportData": "Données non disponibles pour l'intervalle spécifié. Veuillez essayer une autre plage de temps ou vérifier si les données pour cette période ont été enregistrées." + }, + "timeFrame": "Cadre temporel", + "scientificName": "Nom scientifique", + "type": "Type", + "interventions": "Interventions", + "monitoringPlots": "Placettes de surveillance (à venir...)", + "trillion": "t", + "billion": "b", + "million": "m", + "thousand": "k" + } +} diff --git a/public/static/locales/it/bulkCodes.json b/public/static/locales/it/bulkCodes.json index ffcd4415b0..f03c9c1c93 100644 --- a/public/static/locales/it/bulkCodes.json +++ b/public/static/locales/it/bulkCodes.json @@ -1 +1,117 @@ -{ } +{ + "BulkCodes": { + "bulkCodesTitle": "Emissione di certificati e codici per alberi", + "partnerSignupInfo": "L'utilizzo di questa funzione da parte delle aziende è soggetto alla partnership con Plant-for-the-Planet. Contattare partner@plant-for-the-planet.org per i dettagli.", + "bulkCodesDescription1": "Utilizzando PlanetCash è possibile generare migliaia di codici in un'unica operazione. La generazione di certificati ad albero aumenterà il vostro numero di alberi.", + "bulkCodesDescription2": "È possibile utilizzare questa funzione per creare codici per certificati personalizzati, carte regalo, donazioni per conto degli utenti e codici riscattabili da associare ai propri prodotti.", + "tabCreationMethod": "Metodo di creazione", + "tabSelectProject": "Selezionare il progetto", + "tabIssueCodes": "Codici di emissione", + "issueCodes": "Codici di emissione", + "issuingCodes": "Codici di emissione...", + "importMethodText": { + "title": "Creare certificati personalizzati per l'albero", + "subtitle": "Utilizzate questo metodo (per un massimo di 1000 destinatari in una transazione) se uno dei seguenti criteri corrisponde al vostro caso d'uso:", + "details": { + "line1": "Voglio fornire il nome o l'e-mail del destinatario per ogni codice.", + "line2": "Voglio che Plant-for-the-Planet invii automaticamente un'e-mail ai destinatari una volta generato (opzionale).", + "line3": "Voglio emettere codici per diversi numeri di alberi." + } + }, + "genericMethodText": { + "title": "Creare codici generici", + "subtitle": "Utilizzate questo metodo se i seguenti criteri corrispondono al vostro caso d'uso:", + "details": { + "line1": "Tutti i codici avranno lo stesso valore.", + "line2": "Voglio generare un numero di codici per destinatari arbitrari.", + "line3": "I nomi e le e-mail non possono essere associati al codice." + } + }, + "projectName": "Nome del progetto", + "costPerUnit": "Costo per unità", + "labelComment": "Commento [Privato]", + "unitOfMeasurement": "Unità di misura", + "units": { + "ha": "ha", + "tree": "albero", + "m2": "m²" + }, + "unitsPerCode": "Unità per codice*", + "totalNumberOfCodes": "Numero totale di codici*", + "occasion": "Occasione", + "notificationLanguage": "Lingua di notifica", + "total": "Totale", + "chargeConsentText": "Facendo clic su Codici di emissione, si accetta che l'importo sopra indicato venga addebitato sul proprio conto.", + "invalidEmailWarningText": "Assicurarsi che l'e-mail del destinatario sia un'e-mail valida. L'utilizzo di e-mail fittizie o non valide comporterà la sospensione dell'account in conformità ai termini e alle condizioni della piattaforma.", + "projectRequired": "Non è stato selezionato alcun progetto.", + "unitsPerCodeRequired": "Ogni codice deve contenere almeno 1 unità.", + "codeQuantityRequired": "È necessario creare almeno 1 codice.", + "unitsPerCodeInvalidRange": "Un codice può contenere un massimo di 1000 unità.", + "codeQuantityInvalidRange": "È possibile creare un massimo di 5000 codici.", + "featureAvailability": "Questa funzione è disponibile solo per i progetti partner.", + "planetCashDisabled": "PlanetCash non è attivato. Per utilizzare questa funzione, attivare PlanetCash.", + "insufficientPCashBalance": "Equilibrio insufficiente.", + "addBalanceGeneric": "Fare clic qui per aggiungere fondi.", + "instructionsUploadCSV": { + "empty": "Trascinare e fare clic per selezionare un file .xslx / .csv da caricare.", + "error": "Verificare la presenza di problemi e trascinare qui il file .xslx / .csv per caricarlo.", + "processing": "Si prega di attendere mentre analizziamo il file...", + "success": "Continuare o trascinare qui il file .xlsx o .csv per sostituire il file corrente." + }, + "statusUploadCSV": { + "error": "Errore", + "success": "Analisi del file completata" + }, + "errorUploadCSV": { + "fileInvalidType": "Sono ammessi solo i file .csv e .xslx.", + "tooManyFiles": "Si prega di caricare solo un singolo file.", + "fileTooSmall": "Il file caricato sembra essere vuoto.", + "fileTooLarge": "Il file caricato deve avere una dimensione massima di 5 MB.", + "missingColumns": "Il file caricato non contiene le seguenti colonne: ", + "noRecipientData": "Non sono stati trovati dati del destinatario.", + "tooManyRecipients": "È possibile elaborare un massimo di 1000 destinatari in un'unica transazione.", + "unitsNotProvided": "Le unità sono mancanti/invalide per alcuni destinatari.", + "notifyNotPossible": "L'e-mail e il nome mancano per alcuni destinatari che devono essere avvisati.", + "instructionRowError": "Si è verificato un errore nella 1ª riga. Verificare se le istruzioni sono state cancellate o se ci sono dati aggiuntivi.", + "invalidEmails": "recipient_email contiene email fittizie/invalide nelle seguenti righe: {rowList}. Rimuovere le e-mail non valide o aggiungere quelle valide.", + "generalError": "Qualcosa è andato storto. Provare dopo un po'." + }, + "errorAddRecipient": { + "unitsNotProvided": "Obbligatorio", + "requiredForNotifications": "Richiesto (ai destinatari dell'e-mail)", + "emailInvalid": "Email non valida" + }, + "successUploadCSV": { + "ignoredColumns": "Le colonne extra sono state ignorate" + }, + "importInstructions": "Consultare la documentazione di qui, scaricare il modello Excel di qui e il modello CSV di qui.", + "tableHeaders": { + "recipient_name": "Nome del destinatario", + "recipient_email": "Email del destinatario", + "recipient_notify": "Inviare un'e-mail?", + "units": "Unità", + "recipient_message": "Messaggio" + }, + "tableHeaderHelpText": { + "recipient_name": "Opzionale. Nome del destinatario, riportato sul certificato e, se si è optato, nella mail inviata al destinatario. Richiesto se si desidera inviare messaggi di posta elettronica.", + "recipient_email": "Facoltativo. Richiesto per inviare il certificato al destinatario via e-mail.", + "recipient_notify": "Opzionale. Selezionare Sì se si desidera che Plant-for-the-Planet informi automaticamente il destinatario via e-mail.", + "units": "Obbligatorio. Numero di alberi che vengono consegnati al destinatario, ad esempio 5 per 5 alberi", + "recipient_message": "Opzionale. Messaggio per il destinatario che viene incluso nell'e-mail se notifica è sì. Se non viene fornito, verrà inviato un messaggio predefinito." + }, + "donationSuccess": "La tua donazione è andata a buon fine. La reindirizzeremo a breve per visualizzare i dettagli della donazione...", + "donationError": { + "planet_cash_insufficient_credit": "Credito disponibile = {availableBalance}. Caricare il saldo del conto PlanetCash per effettuare questa donazione.", + "default": "Qualcosa è andato storto. Provare dopo un po'.", + "planet_cash_payment_failure": "La transazione non è riuscita. {reason}", + "planet_cash_invalid_project": "Non è possibile effettuare una donazione al progetto selezionato." + }, + "titleAddRecipientButton": "Aggiungere il destinatario alla tabella", + "notifyRecipientOptions": { + "yes": "Sì", + "no": "No" + }, + "fileUploadWarning": "In questo modo verranno rimossi i dati dei destinatari esistenti; volete continuare?", + "unsavedDataWarning": "Alcuni dati del destinatario non sono stati salvati. Volete procedere? I dati non salvati andranno persi" + } +} diff --git a/public/static/locales/it/common.json b/public/static/locales/it/common.json index b4adc0c227..dbe9f1f10e 100644 --- a/public/static/locales/it/common.json +++ b/public/static/locales/it/common.json @@ -1,6 +1,7 @@ { "Common": { - "tree": "{count, plural, =0 {Alberi} =1 {Albero} other {Alberi}}", + "tree": "{count, plural, =1 {Albero} other {Alberi}}", + "m2": "m²", "by": "Di {tpoName}", "to_project_by_tpo": "A {projectName} di {tpoName}", "for": "per", @@ -14,11 +15,11 @@ "supportUs": "Sostienici", "leaders": "Leader", "leaderboard": "Classifica", - "me": "Montenegro", + "me": "Me", "signIn": "Accedi", "home": "Home", "donate_gift": "Donazione/Dono", - "plant": "Stabilimento", + "plant": "Impianto", "donate": "Dona", "gift": "Regalo", "continue": "Continua", @@ -70,7 +71,66 @@ "goBack": "Torna indietro", "deleteAccountMessage": "Per continuare la cancellazione, digita `{delete}`", "deleteAccountLabel": "Tipo: {delete}", + "edit": "Modifica", "howDoesThisWork": "Come funziona?", - "reviewInfo": "Il progetto è stato ispezionato nel corso di una revisione sul campo di più giorni nel <2>mese e soddisfa i nostri <5>standard." + "copiedToClipboard": "Copiato negli appunti!", + "close": "Chiudere", + "logout": "Disconnessione", + "featured": "In primo piano", + "treeMapper": "Mappatore di alberi", + "overview": "Panoramica", + "childrenAndYouth": "Bambini e giovani", + "trillionTrees": "Trilioni di alberi", + "yucatan": "Restauro dello Yucatán", + "partners": "Partner", + "changeChocolate": "The Change Chocolate", + "stopTalkingStartPlanting": "Stop talking. Start planting.", + "underMaintenance": "In manutenzione", + "forbidden": "Non sei autorizzato a visualizzare questa pagina!", + "connectionError": "Impossibile raggiungere il server. Controllare la connessione a Internet.", + "validationFailed": "Convalida fallita!", + "add": "Aggiungi", + "modalTitle": "Annullare tutti gli abbonamenti per procedere", + "modalSubtitle": "Annullare prima gli abbonamenti", + "deleteCondition": "Prima di procedere, assicuratevi di aver cancellato tutti gli abbonamenti.", + "showSubscriptions": "Mostra le mie iscrizioni", + "notFound": "Risorsa non trovata", + "tooManyRequest": "Troppe richieste. Attendere e riprovare più tardi o contattare l'amministratore del sistema per assistenza.", + "unauthorized": "Non autorizzato", + "validationError": "Errore di convalida", + "internalServerError": "Errore interno del server - Riprova più tardi!", + "serviceUnavailable": "L'app è in fase di manutenzione, per i dettagli controllare status.plant-for-the-planet.org", + "account_duplicate": "Il conto esiste già", + "line_item_amount_deviation": "Importo Deviazione", + "line_item_amount_invalid": "Importo non valido", + "line_item_amount_prohibited": "Importo vietato", + "idempotency_key_missing": "Chiave di idempotenza mancante nell'intestazione", + "line_item_invalid_donor_data": "Dati del donatore non validi", + "line_item_invalid_planet_cash_account": "Conto PlanetCash non valido", + "line_item_invalid_project": "Progetto non valido", + "line_item_missing_amount": "Importo mancante", + "line_item_missing_currency": "Valuta mancante", + "line_item_missing_quantity": "Quantità mancante", + "line_item_project_not_allowing_donations": "Il progetto non consente le donazioni", + "line_item_quantity_prohibited": "Quantità vietata", + "generic_error": "Qualcosa è andato storto. Controllare la connessione a Internet o riprovare più tardi.", + "missing_profile": "Profilo mancante", + "some_error": "Qualcosa è andato storto", + "planet_cash_payment_failure": "Mancato pagamento", + "planet_cash_insufficient_credit": "Credito insufficiente", + "planet_cash_invalid_project": "Progetto non valido", + "active_account_exists": "Esiste già un conto PlanetCash attivo", + "duplicate_account": "Il conto esiste già", + "token_expired": "Token scaduto. Effettuare nuovamente il login", + "project_not_available": "I dettagli del progetto non sono attualmente disponibili", + "topProject": "Progetto Top", + "viewReport": "Visualizza il rapporto", + "reviewInfo": "Il progetto è stato ispezionato nel corso di una revisione sul campo di più giorni nel {reviewMonth} e soddisfa i nostri standard.", + "standardsLink": "https://www.plant-for-the-planet.org/standards/", + "project": "Progetto", + "top_project_standards_fulfilled": "L'ispezione del progetto ha rivelato che questo progetto soddisfa almeno 12 dei 19 standard Top Project.", + "disabledDonateButtonText": "Il progetto non accetta attualmente donazioni. Ciò può essere dovuto al fatto che è completamente finanziato, che non è ancora stato esaminato o che non soddisfa al momento tutti i nostri standard di progetto, oppure che sceglie di utilizzare la piattaforma esclusivamente per i suoi strumenti di trasparenza.", + "notDonatable": "Non donabile", + "salesforceDisabledDonateButtonText": "Il progetto non accetta attualmente donazioni." } } diff --git a/public/static/locales/it/country.json b/public/static/locales/it/country.json index 0628727cd1..1f9a595134 100644 --- a/public/static/locales/it/country.json +++ b/public/static/locales/it/country.json @@ -1,5 +1,6 @@ { "Country": { + "auto": "Selezione automatica", "ac": "Ascension Island", "af": "Afghanistan", "ax": "Isole Åland", @@ -243,7 +244,7 @@ "ug": "Uganda", "ua": "Ucraina", "ae": "Emirati Arabi Uniti", - "gb": "Regno Unito di Gran Bretagna e Irlanda del Nord", + "gb": "UK", "un": "Nazioni Unite", "us": "Stati Uniti d'America", "um": "Isole Minori lontane degli Stati Uniti", diff --git a/public/static/locales/it/donate.json b/public/static/locales/it/donate.json index 76d4d83c6f..1ced97d47a 100644 --- a/public/static/locales/it/donate.json +++ b/public/static/locales/it/donate.json @@ -6,6 +6,7 @@ "yourTreesPlantedByOnLocation_plural": "I vostri alberi {treeCount} saranno piantati da {projectName} in {location}.", "myTreesPlantedByOnLocation": "I miei {treeCount} alberi sono stati piantati in {location}.", "myTreesPlantedByOnLocation_plural": "I miei {treeCount} alberi sono stati piantati in {location}.", + "projects": "Progetti", "topProjects": "Progetti Top", "allCountProjects": "Tutti {projectCount} Progetti", "searchProjects": "Ricerca progetti", @@ -67,7 +68,6 @@ "thisDonationSupports": "Questa donazione sostiene", "plantTreesWith": "Pianta alberi con", "textToShare": "Unisciti a {name} e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "thankyouHeaderText": "Siamo sulla strada di un \n

Trilione di alberi

", "shareTextTitle": "Smettila di parlare. Avviare l'impianto", "textToShareLinkedin": "Unisciti a {name} e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica", "textToShareForMe": "Unisciti a me e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica", @@ -85,7 +85,6 @@ "payWithGiroPay": "Paga con GiroPay", "payWithSofort": "Paga con SOFORT", "donationFailed": "Donazione fallita", - "donationFailedMessage": "Qualcosa è andato storto durante il completamento del pagamento. Se continui ad avere problemi, contattaci all'indirizzo support@plant-for-the-planet.org", "donationPending": "Completare la sua donazione", "donationPendingMessage": "Attualmente stiamo aspettando la conferma dalla sua banca. Questo potrebbe richiedere un po' di tempo quindi, per favore, sentiti libero di chiudere questa pagina. Ti invieremo la tua ricevuta via e-mail a breve.", "sepaMessage": "Fornendo il tuo IBAN e confermando questo pagamento, autorizzi Plant-for-the-Planet e Stripe, il nostro fornitore di servizi di pagamento, a inviare istruzioni alla tua banca per addebitare il tuo conto. Hai diritto a un rimborso dalla tua banca secondo i termini e le condizioni del tuo accordo con la tua banca. Se hai qualche problema con la tua donazione, inviaci una mail a support@plant-for-the-planet.org", @@ -96,6 +95,21 @@ "nameAlreadyPublished": "Il tuo nome completo apparirà nella classifica poiché il tuo profilo Plant-for-the-Planet è attualmente pubblico.", "orgNamePublishedTax": "Il nome dell'azienda è visibile sulla nostra classifica e sull'app. Le ricevute delle detrazioni fiscali saranno emesse per lo stesso nome.", "orgNamePublished": "Il nome dell'azienda è visibile sulla nostra classifica e sull'app.", - "aboutProject": "Circa il progetto" + "aboutProject": "Circa il progetto", + "acceptingDonations": "Accettazione di donazioni", + "natural-regeneration": "Natural Regeneration", + "managed-regeneration": "Managed Regeneration", + "large-scale-planting": "Large Scale Restoration", + "agroforestry": "Agroforestry", + "urban-planting": "Urban Restoration", + "other-planting": "Restoration", + "mangroves": "Mangroves", + "purpose": "Scopo", + "projectPurpose": "Scopo del progetto", + "type": "Tipo", + "projectType": "Tipo di progetto", + "restoration": "Restauro", + "filters": "Filtri", + "perM2": "per m²" } } diff --git a/public/static/locales/it/donationLink.json b/public/static/locales/it/donationLink.json index ffcd4415b0..5143042110 100644 --- a/public/static/locales/it/donationLink.json +++ b/public/static/locales/it/donationLink.json @@ -1 +1,25 @@ -{ } +{ + "DonationLink": { + "donationLinkTitle": "Creare il link per la donazione", + "donationLinkDescription": "Costruite il link per le donazioni in base alle vostre esigenze, per offrire ai vostri donatori un'esperienza senza problemi. Utilizzate l'anteprima per vedere come funzionerà il risultato finale.", + "qrCodeDiscription": "Invece del link, è possibile fornire il codice QR per raggiungere il progetto desiderato.", + "labelCountry": "Paese", + "labelLanguages": "Lingua", + "countryLanguageTitle": "Impostare il Paese e la lingua", + "projectTitle": "Impostare il progetto", + "treeCounterTitle": "Sostenere il mio TreeCounter", + "testingTitle": "Modalità di test", + "urlTitle": "L'URL del vostro link di donazione", + "qrCodeTitle": "Il codice QR della vostra donazione", + "languages": "Le lingue", + "preview": "Anteprima", + "copy": "Copia", + "treeCounterSubtitle": "Le donazioni di alberi tramite questo link sostengono direttamente il mio profilo", + "testingModeSubtitle1": "Per fare una prova, utilizzare il link visualizzato ora. Questo è solo a scopo di prova; per condividere il link corretto è necessario disattivare la modalità di prova.", + "testingModeSubtitle2": "È possibile testare il flusso di donazioni utilizzando le carte", + "linkAndQRCodeUpdatedMessage": "Il link e il codice QR sono stati aggiornati", + "treeCounterPrivateAccountSubtitle": "Per supportare il proprio profilo, è necessario impostarlo come pubblico nelle impostazioni dell'account.", + "automaticSelection": "Selezione automatica", + "qrCodeFileName": "Codice-QR per le donazioni" + } +} diff --git a/public/static/locales/it/editProfile.json b/public/static/locales/it/editProfile.json index 75f993b62e..e010b9db58 100644 --- a/public/static/locales/it/editProfile.json +++ b/public/static/locales/it/editProfile.json @@ -22,16 +22,41 @@ "accountPrivacyChangeText": "Per creare un widget di profilo devi avere un account pubblico. Cliccando su continua cambi le tue impostazioni di privacy in pubblico.", "continue": "Continua", "cancel": "Annulla", + "termAndCondition": "Accetto i Termini e le Condizioni della piattaforma Plant-for-the-Planet.", + "termAndConditionError": "Accettare i termini e le condizioni", "fieldLabels": { "profileType": "Sono un", + "firstName": "Nome", + "lastName": "Cognome", "name": "Nome di {type}", + "email": "Email", + "address": "Indirizzo", + "city": "Città", + "zipCode": "Codice postale", + "country": "Paese", + "bio": "Descrizione del profilo", "website": "Sito web", "privateAccount": "Conto privato", "subscribe": "Iscriviti alle notizie via e-mail" }, "validationErrors": { + "maxChars": "Deve essere al massimo di {max} caratteri", + "firstNameRequired": "Il campo Nome è obbligatorio", + "firstNameInvalid": "Il nome non è valido. Non può iniziare con un carattere speciale e sono ammessi solo questi caratteri speciali: spazio ' . -", + "lastNameRequired": "Il campo Cognome è obbligatorio", + "lastNameInvalid": "Il cognome non è valido. Non può iniziare con un carattere speciale e sono ammessi solo i seguenti caratteri speciali: spazio ' -", + "emailRequired": "L'e-mail è necessaria", "nameRequired": "Si prega di inserire un nome", - "websiteInvalid": "Inserire l'URL del sito web valido" + "nameInvalid": "Il nome non è valido. Sono ammessi solo i seguenti caratteri speciali: spazio . , ' & ( ) ! -", + "addressRequired": "L'indirizzo è richiesto", + "addressInvalid": "L'indirizzo non è valido. Sono ammessi solo questi caratteri speciali: spazio . , # - /", + "cityRequired": "La città è richiesta", + "cityInvalid": "La città non è valida. Sono ammessi solo lettere e questi caratteri speciali: spazio . , ( ) -", + "zipCodeRequired": "Il codice postale è obbligatorio", + "zipCodeInvalid": "Il codice postale non è valido", + "websiteInvalid": "Inserire l'URL del sito web valido", + "countryRequired": "Il paese è richiesto", + "companyRequired": "Il nome della società è obbligatorio" } } } diff --git a/public/static/locales/it/giftfunds.json b/public/static/locales/it/giftfunds.json index ffcd4415b0..c151a06e3d 100644 --- a/public/static/locales/it/giftfunds.json +++ b/public/static/locales/it/giftfunds.json @@ -1 +1,9 @@ -{ } +{ + "Giftfunds": { + "title": "GiftFund", + "description1": "Se vedete questa pagina, significa che avete ancora un saldo nel vostro GiftFund per il vostro conto PlanetCash attivo. Controllate le informazioni qui sotto.", + "description2": "In caso di domande, contattate il vostro Key Account Manager.", + "project": "Progetto", + "units": "Unità disponibili" + } +} diff --git a/public/static/locales/it/managePayouts.json b/public/static/locales/it/managePayouts.json index ffcd4415b0..f2478a0066 100644 --- a/public/static/locales/it/managePayouts.json +++ b/public/static/locales/it/managePayouts.json @@ -1 +1,76 @@ -{ } +{ + "ManagePayouts": { + "title": "Gestire i pagamenti", + "description": "Mantenere aggiornate le informazioni sui pagamenti (ad es. calendario, coordinate bancarie) per facilitare i pagamenti", + "tabPayoutSchedule": "Programma di pagamento", + "tabAddBankDetails": "Aggiungere dettagli bancari", + "tabOverview": "Panoramica", + "payoutInformation1": "I pagamenti vengono elaborati automaticamente ogni anno, o quando un'organizzazione raccoglie 30.000 euro o il suo equivalente in altra valuta.", + "payoutInformation2": "I pagamenti vengono effettuati dalla Fondazione Plant-for-the-Planet e dalle sue organizzazioni consorelle, come Plant-for-the-Planet USA, Plant-for-the-Planet Svizzera ecc.", + "payoutInformation3": "È possibile regolare il piano dei pagamenti e ricevere pagamenti frequenti, a patto di soddisfare il criterio dell'importo minimo di 1.500 euro.", + "supportInformation": "Se avete un caso eccezionale, contattate support@plant-for-the-planet.org.", + "scheduleFrequencies": { + "monthly": "Mensile", + "quarterly": "Trimestrale", + "semiannually": "Semestrale", + "annually": "Annuale", + "manual": "Manuale" + }, + "defaultCurrency": "Predefinito", + "labels": { + "currency": "Valuta", + "scheduleFrequency": "Frequenza di pagamento", + "payoutMinAmount": "Importo minimo di pagamento", + "bankName": "Nome della banca", + "bankAddress": "Indirizzo della banca", + "bankCountry": "Banca Paese", + "holderName": "Nome del titolare del conto", + "holderAddress": "Indirizzo del titolare del conto", + "remarks": "Dettagli aggiuntivi", + "accountNumber": "IBAN / Numero di conto", + "routingNumber": "Numero ABA / Routing (solo per gli Stati Uniti)", + "bic": "BIC / SWIFT", + "branchCode": "Codice del ramo" + }, + "errors": { + "scheduleFrequencyRequired": "È richiesta la frequenza di pagamento", + "payoutMinAmountRequired": "È richiesto un importo minimo di versamento", + "payoutMinAmountTooLow": "L'importo minimo del pagamento deve essere almeno {currency} {minAmount}", + "bankNameRequired": "Il nome della banca è obbligatorio.", + "bankAddressRequired": "È richiesto l'indirizzo della banca.", + "holderNameRequired": "Il nome del titolare è obbligatorio.", + "holderAddressRequired": "È richiesto l'indirizzo del titolare.", + "accountNumberRequired": "Il numero di conto è obbligatorio.", + "bicRequired": "È richiesto il codice BIC/SWIFT.", + "noAccountFound": "Non è stato recuperato alcun account" + }, + "placeholders": { + "payoutMinAmount": "Dovrebbe essere almeno {currency} {minAmount}", + "bankName": "ad esempio Century Bank LLC", + "bankAddress": "es. 1 West St, Hamington Way, MA, 10311, USA", + "holderName": "ad esempio, John Doe", + "holderAddress": "es. 21 Penn Avenue, MA 10317 USA", + "remarks": "ad esempio, includere il rif. acct=1237 nel bonifico." + }, + "helperText": { + "currency": "Selezionate \"Default\" se questo è il vostro conto bancario standard, se dovete fornire dettagli speciali per una valuta, selezionatela qui e fornite i dettagli. Verranno inoltre utilizzati gli importi minimi standard per il pagamento.", + "remarks": "Fornire ulteriori dettagli, ad esempio le coordinate bancarie dell'intermediario, i PC (codici di scopo) o altri riferimenti." + }, + "saveButton": "Risparmiare", + "accountError": { + "min_amount_range": "L'importo minimo del pagamento deve essere almeno {currency} {min}.", + "min_amount_forbidden": "Non è possibile specificare un importo minimo di versamento per il conto predefinito.", + "account_duplicate": "Esiste già un account {currency}.", + "default": "Qualcosa è andato storto durante la creazione di un account. Riprovare dopo un po'." + }, + "accountCreationSuccess": "I dati dell'account sono stati salvati con successo.", + "accountUpdationSuccess": "I dati del vostro conto sono stati aggiornati con successo.", + "scheduleSaveSuccess": "Il vostro piano di pagamento è stato salvato con successo.", + "editAccountButton": "Modifica dell'account", + "accountTitleText": "Trasferimento per {currency}", + "addBankDetailsButton": "Aggiungere dettagli bancari", + "noBankAccountText": "Non avete ancora aggiunto le coordinate bancarie.", + "editBankAccountTitle": "Modifica dell'account", + "minPayoutText": "Min. Pagamento: {amount}" + } +} diff --git a/public/static/locales/it/manageProjects.json b/public/static/locales/it/manageProjects.json index 0e8720ed3c..cc16a82c2a 100644 --- a/public/static/locales/it/manageProjects.json +++ b/public/static/locales/it/manageProjects.json @@ -5,6 +5,7 @@ "detailedAnalysis": "Analisi dettagliata", "projectSites": "Siti del progetto", "projectSpending": "Spesa del progetto", + "protectionStartedIN": "La protezione è iniziata in", "review": "Recensione", "name": "Nome del progetto", "nameValidation": "Inserire il nome del progetto", @@ -15,6 +16,7 @@ "countTarget": "Obiettivo Albero", "countTargetValidation": "Inserire l'obiettivo dell'albero", "countTargetValidation2": "L'obiettivo dell'albero dovrebbe essere più di 1", + "conservationImpacts": "Impatti sulla conservazione", "website": "Sito web", "websiteValidationRequired": "Inserire l'URL del sito web", "websiteValidationInvalid": "URL del sito web non valido", @@ -23,16 +25,24 @@ "receiveDonations": "Ricevere donazioni", "receiveDonationsInfo": "Attivare una volta completato il profilo del progetto. Plant-for-the-Planet esaminerà il profilo e vi informerà se siete idonei a ricevere donazioni attraverso questa piattaforma. Questo potrebbe richiedere alcune settimane.", "unitCost": "Costo per albero (in EUR)", + "unitCostRequired": "Inserire il costo per unità", + "invalidUnitCost": "Il costo per unità deve essere superiore a 0 euro e inferiore a 100 euro", + "exit": "Uscita dai progetti", "projectLocation": "Ubicazione del progetto", "visitorAssistanceLabel": "Fornirò alloggio, accesso al sito e trasporto locale se un recensore verrà inviato da Plant-for-the-Planet.", "publishProject": "Pubblicare il progetto", "saveAndContinue": "Salva e continua", + "skip": "Salto", "youtubeURL": "Collegamento video Youtube", "youtubeURLValidation": "Collegamento video Youtube non valido", "addCaption": "Aggiungi didascalia", "yearOfAbandonment": "Circa anno di abbandono", + "labelRestorationStarted": "Inizio del restauro", "plantingDensity": "Densità di impianto", + "maxPlantingDensity": "Densità massima di impianto", "employeeCount": "Conteggio dei dipendenti", + "endangeredSpeciesValidation": "Non è un ingresso valido", + "endangeredSpecies": "Specie in pericolo", "mainChallenge": "Sfida principale", "whyThisSite": "Perché questo sito?", "siteOwner": "Proprietario del sito", @@ -60,6 +70,29 @@ "yearAbandonedInfo": "Quando è stato l'ultimo intervento umano significativo nel sito? Incluso il disboscamento, l'agricoltura, il pascolo del bestiame, la combustione indotta dall'uomo.", "treePerHa": "alberi per ha", "employeesCountInfo": "Equivalente a una settimana di 40 ore. Vale a dire che due dipendenti a metà tempo contano come uno.", + "labelRestorationSeasons": "Stagioni di restauro", + "labelMainInterventions": "Interventi principali", + "interventionTypes": { + "assisting-seed-rain": "Assisting Seed Rain", + "control-remove-livestock": "Control/Remove Livestock", + "cut-suppressing-grass": "Cut/Suppressing Grass", + "direct-seeding": "Direct Seeding", + "enrichment-planting": "Enrichment Planting", + "establish-firebreaks": "Enrichment Planting", + "fire-patrols": "Fire Patrols", + "fire-suppression-team": "Fire Suppression Team", + "liberating-regenerants": "Fire Suppression Team", + "maintenance": "Maintenance", + "marking-regenerants": "Marking Regenerants", + "other-interventions": "Other Interventions", + "planting-trees": "Planting Trees", + "removal-contaminated-soil": "Removal of Contaminated Soil", + "removal-invasive-species": "Removal of Invasive Species", + "soil-improvement": "Soil Improvement", + "stop-tree-harvesting": "Stop Tree Harvesting" + }, + "missingInterventionsError": "Selezionare almeno un intervento", + "timePeriod": "Periodo di tempo", "max300Chars": "Massimo 300 caratteri ammessi", "longTermPlanInfo": "Quali misure sono in atto per proiettare la foresta a lungo termine? Come si finanzia? Quali risorse saranno estratte dal sito?", "backToMedia": "Torna ai media del progetto", @@ -67,6 +100,9 @@ "siteStatusPlanted": "Piantato", "siteStatusBarren": "Arido", "siteStatusReforestation": "Riforestazione", + "siteStatusNotYetprotected": "Non ancora protetto", + "siteStatusPartiallyprotected": "Parzialmente protetto", + "siteStatusFullyprotected": "Completamente protetto", "siteStatus": "Stato del sito", "selectProjectStatus": "Selezionare lo stato del progetto", "saveAndAddSite": "Salva e aggiungi un altro sito", @@ -89,6 +125,8 @@ "pendingReview": "In attesa di revisione", "submitForReview": "Invia per la revisione", "addProject": "Aggiungi progetto", + "addNewProject": "Aggiungi nuovo progetto", + "conservationProject": "Progetto di conservazione", "abandonment": "Abbandono", "survivalRate": "Tasso di sopravvivenza", "survivalRateInfo": "Percentuale di alberi che sopravvivono al primo anno di piantagione", @@ -100,12 +138,13 @@ "issueDate": "Data di emissione", "acquisitionYear": "Anno di acquisizione", "largeScalePlanting": "Impianto su larga scala", - "agroforestry": "Agroforesteria", - "naturalRegeneration": "Rigenerazione naturale", - "managedRegeneration": "Rigenerazione gestita", - "urbanPlanting": "Piantumazione urbana", - "otherPlanting": "Altri impianti", + "agroforestry": "Agroforestry", + "naturalRegeneration": "Natural Regeneration", + "managedRegeneration": "Managed Regeneration", + "urbanPlanting": "Urban Planting", + "otherPlanting": "Other Planting", "projectType": "Tipo di progetto", + "protectionSeasons": "Stagioni di protezione", "polygonRequired": "Il poligono è richiesto", "fileSizeLimit": "Il file è più grande di 10 mb", "fileImageOnly": "Il tipo di file deve essere immagine", @@ -116,6 +155,94 @@ "latitude": "Latitudine", "longitude": "Longitudine", "latitudeRequired": "La latitudine è richiesta", - "longitudeRequired": "La longitudine è richiesta" + "longitudeRequired": "La longitudine è richiesta", + "manageProject": "Gestire i progetti", + "descriptionForManageProjects": "Mostrate il vostro lavoro di restauro per il monitoraggio e per ricevere donazioni.", + "manageProjects": "Gestire i progetti", + "addConservationProjects": "Aggiungere progetti di conservazione", + "areaProtected": "Area protetta (in ha)", + "areaProtectedInfo": "Per inserire i decimali, separarli con un \" . \"", + "ecosystem": "Ecosistema", + "protectionStartedIn": "Protezione avviata in", + "actions": "Azioni", + "activitySeasons": "Stagioni di attività", + "addAnotherSpecies": "Aggiungere un'altra specie", + "add": "Aggiungi", + "forestProtectionType": "Tipo di protezione forestale/Misure", + "ecologicalBenefits": "Benefici ecologici", + "socialBenefits": "Benefici sociali", + "coBenefits": "Benefici congiunti", + "benefits": "Vantaggi", + "tropicalMoistForest": "Tropical Moist Forest", + "dry": "Dry", + "ecosystemType": "Selezionare il tipo di ecosistema", + "tropicalDryForests": "Tropical Dry Forests", + "tropicalConiferousForests": "Tropical Coniferous Forests", + "tropicalGrasslandsForests": "Tropical Grasslands Forests", + "temperateBroadleafForests": "Temperate Broadleaf Forests", + "temperate-coniferous-forests": "Temperate Coniferous Forests", + "temperateGrasslandsForests": "Temperate Grasslands Forests", + "mediterraneanForests": "Mediterranean Forests", + "mangroves": "Mangroves", + "deserts": "Deserts", + "floodedGrasslands": "Flooded Grasslands", + "montaneGrasslands": "Montane Grassland", + "borealForests": "Boreal Forests", + "tundra": "Tundra", + "temperateConiferousForests": "Temperate Coniferous Forests", + "ecosystemTypes": { + "tropical-moist-forests": "Tropical Moist Forests", + "tropical-dry-forests": "Tropical Dry Forests", + "tropical-coniferous-forests": "Tropical Coniferous Forests", + "tropical-grasslands-forests": "Tropical Grasslands Forests", + "temperate-broadleaf-forests": "Temperate Broadleaf Forests", + "temperate-coniferous-forests": "Temperate Coniferous Forests", + "temperate-grasslands-forests": "Temperate Grassland Forests", + "mediterranean-forests": "Mediterranean Forests", + "mangroves": "Mangroves", + "deserts": "Deserts", + "flooded-grasslands": "Flooded Grasslands", + "montane-grasslands": "Montane Grasslands", + "boreal-forests": "Boreal Forests", + "tundra": "Tundra" + }, + "unitTypeRequired": "Selezionare un tipo di unità", + "unitType": "Tipo di unità", + "unitTypes": { + "tree": "albero", + "m2": "m²" + }, + "tenure": "Mandato", + "rent": "Affitto", + "ownershipType": "Tipo di proprietà", + "landOwnershipType": "Tipo di proprietà del terreno", + "restorationProject": "Progetto di restauro", + "addProjetDescription": "Siete a pochi passi dal mostrare il vostro lavoro sulla piattaforma Plant-for-the-Planet.", + "englishOnly": " Si prega di creare progetti solo in inglese.", + "important": "Importante:", + "addProjetContact": "Se avete bisogno di aiuto, contattateci all'indirizzo ", + "supportLink": "support@plant-for-the-planet.org", + "wrongCoordinates": "Coordinate sbagliate", + "actionInfo": "Le azioni che la vostra organizzazione sta intraprendendo per conservare l'ecosistema.", + "mainChallengeInfo": "La sfida più grande che questo progetto sta affrontando.", + "motivationInfo": "La motivazione della protezione di questo specifico ecosistema.", + "hectar": "ettaro", + "validation": "{fieldName} non è valido", + "date": "Data", + "plantingDensityValidation": "Inserire la densità di impianto", + "maxPlantingDensityValidation": "inserire Densità massima di impianto", + "onlyEnglish": "Si prega di creare/modificare i progetti solo in inglese. Le traduzioni dei progetti sono gestite automaticamente da Plant-for-the-Planet.", + "since": "da", + "Since": "Da quando", + "and": "e", + "errorForMaxPlantingDensity": "Questo valore deve essere maggiore della densità di impianto", + "managePayoutsButton": "Gestire i pagamenti", + "siteNameValidation": "Inserire il nome del sito", + "reviewNote": "Nota importante: Plant-for-the-Planet esaminerà e convaliderà i vostri dati. Per continuare il processo di inserimento e verifica, e per approvare il vostro progetto per le donazioni, è necessario fornire diversi documenti:", + "legalAccreditation": "Accreditamento legale (certificato di registrazione/numero di registrazione) che dimostri lo stato di beneficenza/non profit della vostra organizzazione - non più vecchio di 2 anni!", + "taxExemption": "Documentazione di esenzione fiscale (se applicabile nel vostro paese)", + "annualReport": "Ultimo rapporto annuale", + "financialReport": "Ultima relazione finanziaria certificata", + "PlantingReport": "Relazione sullo stato di avanzamento del progetto" } } diff --git a/public/static/locales/it/maps.json b/public/static/locales/it/maps.json index 90fb345f1e..66c259ac1a 100644 --- a/public/static/locales/it/maps.json +++ b/public/static/locales/it/maps.json @@ -41,6 +41,12 @@ "daysAgo": "{days} giorni fa", "today": "Oggi", "yesterday": "Ieri", - "clickForDetails": "Clicca per i dettagli" + "clickForDetails": "Clicca per i dettagli", + "treeMapper": "TreeMapper", + "showProjectList": "Mostra elenco progetti", + "showProjectDetails": "Mostra i dettagli del progetto", + "hideProjectList": "Nascondere l'elenco dei progetti", + "hideProjectDetails": "Nascondi i dettagli del progetto", + "countries": "Paesi" } } diff --git a/public/static/locales/it/me.json b/public/static/locales/it/me.json index 38e3fa528a..19c9d25368 100644 --- a/public/static/locales/it/me.json +++ b/public/static/locales/it/me.json @@ -1,10 +1,32 @@ { "Me": { + "managePayouts": { + "menuText": "Gestire i pagamenti", + "titleOverview": "Gestione dei pagamenti - Panoramica", + "titleAddBankDetails": "Gestire i pagamenti - Aggiungere dettagli bancari", + "titlePayoutSchedule": "Gestire i pagamenti - Programmare i pagamenti", + "titleEditBankDetails": "Gestione dei pagamenti - Modifica dei dati bancari" + }, + "donationLinkTitle": "Link per le donazioni", + "planetcash": { + "menuText": "PlanetCash", + "submenuText": "Il mio PlanetCash", + "titleAccount": "PlanetCash - Conti", + "titleTransactions": "PlanetCash - Transazioni", + "titleCreateAccount": "PlanetCash - Creare un conto" + }, "treesPlanted": "Albero piantato", "treesPlanted_plural": "Alberi piantati", + "bulkCodesTitleStep3": "Generazione di certificati e codici per alberi - Emissione di codici", + "bulkCodesTitleStep2": "Generare certificati e codici degli alberi - Selezionare il progetto", + "bulkCodesTitle": "Generare certificati e codici ad albero - Selezionare il metodo", + "bulkCodes": "Certificati e codici", "target": "Destinatario", + "editTarget": "Modifica obiettivo", "share": "Condividi", "registerTrees": "Registrare gli alberi", + "registeredTree": "Albero registrato", + "linkedIn": "LinkedIn", "registerTreesDescription": "Registrate gli alberi che avete piantato voi stessi, ad esempio nel vostro giardino.", "myForest": "La mia foresta", "giftToGiftee": "Regalo a {gifteeName}", @@ -42,19 +64,66 @@ "filters": "Filtri", "registeredTrees": "Alberi registrati", "embedWidget": "Embed Widget", + "donationLink": "Creare un link di donazione", + "gift": "Regalo", + "donation": "Donazione", "tree-donation": "Donazione di alberi", "tree-gift": "Regalo dell'albero", + "tree-cash": "TreeCash", + "planet-cash": "PlanetCash", "trees": "Alberi", "amount": "Importo", "created": "Data di creazione", + "paymentMethod": "Metodo di pagamento", + "frequency": "Frequenza", + "monthly": "Mensile", + "yearly": "Annuale", + "totalDonated": "Totale donato", + "firstDonation": "Data della prima donazione", + "donorNameRequired": "Nome del donatore Richiesto", + "donationAmountRequired": "Importo della donazione richiesto", + "frequencyRequired": "Frequenza richiesta", + "dateRequired": "Data richiesta", "project": "Nome del progetto", + "planetCashPayment": "Pagamento PlanetCash", "method": "Metodo di pagamento", + "unitCost": "Costo per {unitType}", "treeCount": "Conteggio degli alberi", "lastUpdate": "Ultimo aggiornamento", "donorCertificate": "Certificato del donatore", + "editDonation": "Modifica donazione", + "pauseDonation": "Pausa Donazione", + "cancelDonation": "Annullamento della donazione", + "reactivateDonation": "Riattiva la donazione", + "resumeDonation": "Donazione del curriculum", + "donationName": "Nome della donazione", + "donationAmount": "Importo della donazione", + "makeChanges": "Apportare modifiche", + "cancel": "Annullamento", + "yes": "Sì", + "no": "No", + "editDonationConfirmation": "Modifica donazione", + "editDonationDescription": "È possibile modificare le seguenti opzioni:", + "pauseDonationConfirmation": "Pausa Donazione", + "pauseDonationDescription": "Dopo la pausa, è possibile riavviare l'applicazione riavviando.", + "pauseUntilResume": "Pausa fino alla ripresa", + "pausedUntilResumed": "In pausa fino alla ripresa", + "pausedUntil": "In pausa fino a quando", + "pauseUntilDate": "Pausa fino alla data selezionata", + "reactivateDonationConfirmation": "Riattiva la donazione", + "reactivateDonationDescription": "La vostra donazione sarà riattivata e sarà fatturata alla data {currentPeriodEnds}", + "cancelDonationConfirmation": "Annullamento della donazione", + "cancelDonationDescription": "Una volta annullata, la donazione non può essere riavviata.", + "cancelDonationPaypalDescription": "Questa donazione viene annullata immediatamente e non può essere riavviata.", + "cancelledOn": "Annullato il", + "willBeCancelledOn": "Sarà cancellato il", + "nextOn": "Il prossimo", "download": "Scaricare", "donations": "Donazioni", "in-progress": "In corso", + "donation-in-progress": "In corso", + "donation-tree-cash": "TreeCash", + "donation-success": "Successo", "cancelled": "Cancellato", "card": "Scheda", "sepa": "SEPA", @@ -69,8 +138,145 @@ "dispute-lost": "Disputa persa", "nameForest": "{name}'s Forest", "taxReceipt": "Ricevuta fiscale", + "history": "La storia", + "recurrency": "Donazioni ricorrenti", + "new": "Nuovo", + "beta": "Beta", + "date": "Data", + "treemapper": "Mappatore di alberi", + "register-trees": "Registro Alberi", + "manage-projects": "Gestire i progetti", + "app-payouts": "Pagamenti dell'app", + "app-payout-open": "Pagamenti aperti", + "app-payout-pending": "Pagamenti in sospeso", + "app-payout-assigned": "Pagamenti assegnati", + "app-payout-complete": "Pagamenti completati", + "app-payout": "Pagamento dell'app", + "reference": "Riferimento", + "fee": "Tassa", + "net": "NETTO", + "status": "Stato", + "paymentDate": "Data di pagamento", + "bankName": "Nome della banca", + "accountHolder": "Titolare del conto", + "aba": "ABA", + "bic": "BIC", + "iban": "IBAN", + "swift": "SWIFT", + "isDefault": "Conto predefinito", + "bankAccountCreated": "Conto bancario creato", + "bankAccountUpdated": "Conto bancario aggiornato", + "donation-all": "Donazioni", + "donation-canceled": "Annullato", + "payout-all": "Pagamenti", + "payout-action-required": "Azione richiesta", + "payout-pending": "In attesa", + "payout-completed": "Completato", + "donorName": "Nome del donatore", + "paidAmount": "Importo pagato", + "projectGuid": "GUID del progetto", + "totalAmount": "Importo totale", + "disputeFee": "Tassa per le controversie", + "planetFee": "Tassa sul pianeta", + "transactionFee": "Commissione di transazione", + "transferFee": "Tassa di trasferimento", + "giftComment": "Commento (privato)", + "giftOccasion": "Occasione", + "open": "Aperto", + "downloads": "Download", + "account": "Conto", + "loadMore": "Per saperne di più", "setTarget": "Impostare l'obiettivo", "targetSave": "Salva", - "targetErrorMessage": "Il numero deve essere positivo o superiore a zero" + "targetErrorMessage": "Il numero deve essere positivo o superiore a zero", + "taxDeductibleReceipt": "Ricevuta deducibile dalle tasse", + "giftCertificate": "Buono regalo", + "downloadCodes": "Scarica i codici", + "downloadCodesGeneralError": "Download fallito. Riprovare dopo qualche tempo.", + "downloadCodesNetworkError": "Impossibile recuperare i codici. Controllare la rete.", + "paypal-paypal": "Paypal", + "stripe-": "Striscia", + "unknown-method": "Sconosciuto", + "stripe-sofort": "Sofort (Stripe)", + "tree-cash-tree-cash": "TreeCash", + "planet-cash-planet-cash": "PlanetCash", + "stripe-card": "Carta di credito/debito", + "stripe-giropay": "GiroPay (Stripe)", + "action-required": "Azione richiesta", + "completed": "Completato", + "donationsSubTitle": "Gestite tutte le donazioni e i pagamenti da un unico luogo.", + "recurrencySubTitle": "Gestite tutte le vostre donazioni in valuta da un unico posto.", + "payments": "Pagamenti", + "stripe-sepa_debit": "SEPA (Stripe)", + "sepa_debit": "SEPA (Stripe)", + "offline": "Non in linea", + "offline-offline": "Non in linea", + "offline-transfer": "Non in linea", + "profile": "Profilo", + "projects": "Progetti", + "settings": "Impostazioni", + "editProfile": "Modifica profilo", + "deleteProfile": "Cancellare il profilo", + "widgets": "Widget", + "pauseNote": "Nota: è possibile selezionare una data successiva alla fine del periodo corrente.", + "cancelImmediately": "Annulla immediatamente", + "cancelOnSelectedDate": "Selezionare la data di cancellazione", + "conservation-donation": "Donazione per la conservazione", + "funds-donation": "Donazione", + "bouquet-donation": "Donazione di bouquet", + "transferDetails": "Dettagli sul trasferimento", + "beneficiary": "Beneficiario", + "donationNote": { + "offline-offline": "I bonifici bancari impiegano solitamente da 1 a 5 giorni lavorativi per raggiungerci. Non appena il bonifico arriva, vi invieremo un'e-mail di conferma con le ricevute (e il vostro certificato).", + "stripe-sepa_debit": "I pagamenti SEPA richiedono 2-14 giorni lavorativi (di solito 3-5 giorni). Non appena il bonifico arriva, vi invieremo un'e-mail di conferma con le ricevute (e il certificato).", + "stripe-sofort": "I pagamenti SOFORT richiedono 2-14 giorni lavorativi (di solito 2-3 giorni). Non appena il bonifico arriva, vi invieremo un'e-mail di conferma con le ricevute (e il certificato).", + "in-dispute": "Il vostro trasferimento è stato contestato. Di solito i fornitori di pagamento addebitano una tassa di contestazione di $7 - $15,00. Contattare support@plant-for-the-planet.org per i dettagli." + }, + "active": "attivo", + "canceled": "annullato", + "incomplete": "in attesa", + "incomplete_expired": "annullato", + "past_due": "scaduto", + "unpaid": "non retribuito", + "trialing": "attivo", + "paused": "in pausa", + "plantLocations": "Sedi degli impianti", + "mySpecies": "La mia specie", + "import": "Importazione", + "pausingDonation": "Mettere in pausa la donazione", + "cancellingDonation": "Annullamento della donazione", + "reactivatingDonation": "Riattivazione della donazione", + "editingDonation": "Modifica della donazione", + "noteToWait": "Nota: l'aggiornamento della donazione ricorrente richiederà 5-10 minuti", + "apiKey": "Chiave API", + "apiKeyMessage1": "La chiave API è come una password digitale che consente di agire come profilo in qualsiasi applicazione. Consente inoltre alle applicazioni di effettuare donazioni a vostro nome, di utilizzare PlanetCash e di visualizzare le transazioni.", + "apiKeyMessage2": "Una volta generata una chiave API, richiederemo un'autenticazione a due fattori per il vostro accesso. Questa potrà essere impostata al prossimo accesso.", + "apiKeyMessage3": "La rigenerazione di una chiave API invaliderà immediatamente la chiave API esistente.", + "regenerateKey": "Chiave di rigenerazione", + "giftFund": "Fondo per le donazioni", + "dataExplorer": "Esploratore dati", + "switchUser": "Impersonare un utente", + "switchUserMessage": "Inserire l'e-mail dell'utente che si desidera cambiare nel campo sottostante.", + "profileEmail": "Profilo Email", + "supportPin": "Pin di supporto", + "alphaNumeric": "Inserire un codice alfanumerico di 4 cifre", + "switch": "Impersonare", + "targetUser": "Al momento stai impersonando {impersonatedEmail}", + "exitImpersonation": "Uscita dall'impersonificazione", + "enterTheEmail": "Immettere l'e-mail dell'utente di destinazione", + "enterSupportPin": "Inserire il pin di supporto dell'utente di destinazione", + "invalidEmail": "Inserire un ID e-mail valido", + "wrongEntered": "L'ID e-mail o il pin di supporto non sono corretti!", + "donatedTrees": "Alberi donati", + "resetPin": "Pin di reset", + "donate": "Donare", + "donated": "Donati", + "conserved": "Conservato", + "restored": "Ripristinato", + "membershipCtaButtonText": "ISCRIVITI ORA", + "membershipCtaCopy": "Sosteneteci DIVENTANDO MEMBRO", + "shareUrl": "Condividi URL", + "treesOfTrees": "{count1} di {count2}", + "document": "Documentazione della piattaforma (EN)" } } diff --git a/public/static/locales/it/planetcash.json b/public/static/locales/it/planetcash.json index ffcd4415b0..eb6e13a73f 100644 --- a/public/static/locales/it/planetcash.json +++ b/public/static/locales/it/planetcash.json @@ -1 +1,34 @@ -{ } +{ + "Planetcash": { + "title": "PlanetCash", + "partnerSignupInfo": "L'utilizzo di questa funzione da parte delle aziende è soggetto alla partnership con Plant-for-the-Planet. Contattare partner@plant-for-the-planet.org per i dettagli.", + "description": "PlanetCash è uno strumento di facile utilizzo per gli sviluppatori che estende la piattaforma Plant-for-the-Planet con API e strumenti integrati. Il saldo di PlanetCash è un contributo a Plant-for-the-Planet che può essere dedicato dal donatore a diversi progetti della piattaforma.", + "termsText": "Visualizza i termini e le condizioni.", + "learnMoreText": "Per saperne di più su PlanetCash.", + "tabAccounts": "Conti", + "tabCreateAccount": "Creare un account", + "tabTransactions": "Transazioni", + "accountTitleText": "{currency} Conto PlanetCash ({country})", + "createAccountTitleText": "Iscriviti a PlanetCash", + "addBalanceButton": "Aggiungi equilibrio", + "labelAccountHolder": "Titolare del conto", + "labelBalance": "Equilibrio", + "labelCreditLimit": "Limite", + "deactivateAccountButton": "Disattivare", + "activateAccountButton": "Attivare", + "accountInactiveHelpText": "Questo conto è inattivo e non può essere utilizzato per versare contributi. Per attivare questo conto, contattare support@plant-for-the-planet.org.", + "noAccountsText": "Sembra che non abbiate ancora creato un conto PlanetCash.", + "createPlanetCashButton": "Creare un conto Planet Cash", + "accountQuotaReachedText": "Non è possibile creare altri account perché la quota di account è esaurita.", + "accountCreationSuccess": "Il vostro conto PlanetCash è stato creato con successo", + "labelCountry": "Paese", + "planetCashTerms1": "Facendo clic su \"Crea un conto PlanetCash\", accetto i termini e le condizioni di Plant-for-the-Planet e PlanetCash.", + "planetCashTerms2": "Sono a conoscenza del fatto che le donazioni di PlanetCash non sono rimborsabili e che i pagamenti non allocati saranno assegnati automaticamente ai progetti della Piattaforma dopo sei mesi di pagamento.", + "planetCashTerms3": "Le donazioni al conto PlanetCash per motivi personali sono generalmente deducibili dalle tasse nel Paese selezionato in questa fase. L'uso commerciale di PlanetCash potrebbe non essere ammesso alle detrazioni fiscali. In caso di domande, contattare support@plant-for-the-planet.org o il proprio consulente fiscale.", + "accountError": { + "active_account_exists": "Esiste già un account attivo. Disattivare l'account prima di attivarne un altro.", + "duplicate_account": "Avete già creato un account per {country}", + "default": "Qualcosa è andato storto durante la creazione di un account. Riprovare dopo un po'." + } + } +} diff --git a/public/static/locales/it/profile.json b/public/static/locales/it/profile.json index 475993042d..a3b863c946 100644 --- a/public/static/locales/it/profile.json +++ b/public/static/locales/it/profile.json @@ -1,13 +1,49 @@ { "Profile": { + "myProfile": { + "memberSince": "Membro dal {date}", + "userDescription": "{bio}" + }, + "feature": { + "redeem": "Riscatto", + "registerTree": "Albero del registro", + "share": "Condividi" + }, "myPublicProfile": { - "support": "Supporto" + "support": "Supporto", + "link": "Collegamento" }, "myForestMap": { - "plantedTree": "{count, plural, =0 {Alberi} =1 {Albero} other {Alberi}}\n" + "plantedTree": "{count, plural, =1 {# Albero} other {# Alberi}}", + "treesPlanted": "Alberi piantati", + "restored": "Ripristinato", + "registered": "Registrato", + "conservation": "Conservazione", + "projects": "Progetti", + "countries": "Paesi", + "donations": "Donazioni", + "area": "{areaConserved} m²", + "zoomIn": "zoom per maggiori dettagli", + "totalDonation": "{count, plural, =1 {# donazione} other {# donazioni}} ", + "totalProject": "a {count, plural, =1 {# progetto} other {# progetti}}", + "tpoName": "Da {tpo}" + }, + "myTreeCounter": { + "treesPlanted": "Alberi piantati", + "editTarget": "Modifica obiettivo" }, "myContributions": { - "receivedFrom": "Ricevuto da {name}" + "treesPlantedAndAreaRestored": "Alberi piantati e aree ripristinate", + "treeRegistered": "{count, plural, =1 {# Albero Registrato} other {# Alberi Registrati}}", + "receivedFrom": "Ricevuto da {name}", + "loadMoreContribution": "Carica altri contributi", + "loadingContribution": "Caricamento dei contributi....", + "donate": "Donare", + "donateAgain": "Donare di nuovo", + "conservedSmall": "conservato", + "restoredSmall": "restaurato", + "areaType": "{areaConserved} m² {type}", + "areaConserved": "Aree conservate" } } } diff --git a/public/static/locales/it/redeem.json b/public/static/locales/it/redeem.json index 778fc9f02d..525fddfef6 100644 --- a/public/static/locales/it/redeem.json +++ b/public/static/locales/it/redeem.json @@ -1,11 +1,21 @@ { "Redeem": { + "myPlantedTreesByOrg": "Il mio albero {formattedNumber} sarà piantato da {tpoName}", + "myPlantedTreesByOrg_plural": "I miei alberi {formattedNumber} saranno piantati da {tpoName}", "congratulations": "Congratulazioni!", "addToMyTrees": "Aggiungi ai miei alberi", "validateCode": "Convalidare il codice", "enterRedeemCode": "Si prega di inserire un codice per riscattare", "validating": "Convalida", "invalidType": "Tipo non valido, si prega di controllare di nuovo il link", - "redeemDescription": "Riscatta il tuo buono per l'albero e altri codici." + "redeeming": "Riscatto:", + "invalidCode": "Questo codice non è valido.", + "alreadyRedeemed": "Il codice è già stato riscattato", + "redeemCode": "Codice di riscatto", + "redeemingCode": "Codice di riscatto...", + "redeem": "Riscatto", + "redeemDescription": "Riscatta il tuo buono per l'albero e altri codici.", + "successfullyRedeemed": "Riscattato con successo", + "redeemAnotherCode": "Riscattare un altro codice" } } diff --git a/public/static/locales/it/tenants.json b/public/static/locales/it/tenants.json index 83a91b5494..a4532a3e1d 100644 --- a/public/static/locales/it/tenants.json +++ b/public/static/locales/it/tenants.json @@ -44,6 +44,10 @@ "3pleset": { "title": "Alife & Kickin ❤️ Bäume", "description": "

#WEAREALIFE Schreibfehler? No, Absicht!
Ganz nach dem Motto CHOOSE LIFE seid ihr jetzt dran.
Denn ab sofort könnt ihr mit Alife & Kickin und der Organisation Plant-for-the-Planet Bäume pflanzen und Leben schenken. Erschafft mit uns den Alife & Kickin Wald. Come?
Pro Onlinebestellung pflanzen wir in den nächsten 2 Monaten einen Baum mit Plant-for-the-Planet. Unser Ziel: 50.000 Bäume für eine nachhaltige Wiederaufforstung. Dove?
Auf der Karte seht ihr, wo unser Alife & Kickin Wald realisiert wird. Jetzt anschauen, mithelfen und noch mehr Leben schenken. SCEGLIERE LA VITA.
UN ORDINE UN ALBERO
#WEAREALIFE

" + }, + "weareams": { + "title": "AMS ❤️ Alberi", + "description": "Dal 2021 AMS aderisce alla Campagna TrillionTree e, insieme a Plant-for-the-Planet, inizia a restituire alla natura. Sfrutteremo le opportunità che ci verranno offerte per promuovere la sostenibilità nella nostra catena di fornitura e nei rapporti con clienti e partner commerciali. Unitevi a noi e #StopTalkingStartPlanting!" } } } diff --git a/public/static/locales/it/treemapper.json b/public/static/locales/it/treemapper.json index ffcd4415b0..c2b88cc2a1 100644 --- a/public/static/locales/it/treemapper.json +++ b/public/static/locales/it/treemapper.json @@ -1 +1,77 @@ -{ } +{ + "Treemapper": { + "trees": "Alberi", + "tree": "Albero", + "on": "su", + "partial": "Parziale", + "complete": "Completo", + "on-site": "In loco", + "off-site": "Fuori sede", + "captureMode": "Modalità di cattura", + "captureStatus": "Stato della cattura", + "coordinates": "Coordinate", + "guid": "GUID", + "height": "Altezza", + "invalidHeight": "Altezza non valida", + "width": "Larghezza", + "plantDate": "Data dell'impianto", + "registrationDate": "Data di registrazione", + "plantProject": "Progetto di impianto", + "species": "Specie", + "sampleTrees": "Alberi campione", + "loadMore": "Per saperne di più", + "treeMapper": "Mappatore di alberi", + "cm": "cm", + "m": "m", + "plantingLocation": "Posizione di piantagione", + "reviewAndSubmit": "Revisione e invio", + "sampleTree": "Albero campione #{number}", + "tag": "Tag", + "import": "Importazione", + "editor": "Editore", + "draw": "Disegno", + "addAnotherSpecies": "Aggiungere un'altra specie", + "continue": "Continua", + "downloadCSVTemplate": "Scarica il modello CSV", + "treeTag": "Etichetta dell'albero", + "diameter": "Diametro", + "invalidDiameter": "Diametro non valido", + "latitude": "Latitudine", + "invalidLatitude": "Latitudine non valida", + "longitude": "Longitudine", + "invalidLongitude": "Longitudine non valida", + "addAnotherSampleTree": "Aggiungere un altro albero campione", + "skip": "Salto", + "treeSpecies": "Specie arboree", + "plantingDate": "Data di semina", + "summary": "Sintesi", + "reviewSubmitDescription": "Rivedere i dati appena caricati e inviarli a TreeMapper.", + "submittedSuccess": "Inviato con successo", + "submittedSuccessDescription": "I vostri alberi sono stati inviati a TreeMapper. È possibile visualizzarli nelle posizioni delle piante o nell'app TreeMapper.", + "myPlantLocations": "Le mie sedi di impianto", + "submitted": "Presentato", + "projectRequired": "Progetto richiesto", + "geoJsonError": "Formato GeoJSON/KML non supportato", + "atLeastOneSpeciesRequired": "È richiesta almeno una specie", + "treesRequired": "Conteggio degli alberi richiesto", + "count": "Conteggio", + "addSampleTree": "Aggiungere un albero campione", + "uploadFile": "Caricare il file", + "fileFormatKML": "File (geojson/kml)", + "importData": "Importazione dei dati", + "importExplanation": "Qui è possibile importare i dati di TreeMapper, che saranno contrassegnati come \"esterni\" (non \"off-site\", per questo si prega di utilizzare l'applicazione). Per le coordinate dei siti di impianto accettiamo *.kml o geojson, per gli alberi campione (facoltativi) *.csv (il modello è fornito al punto 2).", + "downloadExplanation": "Scaricare il seguente modello CSV per importare i dati degli alberi campione nel formato indicato. Utilizzare un semplice editor per modificare il file. La seconda e la terza riga sono dettagli di formattazione e un esempio e devono essere eliminate.", + "importCSV": "Importazione CSV", + "fileFormatCSV": "File (csv)", + "aliases": "Alias", + "aliasesValidation": "Inserire gli pseudonimi", + "speciesValidation": "Inserire una specie", + "external": "Esterno", + "date": "Data", + "datePlantedRequired": "Data di impianto richiesta", + "measurements": "Misure", + "ignoredColumnsWarning": "Le colonne extra sono state ignorate", + "back": "Indietro", + "submit": "Invia" + } +} diff --git a/public/static/locales/it/treemapperAnalytics.json b/public/static/locales/it/treemapperAnalytics.json index ffcd4415b0..4f0b43c95e 100644 --- a/public/static/locales/it/treemapperAnalytics.json +++ b/public/static/locales/it/treemapperAnalytics.json @@ -1 +1,59 @@ -{ } +{ + "TreemapperAnalytics": { + "title": "Esploratore dati", + "from": "Da", + "to": "A", + "clearFilter": "Filtro trasparente", + "days": "Giorni", + "months": "Mesi", + "weeks": "Settimane", + "years": "Anni", + "treesPlanted": "Alberi piantati", + "speciesPlanted": "Specie piantate", + "calenderWeek": "CW", + "project": "Progetto", + "export": "Esportazione", + "exportData": "Esportazione dei dati", + "jan": "Gennaio", + "feb": "Febbraio", + "mar": "Mar", + "apr": "Apr", + "may": "Maggio", + "jun": "Giugno", + "jul": "Luglio", + "aug": "Agosto", + "sep": "Settembre", + "oct": "Ottobre", + "nov": "Nov", + "dec": "Dicembre", + "exportColumnHeaders": { + "hid": "ID leggibile dall'uomo per la posizione di un impianto", + "plantDate": "Data di impianto", + "species": "Nome della specie piantata", + "geometry": "GeoJson Coordinata del poligono", + "type": "Tipo di ubicazione dell'impianto (singolo, multiplo)", + "treesPlanted": "Totale alberi in un sito di impianto", + "metadata": "Metadati sull'ubicazione dell'impianto", + "plantProjectId": "ID backend del progetto di cui fa parte la sede dell'impianto", + "sampleTreeCount": "Conteggio degli alberi campione presenti sul luogo dell'impianto", + "captureStatus": "Cattura Stato dell'ubicazione dell'impianto.", + "created": "Timestamp di creazione" + }, + "readme": "LEGGIMI", + "interventionData": "Dati dell'intervento", + "monitoringPlotsData": "Dati sulle parcelle di monitoraggio", + "dataIntervals": "Intervalli di dati", + "errors": { + "emptyExportData": "Dati non disponibili per l'intervallo specificato. Provare con un altro intervallo di tempo o verificare se i dati per quel periodo sono stati registrati." + }, + "timeFrame": "Periodo di tempo", + "scientificName": "Nome scientifico", + "type": "Tipo", + "interventions": "Interventi", + "monitoringPlots": "Monitoraggio delle parcelle (in arrivo...)", + "trillion": "t", + "billion": "b", + "million": "m", + "thousand": "k" + } +} diff --git a/public/static/locales/pt-BR/bulkCodes.json b/public/static/locales/pt-BR/bulkCodes.json index ffcd4415b0..48baed208c 100644 --- a/public/static/locales/pt-BR/bulkCodes.json +++ b/public/static/locales/pt-BR/bulkCodes.json @@ -1 +1,116 @@ -{ } +{ + "BulkCodes": { + "bulkCodesTitle": "Emissão de certificados e códigos de árvores", + "partnerSignupInfo": "O uso desse recurso pelas empresas está sujeito à parceria com a Plant-for-the-Planet. Entre em contato com partner@plant-for-the-planet.org para obter detalhes.", + "bulkCodesDescription1": "Com o PlanetCash, você pode gerar milhares de códigos em uma única operação. A geração de certificados de árvore aumentará sua contagem de árvores.", + "bulkCodesDescription2": "Você pode usar esse recurso para criar códigos para certificados personalizados, cartões-presente, doações em nome de usuários e códigos resgatáveis que podem ser associados aos seus produtos.", + "tabCreationMethod": "Método de criação", + "tabSelectProject": "Selecionar projeto", + "tabIssueCodes": "Códigos de problemas", + "issueCodes": "Códigos de problemas", + "issuingCodes": "Códigos de emissão...", + "importMethodText": { + "title": "Criar certificados de árvore personalizados", + "subtitle": "Use esse método (para um máximo de 1.000 destinatários em uma transação) se um dos seguintes critérios corresponder ao seu caso de uso:", + "details": { + "line1": "Quero fornecer o nome ou o e-mail do destinatário para cada código.", + "line2": "Quero que o Plant-for-the-Planet envie automaticamente um e-mail aos destinatários assim que for gerado (opcional).", + "line3": "Quero emitir códigos para diferentes contagens de árvores." + } + }, + "genericMethodText": { + "title": "Criar códigos genéricos", + "subtitle": "Use esse método se os critérios a seguir corresponderem ao seu caso de uso:", + "details": { + "line1": "Todos os códigos terão o mesmo valor.", + "line2": "Quero gerar um número de códigos para destinatários arbitrários.", + "line3": "Nomes e e-mails não podem ser associados ao código." + } + }, + "projectName": "Nome do projeto", + "costPerUnit": "Custo por unidade", + "labelComment": "Comentário [Particular]", + "unitOfMeasurement": "Unidade de medida", + "units": { + "ha": "ha", + "tree": "árvore", + "m2": "m²" + }, + "unitsPerCode": "Unidades por código*", + "totalNumberOfCodes": "Número total de códigos*", + "occasion": "Ocasião", + "notificationLanguage": "Idioma da notificação", + "total": "Total", + "chargeConsentText": "Ao clicar em Issue Codes, você concorda que o valor acima será cobrado em sua conta.", + "invalidEmailWarningText": "Certifique-se de que o e-mail do destinatário seja um e-mail válido. O uso de e-mails fictícios ou inválidos resultará na suspensão da conta, de acordo com os termos e condições da Plataforma.", + "projectRequired": "Nenhum projeto é selecionado.", + "unitsPerCodeRequired": "Cada código deve conter pelo menos uma unidade.", + "codeQuantityRequired": "Você precisa criar pelo menos um código.", + "unitsPerCodeInvalidRange": "Um código pode conter um máximo de 1.000 unidades.", + "codeQuantityInvalidRange": "É possível criar um máximo de 5.000 códigos.", + "featureAvailability": "Esse recurso está disponível apenas para projetos de parceiros.", + "planetCashDisabled": "O PlanetCash não está ativado. Ative o PlanetCash para usar esse recurso.", + "insufficientPCashBalance": "Equilíbrio insuficiente.", + "addBalanceGeneric": "Clique aqui para adicionar fundos.", + "instructionsUploadCSV": { + "empty": "Arraste e solte / clique para selecionar um arquivo .xslx / .csv para upload.", + "error": "Verifique se há problemas e arraste o arquivo .xslx / .csv até aqui para fazer o upload.", + "processing": "Aguarde enquanto analisamos seu arquivo...", + "success": "Continue ou arraste o arquivo .xlsx ou .csv até aqui para substituir o arquivo atual." + }, + "statusUploadCSV": { + "error": "Erro", + "success": "Análise de arquivo concluída" + }, + "errorUploadCSV": { + "fileInvalidType": "Somente arquivos .csv e .xslx são permitidos.", + "tooManyFiles": "Carregue apenas um único arquivo.", + "fileTooSmall": "O arquivo carregado parece estar vazio.", + "fileTooLarge": "O arquivo carregado deve ter 5 MB ou menos.", + "missingColumns": "O arquivo carregado não contém as seguintes colunas: ", + "noRecipientData": "Nenhum dado de destinatário foi encontrado.", + "tooManyRecipients": "Um máximo de 1.000 destinatários pode ser processado em uma transação.", + "unitsNotProvided": "As unidades estão ausentes/inválidas para alguns destinatários.", + "notifyNotPossible": "O e-mail e o nome estão faltando para alguns destinatários que devem ser notificados.", + "instructionRowError": "Ocorreu um erro na 1ª linha. Verifique se você excluiu as instruções ou se há dados adicionais.", + "invalidEmails": "recipient_email contém e-mails fictícios/inválidos nas seguintes linhas: {rowList}. Por favor, remova os e-mails inválidos ou adicione e-mails válidos.", + "generalError": "Algo deu errado. Tente depois de um tempo." + }, + "errorAddRecipient": { + "unitsNotProvided": "Obrigatório", + "requiredForNotifications": "Obrigatório (para destinatários de e-mail)", + "emailInvalid": "E-mail inválido" + }, + "successUploadCSV": { + "ignoredColumns": "As colunas extras foram ignoradas" + }, + "importInstructions": "Consulte a documentação aqui, faça download do modelo Excel aqui e do modelo CSV aqui.", + "tableHeaders": { + "recipient_name": "Nome do beneficiário", + "recipient_email": "E-mail do destinatário", + "recipient_notify": "Enviar e-mail?", + "units": "Unidades", + "recipient_message": "Mensagem" + }, + "tableHeaderHelpText": { + "recipient_name": "Opcional. Nome do destinatário, mostrado no certificado e, se opt-in, no e-mail enviado ao destinatário. Obrigatório se você quiser enviar e-mails.", + "recipient_email": "Opcional. Necessário para enviar o certificado ao destinatário por e-mail.", + "recipient_notify": "Opcional. Selecione Yes se quiser que o Plant-for-the-Planet informe o destinatário automaticamente por e-mail.", + "units": "Obrigatório. Número de árvores que são dadas ao destinatário, por exemplo, 5 para 5 árvores", + "recipient_message": "Opcional. Mensagem para o destinatário que será incluída no e-mail se a opção notificar for sim. Uma mensagem padrão será enviada se não for fornecida." + }, + "donationSuccess": "Sua doação foi bem-sucedida. Redirecionando-o para visualizar os detalhes da doação em breve...", + "donationError": { + "planet_cash_insufficient_credit": "Crédito disponível = {availableBalance}. Carregue o saldo em sua conta PlanetCash para fazer essa doação.", + "default": "Algo deu errado. Tente depois de um tempo.", + "planet_cash_payment_failure": "A transação falhou. {reason}", + "planet_cash_invalid_project": "Você não pode fazer uma doação para o projeto selecionado." + }, + "titleAddRecipientButton": "Adicionar destinatário à tabela", + "notifyRecipientOptions": { + "yes": "Sim", + "no": "Não" + }, + "fileUploadWarning": "Isso removerá seus dados de destinatário existentes. Deseja continuar?" + } +} diff --git a/public/static/locales/pt-BR/common.json b/public/static/locales/pt-BR/common.json index 7f92766bb9..4945650b6b 100644 --- a/public/static/locales/pt-BR/common.json +++ b/public/static/locales/pt-BR/common.json @@ -1,6 +1,7 @@ { "Common": { - "tree": "{count, plural, =0 {Árvores} =1 {Árvore} other {Árvores}}", + "tree": "{count, plural, =1 {Árvore} other {Árvores}}", + "m2": "m²", "by": "Por {tpoName}", "to_project_by_tpo": "Para {projectName} por {tpoName}", "for": "para", @@ -82,15 +83,54 @@ "trillionTrees": "Trilhão de Árvores", "yucatan": "Restauração de Yucatán", "partners": "Parceiros", - "changeChocolate": "O Chocolate da Mudança", - "stopTalkingStartPlanting": "Pare de falar. Comece a plantar.", + "changeChocolate": "The Change Chocolate", + "stopTalkingStartPlanting": "Stop talking. Start planting.", "underMaintenance": "Em Manutenção", "forbidden": "Não está autorizado a ver esta página!", + "connectionError": "Não foi possível acessar o servidor. Verifique sua conexão com a Internet.", "validationFailed": "Validação falhou!", "add": "Adicionar", + "modalTitle": "Cancelar todas as assinaturas para prosseguir", + "modalSubtitle": "Cancele suas assinaturas primeiro", + "deleteCondition": "Antes de prosseguir, verifique se você cancelou todas as assinaturas.", + "showSubscriptions": "Mostrar minhas assinaturas", "notFound": "A página solicitada não foi encontrada.", + "tooManyRequest": "Muitas solicitações. Aguarde e tente novamente mais tarde ou entre em contato com o administrador do sistema para obter assistência.", "unauthorized": "Alguma coisa correu mal. Por favor, tente sair e volte a entrar novamente.", + "validationError": "Erro de validação", "internalServerError": "Erro do Servidor Interno - Por favor tente novamente mais tarde!", - "reviewInfo": " O projeto foi inspecionado em uma revisão de campo de vários dias em <2>mês e atende aos nossos <5>padrões." + "serviceUnavailable": "O aplicativo está passando por manutenção, verifique status.plant-for-the-planet.org para obter detalhes", + "account_duplicate": "A conta já existe", + "line_item_amount_deviation": "Valor Desvio", + "line_item_amount_invalid": "Valor inválido", + "line_item_amount_prohibited": "Valor proibido", + "idempotency_key_missing": "Falta de chave de Idempotência no cabeçalho", + "line_item_invalid_donor_data": "Dados inválidos do doador", + "line_item_invalid_planet_cash_account": "Conta PlanetCash inválida", + "line_item_invalid_project": "Projeto inválido", + "line_item_missing_amount": "Valor em falta", + "line_item_missing_currency": "Moeda ausente", + "line_item_missing_quantity": "Quantidade ausente", + "line_item_project_not_allowing_donations": "Projeto que não permite doações", + "line_item_quantity_prohibited": "Quantidade proibida", + "generic_error": "Algo deu errado. Verifique sua conexão com a Internet ou tente novamente mais tarde.", + "missing_profile": "Perfil ausente", + "some_error": "Algo deu errado", + "planet_cash_payment_failure": "Falha no pagamento", + "planet_cash_insufficient_credit": "Crédito insuficiente", + "planet_cash_invalid_project": "Projeto inválido", + "active_account_exists": "Já existe uma conta PlanetCash ativa", + "duplicate_account": "A conta já existe", + "token_expired": "Token expirado. Faça login novamente", + "project_not_available": "Os detalhes do projeto não estão disponíveis no momento", + "topProject": "Projeto principal", + "viewReport": "Exibir relatório", + "reviewInfo": " O projeto foi inspecionado em uma revisão de campo de vários dias em {reviewMonth} e atende aos nossos padrões.", + "standardsLink": "https://www.plant-for-the-planet.org/standards/", + "project": "Projeto", + "top_project_standards_fulfilled": "A inspeção do projeto revelou que esse projeto cumpriu pelo menos 12 dos 19 padrões do Top Project.", + "disabledDonateButtonText": "O projeto não aceita doações no momento. Isso pode ocorrer porque ele é totalmente financiado, ainda não foi revisado ou não atende a todos os nossos padrões de projeto, ou porque opta por usar a plataforma exclusivamente para suas ferramentas de transparência.", + "notDonatable": "Não pode ser doado", + "salesforceDisabledDonateButtonText": "No momento, o projeto não aceita doações." } } diff --git a/public/static/locales/pt-BR/country.json b/public/static/locales/pt-BR/country.json index d6fefdbacc..2e56950710 100644 --- a/public/static/locales/pt-BR/country.json +++ b/public/static/locales/pt-BR/country.json @@ -1,5 +1,6 @@ { "Country": { + "auto": "Seleção automática", "ac": "Ilha de Ascensão", "af": "Afeganistão", "ax": "Ilhas Åland", @@ -243,7 +244,7 @@ "ug": "Uganda", "ua": "Ucrânia", "ae": "Emirados Árabes Unidos", - "gb": "Reino Unido da Grã-Bretanha e Irlanda do Norte", + "gb": "UK", "un": "Nações Unidas", "us": "Estados Unidos da América", "um": "Ilhas Menores Distantes dos Estados Unidos", diff --git a/public/static/locales/pt-BR/donate.json b/public/static/locales/pt-BR/donate.json index 829c7a773f..60a393771c 100644 --- a/public/static/locales/pt-BR/donate.json +++ b/public/static/locales/pt-BR/donate.json @@ -6,6 +6,7 @@ "yourTreesPlantedByOnLocation_plural": "As suas {treeCount} árvores serão plantadas por {projectName} em {location}.", "myTreesPlantedByOnLocation": "A minha {treeCount} árvore está sendo plantada em {location}.", "myTreesPlantedByOnLocation_plural": "Minhas {treeCount} árvores estão sendo plantadas em {location}.", + "projects": "Projetos", "topProjects": "Principais projetos", "allCountProjects": "Todos {projectCount} Projetos", "searchProjects": "Pesquisar Projetos", @@ -67,7 +68,6 @@ "thisDonationSupports": "Esta doação apoia", "plantTreesWith": "Plante árvores com", "textToShare": "Junte-se a {name} e a milhares de outras pessoas que estão plantando um trilhão de árvores para enfrentar a crise climática #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "thankyouHeaderText": "Estamos a caminho de um \n

Trilhão de Árvores

", "shareTextTitle": "Pare de falar. Comece a plantar", "textToShareLinkedin": "Junte-se a {name} e a milhares de outras pessoas que estão plantando um trilhão de árvores para enfrentar a crise climática", "textToShareForMe": "Junte-se a mim e a milhares de outras pessoas para plantar um trilhão de árvores e assim enfrentar a crise climática", @@ -85,7 +85,6 @@ "payWithGiroPay": "Doe com GiroPay", "payWithSofort": "Doe com SOFORT", "donationFailed": "Doação falhou", - "donationFailedMessage": "Alguma coisa deu errado ao completar o seu pagamento. Se continuar a ter problemas, por favor contacte-nos em support@plant-for-the-planet.org", "donationPending": "Concluindo a sua doação", "donationPendingMessage": "Estamos à espera da confirmação do seu banco. Isto pode demorar algum tempo, por favor, sinta-se à vontade para fechar esta página. Nós enviaremos seu recibo por e-mail em breve.", "sepaMessage": "Ao fornecer seu IBAN e confirmar este pagamento, você autoriza Plant-for-the-Planet e Stripe, nosso provedor de serviços de pagamento, a enviar instruções ao seu banco para debitar sua conta. Você tem direito a um reembolso do seu banco nos termos e condições do seu acordo com o seu banco. Se você tiver algum problema com a sua doação, envie um e-mail para support@plant-for-the-planet.org", @@ -98,13 +97,13 @@ "orgNamePublished": "O nome da empresa é visível no nosso quadro de líderes e no nosso aplicativo.", "aboutProject": "Sobre o Projeto", "acceptingDonations": "Aceitando Doações", - "natural-regeneration": "Regeneração Natural", - "managed-regeneration": "Regeneração Gerenciada", - "large-scale-planting": "Restauração em Grande Escala", - "agroforestry": "Agrofloresta", - "urban-planting": "Restauração Urbana", - "other-planting": "Restauração", - "mangroves": "Manguezais", + "natural-regeneration": "Natural Regeneration", + "managed-regeneration": "Managed Regeneration", + "large-scale-planting": "Large Scale Restoration", + "agroforestry": "Agroforestry", + "urban-planting": "Urban Restoration", + "other-planting": "Restoration", + "mangroves": "Mangroves", "purpose": "Propósito", "projectPurpose": "Objetivo do projeto", "type": "Tipo", diff --git a/public/static/locales/pt-BR/donationLink.json b/public/static/locales/pt-BR/donationLink.json index ffcd4415b0..95288c0cec 100644 --- a/public/static/locales/pt-BR/donationLink.json +++ b/public/static/locales/pt-BR/donationLink.json @@ -1 +1,25 @@ -{ } +{ + "DonationLink": { + "donationLinkTitle": "Crie seu link de doação", + "donationLinkDescription": "Crie o Donation Link para que funcione de acordo com suas necessidades e proporcione aos doadores uma experiência tranquila. Use Preview para ver como o resultado final funcionará.", + "qrCodeDiscription": "Em vez do link, você também pode fornecer o QR-Code para acessar o projeto pretendido.", + "labelCountry": "País", + "labelLanguages": "Idioma", + "countryLanguageTitle": "Definir o país e o idioma", + "projectTitle": "Defina seu projeto", + "treeCounterTitle": "Apoie meu TreeCounter", + "testingTitle": "Modo de teste", + "urlTitle": "URL do link de sua doação", + "qrCodeTitle": "QR-Code do link de sua doação", + "languages": "Idiomas", + "preview": "Prévia", + "copy": "Cópia", + "treeCounterSubtitle": "As doações de árvores por meio deste link apoiam meu perfil diretamente", + "testingModeSubtitle1": "Para testar, use o link que está sendo exibido agora. Isso é apenas para teste; para que o link correto seja compartilhado, você precisa desativar o Modo de teste.", + "testingModeSubtitle2": "Você pode testar o fluxo de doações usando cartões em", + "linkAndQRCodeUpdatedMessage": "O link e o código QR foram atualizados", + "treeCounterPrivateAccountSubtitle": "Para oferecer suporte ao seu perfil, você deve defini-lo como público nas configurações da conta.", + "automaticSelection": "Seleção automática", + "qrCodeFileName": "Código-QR do link de doação" + } +} diff --git a/public/static/locales/pt-BR/editProfile.json b/public/static/locales/pt-BR/editProfile.json index d70b9bfcb9..fe30d16571 100644 --- a/public/static/locales/pt-BR/editProfile.json +++ b/public/static/locales/pt-BR/editProfile.json @@ -26,14 +26,37 @@ "termAndConditionError": "Por favor Aceite os Termos e Condições", "fieldLabels": { "profileType": "Eu sou um(a)", + "firstName": "Primeiro nome", + "lastName": "Sobrenome", "name": "Nome do {type}", + "email": "E-mail", + "address": "Endereço", + "city": "Cidade", + "zipCode": "Código postal", + "country": "País", + "bio": "Descrição do perfil", "website": "Website", "privateAccount": "Conta Privada", "subscribe": "Inscreva-se para receber notícias por e-mail" }, "validationErrors": { + "maxChars": "Deve ter {max} caracteres ou menos", + "firstNameRequired": "O campo First Name é obrigatório", + "firstNameInvalid": "O primeiro nome é inválido. Ele não pode começar com um caractere especial, e somente estes caracteres especiais são permitidos: espaço ' . -", + "lastNameRequired": "O campo Sobrenome é obrigatório", + "lastNameInvalid": "O sobrenome é inválido. Ele não pode começar com um caractere especial, e somente estes caracteres especiais são permitidos: espaço ' -", + "emailRequired": "O e-mail é obrigatório", "nameRequired": "Por favor, adicione um nome", - "websiteInvalid": "Por favor, digite o URL válido do site" + "nameInvalid": "O nome é inválido. Somente estes caracteres especiais são permitidos: espaço . , ' & ( ) ! -", + "addressRequired": "O endereço é obrigatório", + "addressInvalid": "O endereço é inválido. Somente estes caracteres especiais são permitidos: espaço . , # - /", + "cityRequired": "A cidade é necessária", + "cityInvalid": "Cidade é inválido. Somente letras e estes caracteres especiais são permitidos: espaço . , ( ) -", + "zipCodeRequired": "O CEP é obrigatório", + "zipCodeInvalid": "O CEP é inválido", + "websiteInvalid": "Por favor, digite o URL válido do site", + "countryRequired": "O país é obrigatório", + "companyRequired": "O nome da empresa é obrigatório" } } } diff --git a/public/static/locales/pt-BR/giftfunds.json b/public/static/locales/pt-BR/giftfunds.json index ffcd4415b0..e8efce07a6 100644 --- a/public/static/locales/pt-BR/giftfunds.json +++ b/public/static/locales/pt-BR/giftfunds.json @@ -1 +1,9 @@ -{ } +{ + "Giftfunds": { + "title": "GiftFund", + "description1": "Se você vir esta página, significa que ainda há saldo em seu GiftFund para sua conta PlanetCash ativa. Verifique as informações abaixo.", + "description2": "Em caso de dúvidas, entre em contato com o seu Key Account Manager.", + "project": "Projeto", + "units": "Unidades disponíveis" + } +} diff --git a/public/static/locales/pt-BR/managePayouts.json b/public/static/locales/pt-BR/managePayouts.json index ffcd4415b0..2e0aee4da1 100644 --- a/public/static/locales/pt-BR/managePayouts.json +++ b/public/static/locales/pt-BR/managePayouts.json @@ -1 +1,76 @@ -{ } +{ + "ManagePayouts": { + "title": "Gerenciar pagamentos", + "description": "Mantenha suas informações de pagamento atualizadas (por exemplo, cronograma, dados bancários) para facilitar os pagamentos", + "tabPayoutSchedule": "Cronograma de pagamento", + "tabAddBankDetails": "Adicionar dados bancários", + "tabOverview": "Visão geral", + "payoutInformation1": "Os pagamentos são processados automaticamente todos os anos ou quando uma organização arrecada 30.000 euros ou o equivalente em outra moeda.", + "payoutInformation2": "Os pagamentos são emitidos pela Plant-for-the-Planet Foundation e suas organizações irmãs, por exemplo: Plant-for-the-Planet US, Plant-for-the-Planet Switzerland etc.", + "payoutInformation3": "Você pode ajustar o cronograma de pagamentos e receber pagamentos frequentes, desde que atenda aos critérios de valor mínimo de 1.500 euros.", + "supportInformation": "Se tiver um caso excepcional, entre em contato com support@plant-for-the-planet.org.", + "scheduleFrequencies": { + "monthly": "Mensal", + "quarterly": "Trimestral", + "semiannually": "Semestral", + "annually": "Anual", + "manual": "Manual" + }, + "defaultCurrency": "Padrão", + "labels": { + "currency": "Moeda", + "scheduleFrequency": "Frequência de pagamento", + "payoutMinAmount": "Valor mínimo de pagamento", + "bankName": "Nome do banco", + "bankAddress": "Endereço do banco", + "bankCountry": "Banco País", + "holderName": "Nome do titular da conta", + "holderAddress": "Endereço do titular da conta", + "remarks": "Detalhes adicionais", + "accountNumber": "IBAN / Número da conta", + "routingNumber": "ABA / Routing Number (somente nos EUA)", + "bic": "BIC / SWIFT", + "branchCode": "Código da filial" + }, + "errors": { + "scheduleFrequencyRequired": "A frequência de pagamento é necessária", + "payoutMinAmountRequired": "É necessário um valor mínimo de pagamento", + "payoutMinAmountTooLow": "O valor mínimo de pagamento deve ser de pelo menos {currency} {minAmount}", + "bankNameRequired": "O nome do banco é obrigatório.", + "bankAddressRequired": "O endereço do banco é obrigatório.", + "holderNameRequired": "O nome do titular é obrigatório.", + "holderAddressRequired": "O endereço do titular é obrigatório.", + "accountNumberRequired": "O número da conta é obrigatório.", + "bicRequired": "É necessário o código BIC / SWIFT.", + "noAccountFound": "Nenhuma conta foi recuperada" + }, + "placeholders": { + "payoutMinAmount": "Deve ser pelo menos {currency} {minAmount}", + "bankName": "por exemplo, Century Bank LLC", + "bankAddress": "por exemplo, 1 West St, Hamington Way, MA, 10311, EUA", + "holderName": "por exemplo, John Doe", + "holderAddress": "por exemplo, 21 Penn Avenue, MA 10317 EUA", + "remarks": "por exemplo, inclua a ref. acct=1237 na transferência." + }, + "helperText": { + "currency": "Selecione \"Default\" (Padrão) se essa for sua conta bancária padrão. Se precisar fornecer detalhes especiais para uma moeda, selecione-a aqui e forneça os detalhes. Também usaremos os valores mínimos padrão para um pagamento.", + "remarks": "Forneça detalhes adicionais, por exemplo, detalhes do banco intermediário, PCs (códigos de finalidade) ou outras referências aqui." + }, + "saveButton": "Salvar", + "accountError": { + "min_amount_range": "O valor mínimo de pagamento deve ser de pelo menos {currency} {min}.", + "min_amount_forbidden": "Você não pode especificar um valor mínimo de pagamento para a conta padrão.", + "account_duplicate": "Já existe uma conta {currency}.", + "default": "Algo deu errado ao criar uma conta. Por favor, tente depois de algum tempo." + }, + "accountCreationSuccess": "Os detalhes de sua conta foram salvos com sucesso.", + "accountUpdationSuccess": "Os detalhes de sua conta foram atualizados com sucesso.", + "scheduleSaveSuccess": "Sua programação de pagamentos foi salva com sucesso.", + "editAccountButton": "Editar conta", + "accountTitleText": "Transferência para {currency}", + "addBankDetailsButton": "Adicionar dados bancários", + "noBankAccountText": "Você ainda não adicionou nenhum dado bancário.", + "editBankAccountTitle": "Editar conta", + "minPayoutText": "Mínimo. Pagamento: {amount}" + } +} diff --git a/public/static/locales/pt-BR/manageProjects.json b/public/static/locales/pt-BR/manageProjects.json index 1d1c740631..f4f50b3074 100644 --- a/public/static/locales/pt-BR/manageProjects.json +++ b/public/static/locales/pt-BR/manageProjects.json @@ -25,6 +25,8 @@ "receiveDonations": "Receba Doações", "receiveDonationsInfo": "Por favor, ative assim que o perfil do projeto esteja completo. A Plant-for-the-Planet irá então revisar o perfil e informá-lo se você é elegível para receber doações através desta plataforma. Isto pode levar algumas semanas.", "unitCost": "Custo por árvore (em euros)", + "unitCostRequired": "Informe o custo por unidade", + "invalidUnitCost": "O custo por unidade deve ser superior a € 0 e inferior a € 100", "exit": "Sair para Projetos", "projectLocation": "Localização do projeto", "visitorAssistanceLabel": "Eu providenciarei alojamento, acesso ao local e transporte local se um revisor for enviado pela Plant-for-the-Planet.", @@ -35,6 +37,7 @@ "youtubeURLValidation": "Link de Vídeo do Youtube Inválido", "addCaption": "Adicionar Legenda", "yearOfAbandonment": "Aprox. ano de Abandono", + "labelRestorationStarted": "Início da restauração", "plantingDensity": "Densidade de plantio", "employeeCount": "Contagem de Empregados", "endangeredSpeciesValidation": "Não é uma entrada válida", @@ -66,6 +69,28 @@ "yearAbandonedInfo": "Quando foi a última intervenção humana significativa no local? Ex.: exploração florestal, agricultura, pastagem para gado, queimadas induzidas pelo homem.", "treePerHa": "árvores por hectare", "employeesCountInfo": "Equivalente a uma semana de 40 horas. Ou seja, dois empregados de meio período contam como um.", + "labelRestorationSeasons": "Estações de restauração", + "labelMainInterventions": "Principais intervenções", + "interventionTypes": { + "assisting-seed-rain": "Assisting Seed Rain", + "control-remove-livestock": "Control/Remove Livestock", + "cut-suppressing-grass": "Cut/Suppressing Grass", + "direct-seeding": "Direct Seeding", + "enrichment-planting": "Enrichment Planting", + "establish-firebreaks": "Establish Firebreaks", + "fire-patrols": "Fire Patrols", + "fire-suppression-team": "Fire Suppression Team", + "liberating-regenerants": "Liberating Regenerants", + "maintenance": "Maintenance", + "marking-regenerants": "Marking Regenerants", + "other-interventions": "Other Interventions", + "planting-trees": "Planting Trees", + "removal-contaminated-soil": "Removal of Contaminated Soil", + "removal-invasive-species": "Removal of Invasive Species", + "soil-improvement": "Soil Improvement", + "stop-tree-harvesting": "Stop Tree Harvesting" + }, + "missingInterventionsError": "Selecione pelo menos uma intervenção", "timePeriod": "Período de tempo", "max300Chars": "Máximo 300 caracteres permitidos", "longTermPlanInfo": "Que medidas estão em vigor para expandir a floresta a longo prazo? Como é financiado? Que recursos serão extraídos do local?", @@ -111,12 +136,12 @@ "projectSpendingFinancial": "Gastos financeiros em projetos", "issueDate": "Data de emissão", "acquisitionYear": "Ano de Aquisição", - "largeScalePlanting": "Plantio em larga Escala", - "agroforestry": "Agrofloresta", - "naturalRegeneration": "Regeneração Natural", - "managedRegeneration": "Regeneração com manejo", - "urbanPlanting": "Plantio Urbano", - "otherPlanting": "Outros plantios", + "largeScalePlanting": "Large Scale Planting", + "agroforestry": "Agroforestry", + "naturalRegeneration": "Natural Regeneration", + "managedRegeneration": "Managed Regeneration", + "urbanPlanting": "Urban Planting", + "otherPlanting": "Other Planting", "projectType": "Tipo de projeto", "protectionSeasons": "Estações de Proteção", "polygonRequired": "O polígono é necessário", @@ -136,39 +161,64 @@ "addConservationProjects": "Adicionar Projetos de Conservação", "areaProtected": "Área Protegida (em ha)", "areaProtectedInfo": "Para introduzir casas decimais, separe-as por favor utilizando um entre aspas: \" . ”", + "ecosystem": "Ecossistema", "protectionStartedIn": "Proteção Iniciada em", "actions": "Ações", "activitySeasons": "Estações de atividade", "addAnotherSpecies": "Adicionar Outras Espécies", "add": "Acrescentar", "forestProtectionType": "Tipo/Medidas de Proteção Florestal", - "ecologicalBenefits": "Benefícios Ecológicos", - "socialBenefits": "Benefícios sociais", - "coBenefits": "Co-Benefícios", - "benefits": "Benefícios", - "tropicalMoistForest": "Floresta Tropical úmida", - "dry": "Seco", + "ecologicalBenefits": "Ecological Benefits", + "socialBenefits": "Social Benefits", + "coBenefits": "Co-Benefits", + "benefits": "Benefits", + "tropicalMoistForest": "Tropical Moist Forest", + "dry": "Dry", "ecosystemType": "Selecione por favor Tipo de Ecossistema", - "tropicalDryForests": "Florestas Tropicais Secas", - "tropicalConiferousForests": "Florestas Tropicais de Coníferas", - "tropicalGrasslandsForests": "Florestas de Pastagens Tropicais", - "temperateBroadleafForests": "Florestas Temperadas de Folhas largas", - "temperate-coniferous-forests": "Florestas de Coníferas Temperadas", - "temperateGrasslandsForests": "Florestas de Pastagens Temperadas", - "mediterraneanForests": "Florestas mediterrânicas", - "mangroves": "Manguezais", - "deserts": "Desertos", - "floodedGrasslands": "Pradarias alagadas", - "montaneGrasslands": "Pradarias de montanhas", - "borealForests": "Florestas boreais", + "tropicalDryForests": "Tropical Dry Forests", + "tropicalConiferousForests": "Tropical Coniferous Forests", + "tropicalGrasslandsForests": "Tropical Grasslands Forests", + "temperateBroadleafForests": "Temperate Broadleaf Forests", + "temperate-coniferous-forests": "Temperate Coniferous Forests", + "temperateGrasslandsForests": "Temperate Grasslands Forests", + "mediterraneanForests": "Mediterranean Forests", + "mangroves": "Mangroves", + "deserts": "Deserts", + "floodedGrasslands": "Flooded Grasslands", + "montaneGrasslands": "Montane Grassland", + "borealForests": "Boreal Forests", "tundra": "Tundra", - "temperateConiferousForests": "Florestas de Coníferas Temperadas", + "temperateConiferousForests": "Temperate Coniferous Forests", + "ecosystemTypes": { + "tropical-moist-forests": "Tropical Moist Forests", + "tropical-dry-forests": "Tropical Dry Forests", + "tropical-coniferous-forests": "Tropical Coniferous Forests", + "tropical-grasslands-forests": "Tropical Grasslands Forests", + "temperate-broadleaf-forests": "Temperate Broadleaf Forests", + "temperate-coniferous-forests": "Temperate Coniferous Forests", + "temperate-grasslands-forests": "Temperate Grassland Forests", + "mediterranean-forests": "Mediterranean Forests", + "mangroves": "Mangroves", + "deserts": "Deserts", + "flooded-grasslands": "Flooded Grasslands", + "montane-grasslands": "Montane Grasslands", + "boreal-forests": "Boreal Forests", + "tundra": "Tundra" + }, + "unitTypeRequired": "Selecione um tipo de unidade", + "unitType": "Tipo de unidade", + "unitTypes": { + "tree": "árvore", + "m2": "m²" + }, "tenure": "Posse", "rent": "Aluguel", "ownershipType": "Tipo de proprietário", "landOwnershipType": "Tipo de propriedade de terra", "restorationProject": "Projeto de Restauração", "addProjetDescription": "Você está a poucos passos de mostrar o seu trabalho na plataforma Plant-for-theplanet.", + "englishOnly": " Por favor, crie projetos somente em inglês.", + "important": "Importante:", "addProjetContact": "Se precisar de ajuda, contate-nos em ", "supportLink": "support@plant-for-the-planet.org", "wrongCoordinates": "Coordenadas erradas", @@ -177,7 +227,21 @@ "motivationInfo": "A motivação para proteger esse ecossistema em específico.", "hectar": "hectares", "validation": "{fieldName} é Inválido", + "date": "Data", "plantingDensityValidation": "Por favor introduza Densidade do plantio", - "onlyEnglish": "Por favor, crie/edite projetos apenas em inglês. As traduções de Projetos são geridas automaticamente pela Plant-for-the-Planet." + "maxPlantingDensityValidation": "insira a densidade máxima de plantio", + "onlyEnglish": "Por favor, crie/edite projetos apenas em inglês. As traduções de Projetos são geridas automaticamente pela Plant-for-the-Planet.", + "since": "desde", + "Since": "Desde", + "and": "e", + "errorForMaxPlantingDensity": "Esse valor deve ser maior do que a densidade de plantio", + "managePayoutsButton": "Gerenciar pagamentos", + "siteNameValidation": "Digite um nome de site", + "reviewNote": "Observação importante: A Plant-for-the-Planet analisará e validará seus dados. Para continuar com o processo de integração e verificação, e para aprovar seu projeto para doações, vários documentos devem ser fornecidos:", + "legalAccreditation": "Credenciamento legal (certificado de registro/número de registro) mostrando o status de caridade/sem fins lucrativos da sua organização - não mais de 2 anos!", + "taxExemption": "Documentação de isenção de impostos (se aplicável em seu país)", + "annualReport": "Último relatório anual", + "financialReport": "Último relatório financeiro auditado", + "PlantingReport": "Relatório de progresso do projeto" } } diff --git a/public/static/locales/pt-BR/maps.json b/public/static/locales/pt-BR/maps.json index 440a956af9..ee88833da6 100644 --- a/public/static/locales/pt-BR/maps.json +++ b/public/static/locales/pt-BR/maps.json @@ -42,6 +42,11 @@ "today": "Hoje", "yesterday": "Ontem", "clickForDetails": "Clique para Detalhes", - "treeMapper": "TreeMapper" + "treeMapper": "TreeMapper", + "showProjectList": "Mostrar lista de projetos", + "showProjectDetails": "Mostrar detalhes do projeto", + "hideProjectList": "Ocultar lista de projetos", + "hideProjectDetails": "Ocultar detalhes do projeto", + "countries": "Países" } } diff --git a/public/static/locales/pt-BR/me.json b/public/static/locales/pt-BR/me.json index de2eb78f9f..2689c3d1c5 100644 --- a/public/static/locales/pt-BR/me.json +++ b/public/static/locales/pt-BR/me.json @@ -1,10 +1,32 @@ { "Me": { + "managePayouts": { + "menuText": "Gerenciar pagamentos", + "titleOverview": "Gerenciar pagamentos - Visão geral", + "titleAddBankDetails": "Gerenciar pagamentos - Adicionar dados bancários", + "titlePayoutSchedule": "Gerenciar pagamentos - Agendar pagamentos", + "titleEditBankDetails": "Gerenciar pagamentos - Editar dados bancários" + }, + "donationLinkTitle": "Criar link de doação", + "planetcash": { + "menuText": "PlanetCash", + "submenuText": "Meu PlanetCash", + "titleAccount": "PlanetCash - Contas", + "titleTransactions": "PlanetCash - Transações", + "titleCreateAccount": "PlanetCash - Criar conta" + }, "treesPlanted": "Árvore Plantada", "treesPlanted_plural": "Árvores Plantadas", + "bulkCodesTitleStep3": "Gerar certificados e códigos de árvore - Emitir códigos", + "bulkCodesTitleStep2": "Gerar certificados e códigos de árvore - Selecionar projeto", + "bulkCodesTitle": "Gerar certificados e códigos de árvore - Selecionar método", + "bulkCodes": "Certificados e códigos", "target": "Alvo", + "editTarget": "Editar destino", "share": "Compartilhe", "registerTrees": "Registrar Árvores", + "registeredTree": "Árvore registrada", + "linkedIn": "LinkedIn", "registerTreesDescription": "Registre as árvores que você mesmo plantou, por exemplo, no seu quintal.", "myForest": "Minha Floresta", "giftToGiftee": "Presente para {gifteeName}", @@ -42,6 +64,9 @@ "filters": "Filtros", "registeredTrees": "Árvores Registradas", "embedWidget": "Incorporar Widget", + "donationLink": "Criar link de doação", + "gift": "Presentes", + "donation": "Doação", "tree-donation": "Doação de Árvores", "tree-gift": "Árvore de presente", "tree-cash": "TreeCash", @@ -58,8 +83,11 @@ "donorNameRequired": "Nome de Doador(a) Requerido", "donationAmountRequired": "Quantia de Doação Necessária", "frequencyRequired": "Frequência Requerida", + "dateRequired": "Data necessária", "project": "Nome do Projeto", + "planetCashPayment": "Pagamento PlanetCash", "method": "Forma de pagamento", + "unitCost": "Custo por {unitType}", "treeCount": "Contagem de árvores", "lastUpdate": "Última Atualização", "donorCertificate": "Certificado do Doador", @@ -152,6 +180,8 @@ "planetFee": "Taxa Planet", "transactionFee": "Taxa de Transação", "transferFee": "Taxa de transferência", + "giftComment": "Comentário (privado)", + "giftOccasion": "Ocasião", "open": "Aberto", "downloads": "Downloads", "account": "Conta", @@ -161,6 +191,9 @@ "targetErrorMessage": "O número deve ser positivo ou maior que zero", "taxDeductibleReceipt": "Taxa Dedutível de Imposto", "giftCertificate": "Certificado do presente", + "downloadCodes": "Códigos de download", + "downloadCodesGeneralError": "O download falhou. Tente depois de algum tempo.", + "downloadCodesNetworkError": "Não foi possível obter códigos. Verifique sua rede.", "paypal-paypal": "Paypal", "stripe-": "Stripe", "unknown-method": "Desconhecido", @@ -176,7 +209,9 @@ "payments": "Pagamentos", "stripe-sepa_debit": "SEPA (Stripe)", "sepa_debit": "SEPA (Stripe)", + "offline": "Off-line", "offline-offline": "Offline", + "offline-transfer": "Off-line", "profile": "Perfil", "projects": "Projetos", "settings": "Configurações", @@ -217,6 +252,31 @@ "apiKeyMessage1": "A API Key é como uma senha digital que permite agir como o seu perfil em qualquer aplicativo. Também permite aplicativos doarem em seu nome, utilizar PlanetCash e visualizar transações.", "apiKeyMessage2": "Uma vez gerada uma chave API, será necessária uma autenticação de duas etapas para o seu login. Isto poderá ser configurado na próxima vez que iniciar a sessão.", "apiKeyMessage3": "A regeneração de uma chave API irá invalidar imediatamente a sua chave API existente.", - "regenerateKey": "Regenerar chave" + "regenerateKey": "Regenerar chave", + "giftFund": "GiftFund", + "dataExplorer": "Explorador de dados", + "switchUser": "Representar o usuário", + "switchUserMessage": "Digite o e-mail do usuário para o qual deseja mudar no campo abaixo.", + "profileEmail": "E-mail de perfil", + "supportPin": "Pino de suporte", + "alphaNumeric": "Digite o código alfanumérico de 4 dígitos", + "switch": "Representar", + "targetUser": "No momento, você está se passando por {impersonatedEmail}", + "exitImpersonation": "Sair da personificação", + "enterTheEmail": "Digite o e-mail do usuário de destino", + "enterSupportPin": "Digite o PIN de suporte do usuário de destino", + "invalidEmail": "Digite um ID de e-mail válido", + "wrongEntered": "O ID do e-mail ou o PIN do suporte está incorreto!", + "donatedTrees": "Árvores doadas", + "resetPin": "Pino de reinicialização", + "donate": "Doação", + "donated": "Doado", + "conserved": "Conservado", + "restored": "Restaurado", + "membershipCtaButtonText": "CADASTRE-SE AGORA", + "membershipCtaCopy": "Apoie-nos TORNANDO-SE MEMBRO", + "shareUrl": "Compartilhar URL", + "treesOfTrees": "{count1} de {count2}", + "document": "Documentação da plataforma (EN)" } } diff --git a/public/static/locales/pt-BR/planetcash.json b/public/static/locales/pt-BR/planetcash.json index ffcd4415b0..f189e2d667 100644 --- a/public/static/locales/pt-BR/planetcash.json +++ b/public/static/locales/pt-BR/planetcash.json @@ -1 +1,34 @@ -{ } +{ + "Planetcash": { + "title": "PlanetCash", + "partnerSignupInfo": "O uso desse recurso pelas empresas está sujeito à parceria com a Plant-for-the-Planet. Entre em contato com partner@plant-for-the-planet.org para obter detalhes.", + "description": "O PlanetCash é uma ferramenta de fácil desenvolvimento que amplia a plataforma Plant-for-the-Planet com APIs e ferramentas integradas. O saldo do PlanetCash é uma contribuição para o Plant-for-the-Planet que pode ser dedicada pelo doador a diferentes projetos na plataforma.", + "termsText": "Ver Termos e Condições.", + "learnMoreText": "Saiba mais sobre o PlanetCash.", + "tabAccounts": "Contas", + "tabCreateAccount": "Criar conta", + "tabTransactions": "Transações", + "accountTitleText": "{currency} Conta PlanetCash ({country})", + "createAccountTitleText": "Registrar-se no PlanetCash", + "addBalanceButton": "Adicionar saldo", + "labelAccountHolder": "Titular da conta", + "labelBalance": "Equilíbrio", + "labelCreditLimit": "Limite", + "deactivateAccountButton": "Desativar", + "activateAccountButton": "Ativar", + "accountInactiveHelpText": "Essa conta está inativa e não pode ser usada para fazer contribuições. Para ativar essa conta, entre em contato com support@plant-for-the-planet.org.", + "noAccountsText": "Parece que você ainda não criou uma conta PlanetCash.", + "createPlanetCashButton": "Criar uma conta Planet Cash", + "accountQuotaReachedText": "Não é possível criar mais contas porque a cota de contas foi esgotada.", + "accountCreationSuccess": "Sua conta PlanetCash foi criada com sucesso", + "labelCountry": "País", + "planetCashTerms1": "Ao clicar em \"Criar conta PlanetCash\", eu concordo com os Termos e Condições do Plant-for-the-Planet e do PlanetCash.", + "planetCashTerms2": "Entendo que as doações PlanetCash não são reembolsáveis e que os pagamentos não alocados serão automaticamente alocados a projetos na Plataforma após seis meses de um Pagamento.", + "planetCashTerms3": "As doações para a Conta PlanetCash por motivos pessoais geralmente são dedutíveis de impostos no país selecionado nesta etapa. O uso comercial do PlanetCash pode não ser elegível para deduções fiscais. Em caso de dúvidas, entre em contato com support@plant-for-the-planet.org ou com seu consultor fiscal.", + "accountError": { + "active_account_exists": "Já existe uma conta ativa. Desative essa conta antes de ativar outra conta.", + "duplicate_account": "Você já criou uma conta para {country}", + "default": "Algo deu errado ao criar uma conta. Por favor, tente depois de algum tempo." + } + } +} diff --git a/public/static/locales/pt-BR/profile.json b/public/static/locales/pt-BR/profile.json index 56354fd0f5..fc1d8150af 100644 --- a/public/static/locales/pt-BR/profile.json +++ b/public/static/locales/pt-BR/profile.json @@ -1,13 +1,49 @@ { "Profile": { + "myProfile": { + "memberSince": "Membro desde {date}", + "userDescription": "{bio}" + }, + "feature": { + "redeem": "Resgatar", + "registerTree": "Árvore de registro", + "share": "Compartilhar" + }, "myPublicProfile": { - "support": "Suporte" + "support": "Suporte", + "link": "Link" }, "myForestMap": { - "plantedTree": "{count, plural, =0 {Árvores} =1 {Árvore} other {Árvores}}\n" + "plantedTree": "{count, plural, =1 {# Árvore} other {# Árvores}}", + "treesPlanted": "Árvores plantadas", + "restored": "Restaurado", + "registered": "Registrado", + "conservation": "Conservação", + "projects": "Projetos", + "countries": "Países", + "donations": "Doações", + "area": "{areaConserved} m²", + "zoomIn": "amplie para obter mais detalhes", + "totalDonation": "{count, plural, =1 {# doação} other {# doações}} ", + "totalProject": "para {count, plural, =1 {# projeto} other {# projetos}}", + "tpoName": "Por {tpo}" + }, + "myTreeCounter": { + "treesPlanted": "Árvores plantadas", + "editTarget": "Editar destino" }, "myContributions": { - "receivedFrom": "Recebido de {name}" + "treesPlantedAndAreaRestored": "Árvores plantadas e áreas restauradas", + "treeRegistered": "{count, plural, =1 {# Árvore registrada} other {# Árvores registradas}}", + "receivedFrom": "Recebido de {name}", + "loadMoreContribution": "Carregar mais contribuições", + "loadingContribution": "Carregando Contribution....", + "donate": "Doação", + "donateAgain": "Doe novamente", + "conservedSmall": "conservado", + "restoredSmall": "restaurado", + "areaType": "{areaConserved} m² {type}", + "areaConserved": "Áreas conservadas" } } } diff --git a/public/static/locales/pt-BR/redeem.json b/public/static/locales/pt-BR/redeem.json index b34704dd11..b5293d8a1a 100644 --- a/public/static/locales/pt-BR/redeem.json +++ b/public/static/locales/pt-BR/redeem.json @@ -1,11 +1,21 @@ { "Redeem": { + "myPlantedTreesByOrg": "Minha árvore {formattedNumber} será plantada por {tpoName}", + "myPlantedTreesByOrg_plural": "Minhas árvores {formattedNumber} serão plantadas por {tpoName}", "congratulations": "Parabéns!", "addToMyTrees": "Adicionar às minhas árvores", "validateCode": "Validar Código", "enterRedeemCode": "Por favor, digite um código para resgatar", "validating": "Validação", "invalidType": "Tipo inválido, por favor verifique o link novamente", - "redeemDescription": "Resgate o seu voucher de árvore e outros códigos." + "redeeming": "Redenção:", + "invalidCode": "Esse código é inválido.", + "alreadyRedeemed": "O código já foi resgatado", + "redeemCode": "Código de resgate", + "redeemingCode": "Código de resgate...", + "redeem": "Resgatar", + "redeemDescription": "Resgate o seu voucher de árvore e outros códigos.", + "successfullyRedeemed": "Resgatado com sucesso", + "redeemAnotherCode": "Resgatar outro código" } } diff --git a/public/static/locales/pt-BR/tenants.json b/public/static/locales/pt-BR/tenants.json index c8f2116f7b..5abfea59a7 100644 --- a/public/static/locales/pt-BR/tenants.json +++ b/public/static/locales/pt-BR/tenants.json @@ -6,7 +6,7 @@ }, "energizer": { "title": "Energizer ❤️ Baeume", - "description": "\"O \"Gas Richtige tun\" é para uns der zentrale Leitgedanke, um dem wir unser Handeln ausrichten. Se o seu conteúdo é muito simples, o Batterie im Jahre 1989 gelingt es uns, unsere Batterien immer weiter zu verbessern, langlebiger und damit umweltfreundlicher zu machen. Não se trata de uma parceria com a Plant-for-the-Planet, mas sim de uma parceria com a Tradição, pois é uma forma de se conhecer e de se fazer uma gestão. Gemeinsam pflanzen wir Bäume und veranstalten Bildungsprogramme für Kinder und Jugendliche, ein Bewusstsein für globale Gerechtigkeit und die Klimakrise zu schaffen. Einbinden wollen wir dabei auch unsere Konsumenten und den Handel, denn nur gemeinsam kann diese zentrale Herausforderung unserer Zeit gelöst werden. Bist du dabei?" + "description": "`Das Richtige tun` ist für uns der zentrale Leitgedanke, an dem wir unser Handeln ausrichten. Seit der ersten quecksilberfreien Batterie im Jahre 1989 gelingt es uns, unsere Batterien immer weiter zu verbessern, langlebiger und damit umweltfreundlicher zu machen. Unsere Partnerschaft mit Plant-for-the-Planet steht genau in dieser Tradition, die Umwelt zu schonen und für mehr Nachhaltigkeit einzustehen. Gemeinsam pflanzen wir Bäume und veranstalten Bildungsprogramme für Kinder und Jugendliche, um ein Bewusstsein für globale Gerechtigkeit und die Klimakrise zu schaffen. Einbinden wollen wir dabei auch unsere Konsumenten und den Handel, denn nur gemeinsam kann diese zentrale Herausforderung unserer Zeit gelöst werden. Bist du dabei?" }, "senatDerWirtschaft": { "title": "Senat Der Wirtschaft", diff --git a/public/static/locales/pt-BR/treemapper.json b/public/static/locales/pt-BR/treemapper.json index 4db2af14c3..ddc268c5c2 100644 --- a/public/static/locales/pt-BR/treemapper.json +++ b/public/static/locales/pt-BR/treemapper.json @@ -12,6 +12,7 @@ "coordinates": "Coordenadas", "guid": "GUID", "height": "Altura", + "invalidHeight": "Altura inválida", "width": "Largura", "plantDate": "Data do Plantio", "registrationDate": "Data de registro", @@ -25,6 +26,7 @@ "plantingLocation": "Local de plantio", "reviewAndSubmit": "Rever e Submeter", "sampleTree": "Amostra da árvore #{number}", + "tag": "Etiqueta", "import": "Importar", "editor": "Editor", "draw": "Desenhar", @@ -33,8 +35,11 @@ "downloadCSVTemplate": "Fazer download do modelo CSV", "treeTag": "Etiqueta da árvore", "diameter": "Diâmetro", + "invalidDiameter": "Diâmetro inválido", "latitude": "Latitude", + "invalidLatitude": "Latitude inválida", "longitude": "Longitude", + "invalidLongitude": "Longitude inválida", "addAnotherSampleTree": "Adicionar outra árvore de amostra", "skip": "Pular", "treeSpecies": "Espécies de Árvores", @@ -59,6 +64,14 @@ "importCSV": "Importar CSV", "fileFormatCSV": "Ficheiro (csv)", "aliases": "Apelidos", - "external": "Externo" + "aliasesValidation": "Digite os aliases", + "speciesValidation": "Digite uma espécie", + "external": "Externo", + "date": "Data", + "datePlantedRequired": "Data de plantio necessária", + "measurements": "Medidas", + "ignoredColumnsWarning": "As colunas extras foram ignoradas", + "back": "Voltar", + "submit": "Enviar" } } diff --git a/public/static/locales/pt-BR/treemapperAnalytics.json b/public/static/locales/pt-BR/treemapperAnalytics.json index ffcd4415b0..a1898082d2 100644 --- a/public/static/locales/pt-BR/treemapperAnalytics.json +++ b/public/static/locales/pt-BR/treemapperAnalytics.json @@ -1 +1,59 @@ -{ } +{ + "TreemapperAnalytics": { + "title": "Explorador de dados", + "from": "De", + "to": "Para", + "clearFilter": "Limpar filtro", + "days": "Dias", + "months": "Meses", + "weeks": "Semanas", + "years": "Anos", + "treesPlanted": "Árvores plantadas", + "speciesPlanted": "Espécies plantadas", + "calenderWeek": "CW", + "project": "Projeto", + "export": "Exportação", + "exportData": "Exportar dados", + "jan": "Jan", + "feb": "Fevereiro", + "mar": "Mar", + "apr": "Abril", + "may": "Maio", + "jun": "Junho", + "jul": "Julho", + "aug": "Ago", + "sep": "Setembro", + "oct": "Outubro", + "nov": "Nov", + "dec": "Dez", + "exportColumnHeaders": { + "hid": "ID legível para humanos para um local de planta", + "plantDate": "Data de plantio", + "species": "Nome da espécie plantada", + "geometry": "Coordenada GeoJson do polígono", + "type": "Tipo de localização da planta (única, múltipla)", + "treesPlanted": "Total de árvores em um local de planta", + "metadata": "Metadados de localização da planta", + "plantProjectId": "ID de back-end do projeto do qual o local da fábrica faz parte", + "sampleTreeCount": "Contagem de árvores de amostra presentes no local da planta", + "captureStatus": "Status de captura do local da planta.", + "created": "Registro de data e hora da criação" + }, + "readme": "LEIA-ME", + "interventionData": "Dados da intervenção", + "monitoringPlotsData": "Dados das parcelas de monitoramento", + "dataIntervals": "Intervalos de dados", + "errors": { + "emptyExportData": "Os dados não estão disponíveis para o intervalo especificado. Tente um intervalo de tempo diferente ou verifique se os dados para esse período foram registrados." + }, + "timeFrame": "Período de tempo", + "scientificName": "Nome científico", + "type": "Tipo", + "interventions": "Intervenções", + "monitoringPlots": "Monitoramento de parcelas (em breve...)", + "trillion": "t", + "billion": "b", + "million": "m", + "thousand": "k" + } +} From 642e0fab6111f215096fed52e39fdeed2b088d0d Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:30:45 +0530 Subject: [PATCH 56/70] feat: corrects share text --- public/static/locales/cs/donate.json | 2 +- public/static/locales/de/donate.json | 2 +- public/static/locales/en/donate.json | 2 +- public/static/locales/es/donate.json | 2 +- public/static/locales/fr/donate.json | 2 +- public/static/locales/it/donate.json | 2 +- public/static/locales/pt-BR/donate.json | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/public/static/locales/cs/donate.json b/public/static/locales/cs/donate.json index 07f3403a3a..1c8215fd76 100644 --- a/public/static/locales/cs/donate.json +++ b/public/static/locales/cs/donate.json @@ -68,7 +68,7 @@ "thisDonationSupports": "Tento dar podporuje", "plantTreesWith": "Zasaďte stromy s", "textToShare": "Připojte se k {name} a tisícům dalších, abyste zasadili bilion stromů a řešili tak klimatickou krizi #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "shareTextTitle": "Stop Talking. Start Planting.", + "shareTextTitle": "Stop talking. Start planting.", "textToShareLinkedin": "Přidejte se k {name} a tisícům dalších, aby jsme zasadili bilion stromů, aby jsme se vypořádali s klimatickou krizí", "textToShareForMe": "Připojte se ke mně a tisícům dalších ak cíli zasazení bilionu stromů, abychom se vypořádali s klimatickou krizí", "donationTokenInvalid": "Zadaný darovací token je neplatný.", diff --git a/public/static/locales/de/donate.json b/public/static/locales/de/donate.json index feaf0a3d08..4d887d477c 100644 --- a/public/static/locales/de/donate.json +++ b/public/static/locales/de/donate.json @@ -68,7 +68,7 @@ "thisDonationSupports": "Diese Spende unterstützt", "plantTreesWith": "Bäume pflanzen mit", "textToShare": "Schließe dich mit {name} und Tausenden anderen zusammen, um eine Billion Bäume zu pflanzen, um die Klimakrise zu bewältigen #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "shareTextTitle": "Stop Talking. Start Plant", + "shareTextTitle": "Stop talking. Start planting.", "textToShareLinkedin": "Schließe dich mit {name} und Tausenden anderen zusammen, um eine Billion Bäume zu pflanzen, um die Klimakrise zu bewältigen", "textToShareForMe": "Pflanzt mit mir und Tausenden von anderen 1.000 Milliarden Bäume, um die Klimakrise zu bekämpfen", "donationTokenInvalid": "Das bereitgestellte Spenden-Token ist ungültig.", diff --git a/public/static/locales/en/donate.json b/public/static/locales/en/donate.json index a6ee8c726f..3a3b2dff99 100644 --- a/public/static/locales/en/donate.json +++ b/public/static/locales/en/donate.json @@ -68,7 +68,7 @@ "thisDonationSupports": "This donation supports", "plantTreesWith": "Plant trees with", "textToShare": "Join {name} and thousand of others to plant a trillion trees to tackle the climate crisis #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "shareTextTitle": "Stop Talking. Start Planting.", + "shareTextTitle": "Stop talking. Start planting.", "textToShareLinkedin": "Join {name} and thousand of others to plant a trillion trees to tackle the climate crisis", "textToShareForMe": "Join me and thousand of others to plant a trillion trees to tackle the climate crisis", "donationTokenInvalid": "The provided donation token is invalid.", diff --git a/public/static/locales/es/donate.json b/public/static/locales/es/donate.json index 02cf374561..7e4f7985d4 100644 --- a/public/static/locales/es/donate.json +++ b/public/static/locales/es/donate.json @@ -68,7 +68,7 @@ "thisDonationSupports": "Esta donación apoya", "plantTreesWith": "Plantar árboles con", "textToShare": "Únete a {name} y miles de otros para plantar un trillón de árboles para hacer frente a la crisis climática #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "shareTextTitle": "Stop Talking. Start Planting.", + "shareTextTitle": "Stop talking. Start planting.", "textToShareLinkedin": "Únete a {name} y miles de otros para plantar un trillón de árboles para hacer frente a la crisis climática", "textToShareForMe": "Únete a nosotros y a otros miles para plantar un billón de árboles para hacer frente a la crisis climática", "donationTokenInvalid": "La ficha de donación proporcionada es inválida.", diff --git a/public/static/locales/fr/donate.json b/public/static/locales/fr/donate.json index 1ad02afce2..4e79d472eb 100644 --- a/public/static/locales/fr/donate.json +++ b/public/static/locales/fr/donate.json @@ -68,7 +68,7 @@ "thisDonationSupports": "Ce don soutient", "plantTreesWith": "Planter des arbres avec", "textToShare": "Rejoignez {name} et des milliers d'autres pour planter un billion d'arbres pour lutter contre la crise climatique ! #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "shareTextTitle": "Arrêtez de parler. Commencer à planter", + "shareTextTitle": "Stop talking. Start planting.", "textToShareLinkedin": "Rejoignez {name} et des milliers d'autres pour planter un mille milliards d'arbres afin de lutter contre la crise climatique", "textToShareForMe": "Rejoignez-moi ainsi que des milliers d'autres personnes pour planter mille milliards d'arbres et lutter contre la crise climatique", "donationTokenInvalid": "Le jeton de don fourni n'est pas valable.", diff --git a/public/static/locales/it/donate.json b/public/static/locales/it/donate.json index 1ced97d47a..862e12de71 100644 --- a/public/static/locales/it/donate.json +++ b/public/static/locales/it/donate.json @@ -68,7 +68,7 @@ "thisDonationSupports": "Questa donazione sostiene", "plantTreesWith": "Pianta alberi con", "textToShare": "Unisciti a {name} e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "shareTextTitle": "Smettila di parlare. Avviare l'impianto", + "shareTextTitle": "Stop talking. Start planting.", "textToShareLinkedin": "Unisciti a {name} e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica", "textToShareForMe": "Unisciti a me e a migliaia di altri per piantare un trilione di alberi per affrontare la crisi climatica", "donationTokenInvalid": "Il gettone di donazione fornito non è valido.", diff --git a/public/static/locales/pt-BR/donate.json b/public/static/locales/pt-BR/donate.json index 60a393771c..d68d13616e 100644 --- a/public/static/locales/pt-BR/donate.json +++ b/public/static/locales/pt-BR/donate.json @@ -68,7 +68,7 @@ "thisDonationSupports": "Esta doação apoia", "plantTreesWith": "Plante árvores com", "textToShare": "Junte-se a {name} e a milhares de outras pessoas que estão plantando um trilhão de árvores para enfrentar a crise climática #StopTalkingStartPlanting #TrillionTrees @trilliontrees", - "shareTextTitle": "Pare de falar. Comece a plantar", + "shareTextTitle": "Stop talking. Start planting.", "textToShareLinkedin": "Junte-se a {name} e a milhares de outras pessoas que estão plantando um trilhão de árvores para enfrentar a crise climática", "textToShareForMe": "Junte-se a mim e a milhares de outras pessoas para plantar um trilhão de árvores e assim enfrentar a crise climática", "donationTokenInvalid": "O token de doação fornecido é inválida.", From 12fffeea344961ba69428e6d228f4a4b16a30c95 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:40:32 +0530 Subject: [PATCH 57/70] fix: corrects add project description --- public/static/locales/cs/manageProjects.json | 2 +- public/static/locales/de/manageProjects.json | 2 +- public/static/locales/pt-BR/manageProjects.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/public/static/locales/cs/manageProjects.json b/public/static/locales/cs/manageProjects.json index 2eb9140f9f..73beaad7b4 100644 --- a/public/static/locales/cs/manageProjects.json +++ b/public/static/locales/cs/manageProjects.json @@ -217,7 +217,7 @@ "ownershipType": "Typ vlastnictví", "landOwnershipType": "Typ vlastnictví půdy", "restorationProject": "Projekt obnovy", - "addProjetDescription": "Od předvedení své práce na platformě Plant-for-the-planet vás dělí jen pár kroků. Důležité: Vytvářejte projekty pouze v angličtině", + "addProjetDescription": "Od předvedení své práce na platformě Plant-for-the-Planet vás dělí jen pár kroků. Důležité: Vytvářejte projekty pouze v angličtině", "englishOnly": " Projekty vytvářejte pouze v angličtině.", "important": "Důležité:", "addProjetContact": "Pokud potřebujete pomoc, kontaktujte nás na adrese ", diff --git a/public/static/locales/de/manageProjects.json b/public/static/locales/de/manageProjects.json index 61a28ffaed..0a4d29717c 100644 --- a/public/static/locales/de/manageProjects.json +++ b/public/static/locales/de/manageProjects.json @@ -217,7 +217,7 @@ "ownershipType": "Eigentumsverhältnis", "landOwnershipType": "Art des Landbesitzes", "restorationProject": "Renaturierungsprojekt", - "addProjetDescription": "Du bist nur wenige Schritte davon entfernt, deine Arbeit auf der Plattform Plant-for-the-planet zu präsentieren. ", + "addProjetDescription": "Du bist nur wenige Schritte davon entfernt, deine Arbeit auf der Plattform Plant-for-the-Planet zu präsentieren. ", "englishOnly": "Bitte erstelle deine Projekte nur auf Englisch.", "important": "WICHTIG: ", "addProjetContact": "Wenn du Hilfe benötigst, kontaktiere uns unter ", diff --git a/public/static/locales/pt-BR/manageProjects.json b/public/static/locales/pt-BR/manageProjects.json index f4f50b3074..58d084105b 100644 --- a/public/static/locales/pt-BR/manageProjects.json +++ b/public/static/locales/pt-BR/manageProjects.json @@ -216,7 +216,7 @@ "ownershipType": "Tipo de proprietário", "landOwnershipType": "Tipo de propriedade de terra", "restorationProject": "Projeto de Restauração", - "addProjetDescription": "Você está a poucos passos de mostrar o seu trabalho na plataforma Plant-for-theplanet.", + "addProjetDescription": "Você está a poucos passos de mostrar o seu trabalho na plataforma Plant-for-the-Planet.", "englishOnly": " Por favor, crie projetos somente em inglês.", "important": "Importante:", "addProjetContact": "Se precisar de ajuda, contate-nos em ", From 735ee19af19d992b4d5e0b9c0c2cfd3591e31a2b Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Tue, 26 Mar 2024 16:11:55 +0530 Subject: [PATCH 58/70] fix: resolves issue (lang change on navigation) - stops prefetching nav menu links - changes cookie config to allow sameSite = 'lax' --- middleware.ts | 6 +++++- src/features/common/Layout/Navbar/index.tsx | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/middleware.ts b/middleware.ts index 24ec3c7a0b..0e4e2ee4f9 100644 --- a/middleware.ts +++ b/middleware.ts @@ -19,6 +19,7 @@ function getLocale(request: NextRequest): string | undefined { const previouslySelectedLanguage = request.cookies.get('NEXT_LOCALE')?.value; + if ( previouslySelectedLanguage !== undefined && locales.includes(previouslySelectedLanguage) && @@ -38,6 +39,7 @@ function getLocale(request: NextRequest): string | undefined { /** Identifies locale in relative url and removes it */ function removeLocaleFromUrl(pathname: string): string { + // For simplicity, we assume that locale will always be in the format of xx or xx-XX const localeRegex = /^[a-z]{2}(-[a-z]{2})?$/i; const splitPathname = pathname.split('/'); @@ -106,8 +108,10 @@ export default async function middleware(req: NextRequest) { localeFromPath !== localeCookieValue ) { res.cookies.set('NEXT_LOCALE', localeFromPath, { - sameSite: 'strict', maxAge: 31536000, // 1 year + path: '/', + sameSite: 'lax', + secure: process.env.NODE_ENV !== 'development', }); } diff --git a/src/features/common/Layout/Navbar/index.tsx b/src/features/common/Layout/Navbar/index.tsx index 5933a05c7e..35c449d3ff 100644 --- a/src/features/common/Layout/Navbar/index.tsx +++ b/src/features/common/Layout/Navbar/index.tsx @@ -209,7 +209,10 @@ export default function NavbarComponent() { } key={link} > - +
Date: Tue, 2 Apr 2024 13:40:08 +0530 Subject: [PATCH 59/70] feat: filters available locales based on tenant --- middleware.ts | 34 ++++++++++++------- .../common/Layout/QueryParamsContext.tsx | 3 -- src/utils/multiTenancy/helpers.ts | 32 ++++++++++++++++- 3 files changed, 52 insertions(+), 17 deletions(-) diff --git a/middleware.ts b/middleware.ts index 0e4e2ee4f9..b1a079f45e 100644 --- a/middleware.ts +++ b/middleware.ts @@ -1,20 +1,21 @@ import { NextRequest, NextResponse } from 'next/server'; -import { getTenantSlug } from './src/utils/multiTenancy/helpers'; +import { getTenantConciseInfo } from './src/utils/multiTenancy/helpers'; import { match as matchLocale } from '@formatjs/intl-localematcher'; import Negotiator from 'negotiator'; import { i18nConfig } from './i18n-config'; -function getLocale(request: NextRequest): string | undefined { +function getLocale( + request: NextRequest, + supportedLocales: string[] +): string | undefined { try { // Negotiator expects plain object so we need to transform headers const negotiatorHeaders: Record = {}; request.headers.forEach((value, key) => (negotiatorHeaders[key] = value)); - const locales = i18nConfig.locales; - // Use negotiator and intl-localematcher to get best locale const languages = new Negotiator({ headers: negotiatorHeaders }).languages( - locales + supportedLocales ); const previouslySelectedLanguage = @@ -22,13 +23,17 @@ function getLocale(request: NextRequest): string | undefined { if ( previouslySelectedLanguage !== undefined && - locales.includes(previouslySelectedLanguage) && + supportedLocales.includes(previouslySelectedLanguage) && languages[0] !== previouslySelectedLanguage ) { languages.unshift(previouslySelectedLanguage); } - const locale = matchLocale(languages, locales, i18nConfig.defaultLocale); + const locale = matchLocale( + languages, + supportedLocales, + i18nConfig.defaultLocale + ); return locale; } catch (error) { @@ -67,13 +72,20 @@ export const config = { export default async function middleware(req: NextRequest) { const url = req.nextUrl; const pathname = url.pathname; + const host = req.headers.get('host') as string; + const { slug, supportedLanguages } = await getTenantConciseInfo(host); + + // Filters i18nConfig.locales to only include tenant supported languages + const commonSupportedLocales = + supportedLanguages?.filter((lang) => i18nConfig.locales.includes(lang)) ?? + i18nConfig.locales; - const isLocaleMissing = i18nConfig.locales.every( + const isLocaleMissing = commonSupportedLocales.every( (locale) => !pathname.startsWith(`/${locale}/`) && pathname !== `/${locale}` ); if (isLocaleMissing) { - const locale = getLocale(req); + const locale = getLocale(req, commonSupportedLocales); const cleanPathname = removeLocaleFromUrl(pathname); const searchParams = req.nextUrl.search; const newUrl = new URL( @@ -85,10 +97,6 @@ export default async function middleware(req: NextRequest) { return NextResponse.redirect(newUrl); } - const host = req.headers.get('host'); - - const slug = await getTenantSlug(host!); - // Prevent security issues – users should not be able to canonically access // the pages/sites folder and its respective contents. if (url.pathname.startsWith(`/sites`)) { diff --git a/src/features/common/Layout/QueryParamsContext.tsx b/src/features/common/Layout/QueryParamsContext.tsx index e3ada3ff89..95620e5470 100644 --- a/src/features/common/Layout/QueryParamsContext.tsx +++ b/src/features/common/Layout/QueryParamsContext.tsx @@ -25,9 +25,6 @@ export const ParamsContext = createContext({ const QueryParamsProvider: FC = ({ children }) => { const locale = useLocale(); - const { tenantConfig } = useTenant(); - // TODOO - use tenant supported locales. This may not be needed any more as middleware takes care. - const tenantSupportedLocale = tenantConfig.config.languages ?? ['en']; const [isContextLoaded, setIsContextLoaded] = useState(false); const [embed, setEmbed] = useState(undefined); const [showBackIcon, setShowBackIcon] = useState(undefined); diff --git a/src/utils/multiTenancy/helpers.ts b/src/utils/multiTenancy/helpers.ts index c78163836a..276f2061fc 100644 --- a/src/utils/multiTenancy/helpers.ts +++ b/src/utils/multiTenancy/helpers.ts @@ -100,7 +100,37 @@ export async function getTenantSlug(host: string) { } }); - console.log('tenant', tenant, host); + console.log('tenant', tenant?.config.slug, host); return tenant?.config.slug ?? DEFAULT_TENANT; } + +/** + * Returns tenant slug and supported languages. Can be modified to return a brief set of info in the future. + */ +export async function getTenantConciseInfo(host: string) { + const tenants = await getTenantConfigList(); + + const tenant = + tenants?.find((tenant) => { + if (tenant.config.customDomain) { + const urlObj = new URL(tenant.config.customDomain); + return urlObj.host === host; + } else { + const urlObj = new URL(tenant.config.appDomain); + return urlObj.host === host; + } + }) || tenants?.find((tenant) => tenant.config.slug === DEFAULT_TENANT); + + console.log(`tenantConciseInfo for ${host}:`, { + slug: tenant?.config.slug, + supportedLanguages: tenant?.config.languages, + customDomain: tenant?.config.customDomain, + appDomain: tenant?.config.appDomain, + }); + + return { + slug: tenant?.config.slug ?? DEFAULT_TENANT, + supportedLanguages: Object.values(tenant?.config.languages ?? { 0: 'en' }), + }; +} From f24ee4dcf2566f6059e2838016dfdb50f06e39bf Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Tue, 2 Apr 2024 19:02:12 +0530 Subject: [PATCH 60/70] docs: add console logs to identify points of failure in middleware --- middleware.ts | 10 ++++++++++ src/utils/multiTenancy/helpers.ts | 1 + 2 files changed, 11 insertions(+) diff --git a/middleware.ts b/middleware.ts index b1a079f45e..e7e4c317d4 100644 --- a/middleware.ts +++ b/middleware.ts @@ -70,11 +70,14 @@ export const config = { }; export default async function middleware(req: NextRequest) { + console.log('Starting middleware...'); + const start = Date.now(); const url = req.nextUrl; const pathname = url.pathname; const host = req.headers.get('host') as string; const { slug, supportedLanguages } = await getTenantConciseInfo(host); + console.log('Fetched tenant concise info'); // Filters i18nConfig.locales to only include tenant supported languages const commonSupportedLocales = supportedLanguages?.filter((lang) => i18nConfig.locales.includes(lang)) ?? @@ -84,6 +87,8 @@ export default async function middleware(req: NextRequest) { (locale) => !pathname.startsWith(`/${locale}/`) && pathname !== `/${locale}` ); + console.log('isLocaleMissing', isLocaleMissing); + if (isLocaleMissing) { const locale = getLocale(req, commonSupportedLocales); const cleanPathname = removeLocaleFromUrl(pathname); @@ -94,6 +99,7 @@ export default async function middleware(req: NextRequest) { }${cleanPathname}${searchParams}`, req.url ); + console.log('Populated locale, redirecting to:', newUrl); return NextResponse.redirect(newUrl); } @@ -108,6 +114,8 @@ export default async function middleware(req: NextRequest) { const res = NextResponse.rewrite(url); + console.log('Rewritten URL:', url.pathname); + // store NEXT_LOCALE cookie if available const localeFromPath = pathname.split('/')[1]; const localeCookieValue = req.cookies.get('NEXT_LOCALE')?.value; @@ -121,7 +129,9 @@ export default async function middleware(req: NextRequest) { sameSite: 'lax', secure: process.env.NODE_ENV !== 'development', }); + console.log('Set NEXT_LOCALE cookie:', localeFromPath); } + console.log('Running time:', Date.now() - start, 'ms'); return res; } diff --git a/src/utils/multiTenancy/helpers.ts b/src/utils/multiTenancy/helpers.ts index 276f2061fc..02fad05079 100644 --- a/src/utils/multiTenancy/helpers.ts +++ b/src/utils/multiTenancy/helpers.ts @@ -110,6 +110,7 @@ export async function getTenantSlug(host: string) { */ export async function getTenantConciseInfo(host: string) { const tenants = await getTenantConfigList(); + console.log('Fetched tenants from API'); const tenant = tenants?.find((tenant) => { From 9395ee9e125fd7b3917c4557aa16069bf12ccad5 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 8 Apr 2024 16:14:05 +0530 Subject: [PATCH 61/70] fix: resolves locale mismatch while fetching projects --- src/utils/apiRequests/api.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/apiRequests/api.ts b/src/utils/apiRequests/api.ts index 9a88c101ca..13c9b04be6 100644 --- a/src/utils/apiRequests/api.ts +++ b/src/utils/apiRequests/api.ts @@ -42,7 +42,7 @@ export function getRequest( version?: string ) { const lang = localStorage.getItem('language') || 'en'; - const query = { ...queryParams, locale: lang }; + const query = { ...queryParams }; const queryString = getQueryString(query); const queryStringSuffix = queryString ? '?' + queryString : ''; const fullUrl = isAbsoluteUrl(url) @@ -57,7 +57,7 @@ export function getRequest( headers: { 'tenant-key': `${tenant}`, 'X-SESSION-ID': await getsessionId(), - 'x-locale': lang, + 'x-locale': query.locale || lang, 'x-accept-versions': version ? version : '1.0.3', }, }); From cd5d55c7be3fe5e36b72fe0ca19dbc27cefe3707 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 15 Apr 2024 12:12:22 +0530 Subject: [PATCH 62/70] fix: replaces a.plant-for-the-planet links again --- src/features/common/Layout/Footer/index.tsx | 12 ++++++------ src/features/common/Layout/Navbar/index.tsx | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/features/common/Layout/Footer/index.tsx b/src/features/common/Layout/Footer/index.tsx index cc150b98cd..fd4cc22bfc 100644 --- a/src/features/common/Layout/Footer/index.tsx +++ b/src/features/common/Layout/Footer/index.tsx @@ -48,23 +48,23 @@ export default function Footer(): ReactElement | null { }, downloads: { title: t('downloads'), - link: `https://a.plant-for-the-planet.org/${locale}/download`, + link: `https://www.plant-for-the-planet.org/${locale}/download`, }, annualReports: { title: t('annualReports'), - link: `https://a.plant-for-the-planet.org/annual-reports`, + link: `https://www.plant-for-the-planet.org/annual-reports`, }, team: { title: t('team'), - link: `https://a.plant-for-the-planet.org/team`, + link: `https://www.plant-for-the-planet.org/team`, }, jobs: { title: t('jobs'), - link: `https://a.plant-for-the-planet.org/${locale}/careers`, + link: `https://www.plant-for-the-planet.org/${locale}/careers`, }, supportUs: { title: t('supportUs'), - link: `https://a.plant-for-the-planet.org/${locale}/donation`, + link: `https://www.plant-for-the-planet.org/${locale}/donation`, }, blogs: { title: t('blogs'), @@ -72,7 +72,7 @@ export default function Footer(): ReactElement | null { }, faqs: { title: t('faqs'), - link: `https://a.plant-for-the-planet.org/${locale}/faq`, + link: `https://www.plant-for-the-planet.org/${locale}/faq`, }, }; diff --git a/src/features/common/Layout/Navbar/index.tsx b/src/features/common/Layout/Navbar/index.tsx index 94050df9ca..3ac6ea126f 100644 --- a/src/features/common/Layout/Navbar/index.tsx +++ b/src/features/common/Layout/Navbar/index.tsx @@ -258,7 +258,7 @@ export default function NavbarComponent() { Date: Mon, 15 Apr 2024 12:26:52 +0530 Subject: [PATCH 63/70] chore: updates package lock to fix build errors --- package-lock.json | 4360 ++++++++++++++++++++++++++++----------------- 1 file changed, 2679 insertions(+), 1681 deletions(-) diff --git a/package-lock.json b/package-lock.json index 345d49bde1..5abd5a689c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -169,13 +169,13 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -220,106 +220,42 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", - "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", + "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.9", - "@babel/parser": "^7.23.9", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/helpers": "^7.24.4", + "@babel/parser": "^7.24.4", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -341,14 +277,14 @@ "dev": true }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", "dev": true, "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -396,9 +332,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", - "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz", + "integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -406,7 +342,7 @@ "@babel/helper-function-name": "^7.23.0", "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -436,9 +372,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", + "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -498,11 +434,11 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -540,9 +476,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", "dev": true, "engines": { "node": ">=6.9.0" @@ -566,13 +502,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -619,9 +555,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "engines": { "node": ">=6.9.0" } @@ -658,27 +594,28 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", - "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", + "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", "dev": true, "dependencies": { - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -749,9 +686,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", - "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -760,13 +697,29 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz", + "integrity": "sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", - "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -776,14 +729,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", - "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" + "@babel/plugin-transform-optional-chaining": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -793,13 +746,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", - "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -896,12 +849,12 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz", - "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz", + "integrity": "sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -911,12 +864,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", - "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -926,12 +879,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", - "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -965,12 +918,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1082,12 +1035,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", + "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1113,12 +1066,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", - "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1128,13 +1081,13 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", - "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", + "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-remap-async-to-generator": "^7.22.20", "@babel/plugin-syntax-async-generators": "^7.8.4" }, @@ -1146,13 +1099,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", + "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-module-imports": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { @@ -1163,12 +1116,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", - "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1178,12 +1131,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", - "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz", + "integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1193,13 +1146,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", - "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1209,13 +1162,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", - "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1226,17 +1179,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", - "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", + "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -1248,13 +1201,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", - "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/template": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1264,12 +1217,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", - "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", + "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1279,13 +1232,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", - "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1295,12 +1248,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", - "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1310,12 +1263,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", - "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1326,13 +1279,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", - "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", "dev": true, "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1342,12 +1295,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", - "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1358,13 +1311,13 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz", - "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.1.tgz", + "integrity": "sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-flow": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1374,12 +1327,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", - "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { @@ -1390,14 +1343,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", - "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1407,12 +1360,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", - "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1423,12 +1376,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", - "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1438,12 +1391,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", - "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1454,12 +1407,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", - "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1469,13 +1422,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", - "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1485,13 +1438,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-simple-access": "^7.22.5" }, "engines": { @@ -1502,14 +1455,14 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", - "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { @@ -1520,13 +1473,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", - "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1552,12 +1505,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", - "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1567,12 +1520,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", - "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1583,12 +1536,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", - "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1599,16 +1552,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", - "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", + "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" + "@babel/plugin-transform-parameters": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1618,13 +1570,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", - "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1634,12 +1586,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", - "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1650,12 +1602,12 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", - "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", + "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -1667,12 +1619,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", - "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", + "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1682,13 +1634,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", - "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1698,14 +1650,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", - "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", + "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1716,12 +1668,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", - "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1731,12 +1683,12 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", - "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz", + "integrity": "sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1780,13 +1732,13 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", - "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz", + "integrity": "sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1796,12 +1748,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", - "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1812,12 +1764,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", - "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1827,16 +1779,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.9.tgz", - "integrity": "sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz", + "integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-plugin-utils": "^7.24.0", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, "engines": { @@ -1847,12 +1799,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", - "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1862,12 +1814,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", - "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { @@ -1878,12 +1830,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", - "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1893,12 +1845,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", - "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1908,12 +1860,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", - "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", + "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1923,15 +1875,15 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", - "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz", + "integrity": "sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.23.3" + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-typescript": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1941,12 +1893,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", - "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1956,13 +1908,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", - "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1972,13 +1924,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", - "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1988,13 +1940,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", - "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -2004,26 +1956,27 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz", - "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz", + "integrity": "sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.23.5", + "@babel/compat-data": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.4", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-assertions": "^7.24.1", + "@babel/plugin-syntax-import-attributes": "^7.24.1", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -2035,58 +1988,58 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-arrow-functions": "^7.24.1", + "@babel/plugin-transform-async-generator-functions": "^7.24.3", + "@babel/plugin-transform-async-to-generator": "^7.24.1", + "@babel/plugin-transform-block-scoped-functions": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.4", + "@babel/plugin-transform-class-properties": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.4", + "@babel/plugin-transform-classes": "^7.24.1", + "@babel/plugin-transform-computed-properties": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.1", + "@babel/plugin-transform-dotall-regex": "^7.24.1", + "@babel/plugin-transform-duplicate-keys": "^7.24.1", + "@babel/plugin-transform-dynamic-import": "^7.24.1", + "@babel/plugin-transform-exponentiation-operator": "^7.24.1", + "@babel/plugin-transform-export-namespace-from": "^7.24.1", + "@babel/plugin-transform-for-of": "^7.24.1", + "@babel/plugin-transform-function-name": "^7.24.1", + "@babel/plugin-transform-json-strings": "^7.24.1", + "@babel/plugin-transform-literals": "^7.24.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", + "@babel/plugin-transform-member-expression-literals": "^7.24.1", + "@babel/plugin-transform-modules-amd": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-modules-systemjs": "^7.24.1", + "@babel/plugin-transform-modules-umd": "^7.24.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.23.4", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/plugin-transform-new-target": "^7.24.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", + "@babel/plugin-transform-numeric-separator": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.1", + "@babel/plugin-transform-object-super": "^7.24.1", + "@babel/plugin-transform-optional-catch-binding": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.1", + "@babel/plugin-transform-parameters": "^7.24.1", + "@babel/plugin-transform-private-methods": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.1", + "@babel/plugin-transform-property-literals": "^7.24.1", + "@babel/plugin-transform-regenerator": "^7.24.1", + "@babel/plugin-transform-reserved-words": "^7.24.1", + "@babel/plugin-transform-shorthand-properties": "^7.24.1", + "@babel/plugin-transform-spread": "^7.24.1", + "@babel/plugin-transform-sticky-regex": "^7.24.1", + "@babel/plugin-transform-template-literals": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.1", + "@babel/plugin-transform-unicode-escapes": "^7.24.1", + "@babel/plugin-transform-unicode-property-regex": "^7.24.1", + "@babel/plugin-transform-unicode-regex": "^7.24.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -2098,14 +2051,14 @@ } }, "node_modules/@babel/preset-flow": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.23.3.tgz", - "integrity": "sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.1.tgz", + "integrity": "sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-flow-strip-types": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-transform-flow-strip-types": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -2129,17 +2082,17 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", - "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.1.tgz", + "integrity": "sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-react-display-name": "^7.23.3", - "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-transform-react-display-name": "^7.24.1", + "@babel/plugin-transform-react-jsx": "^7.23.4", "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.23.3" + "@babel/plugin-transform-react-pure-annotations": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -2149,16 +2102,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", - "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz", + "integrity": "sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-typescript": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-syntax-jsx": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-typescript": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -2330,9 +2283,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", - "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", + "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2341,33 +2294,33 @@ } }, "node_modules/@babel/template": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", - "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", - "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2376,9 +2329,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -2398,7 +2351,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, "optional": true, "engines": { "node": ">=0.1.90" @@ -2739,9 +2691,9 @@ "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", "dependencies": { "@emotion/memoize": "^0.8.1" } @@ -2752,9 +2704,9 @@ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" }, "node_modules/@emotion/react": { - "version": "11.11.3", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.3.tgz", - "integrity": "sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==", + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz", + "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", @@ -2775,9 +2727,9 @@ } }, "node_modules/@emotion/serialize": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz", - "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.4.tgz", + "integrity": "sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==", "dependencies": { "@emotion/hash": "^0.9.1", "@emotion/memoize": "^0.8.1", @@ -2811,14 +2763,14 @@ "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" }, "node_modules/@emotion/styled": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", - "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "version": "11.11.5", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.5.tgz", + "integrity": "sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/serialize": "^1.1.2", + "@emotion/is-prop-valid": "^1.2.2", + "@emotion/serialize": "^1.1.4", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", "@emotion/utils": "^1.2.1" }, @@ -2855,43 +2807,379 @@ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, - "node_modules/@esbuild/darwin-arm64": { + "node_modules/@esbuild/android-arm": { "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", "cpu": [ - "arm64" + "arm" ], "dev": true, "optional": true, "os": [ - "darwin" + "android" ], "engines": { "node": ">=12" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=12" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, - "engines": { + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, @@ -3029,11 +3317,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@formatjs/ecma402-abstract/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@formatjs/fast-memoize": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz", @@ -3042,11 +3325,6 @@ "tslib": "^2.1.0" } }, - "node_modules/@formatjs/fast-memoize/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@formatjs/icu-messageformat-parser": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz", @@ -3074,11 +3352,6 @@ "tslib": "^2.1.0" } }, - "node_modules/@formatjs/icu-messageformat-parser/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@formatjs/icu-skeleton-parser": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz", @@ -3105,11 +3378,6 @@ "tslib": "^2.1.0" } }, - "node_modules/@formatjs/icu-skeleton-parser/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@formatjs/intl-localematcher": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", @@ -3118,11 +3386,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@formatjs/intl-localematcher/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@hookform/devtools": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@hookform/devtools/-/devtools-4.3.1.tgz", @@ -3171,9 +3434,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "node_modules/@ioredis/commands": { @@ -3185,7 +3448,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -3202,7 +3464,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -3214,7 +3475,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -3231,7 +3491,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -3381,14 +3640,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", - "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -3404,22 +3663,22 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -3429,9 +3688,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz", - "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -3778,14 +4037,14 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-beta.37", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.37.tgz", - "integrity": "sha512-/o3anbb+DeCng8jNsd3704XtmmLDZju1Fo8R2o7ugrVtPQ/QpcqddwKNzKPZwa0J5T8YNW3ZVuHyQgbTnQLisQ==", + "version": "5.0.0-beta.40", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz", + "integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==", "dependencies": { "@babel/runtime": "^7.23.9", "@floating-ui/react-dom": "^2.0.8", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.11", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", "@popperjs/core": "^2.11.8", "clsx": "^2.1.0", "prop-types": "^15.8.1" @@ -3809,18 +4068,18 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.11.tgz", - "integrity": "sha512-JVrJ9Jo4gyU707ujnRzmE8ABBWpXd6FwL9GYULmwZRtfPg89ggXs/S3MStQkpJ1JRWfdLL6S5syXmgQGq5EDAw==", + "version": "5.15.15", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.15.tgz", + "integrity": "sha512-aXnw29OWQ6I5A47iuWEI6qSSUfH6G/aCsW9KmW3LiFqr7uXZBK4Ks+z8G+qeIub8k0T5CMqlT2q0L+ZJTMrqpg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" } }, "node_modules/@mui/icons-material": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.11.tgz", - "integrity": "sha512-R5ZoQqnKpd+5Ew7mBygTFLxgYsQHPhgR3TDXSgIHYIjGzYuyPLmGLSdcPUoMdi6kxiYqHlpPj4NJxlbaFD0UHA==", + "version": "5.15.15", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.15.tgz", + "integrity": "sha512-kkeU/pe+hABcYDH6Uqy8RmIsr2S/y5bP2rp+Gat4CcRjCcVne6KudS1NrZQhUCRysrTDCAhcbcf9gt+/+pGO2g==", "dependencies": { "@babel/runtime": "^7.23.9" }, @@ -3843,15 +4102,15 @@ } }, "node_modules/@mui/lab": { - "version": "5.0.0-alpha.166", - "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.166.tgz", - "integrity": "sha512-a+0yorrgxLIgfKhShVKQk0/5CnB4KBhMQ64SvEB+CsvKAKKJzjIU43m2nMqdBbWzfnEuj6wR9vQ9kambdn3ZKA==", + "version": "5.0.0-alpha.170", + "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.170.tgz", + "integrity": "sha512-0bDVECGmrNjd3+bLdcLiwYZ0O4HP5j5WSQm5DV6iA/Z9kr8O6AnvZ1bv9ImQbbX7Gj3pX4o43EKwCutj3EQxQg==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/base": "5.0.0-beta.37", - "@mui/system": "^5.15.11", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.11", + "@mui/base": "5.0.0-beta.40", + "@mui/system": "^5.15.15", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", "clsx": "^2.1.0", "prop-types": "^15.8.1" }, @@ -3883,16 +4142,16 @@ } }, "node_modules/@mui/material": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.11.tgz", - "integrity": "sha512-FA3eEuEZaDaxgN3CgfXezMWbCZ4VCeU/sv0F0/PK5n42qIgsPVD6q+j71qS7/62sp6wRFMHtDMpXRlN+tT/7NA==", + "version": "5.15.15", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.15.tgz", + "integrity": "sha512-3zvWayJ+E1kzoIsvwyEvkTUKVKt1AjchFFns+JtluHCuvxgKcLSRJTADw37k0doaRtVAsyh8bz9Afqzv+KYrIA==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/base": "5.0.0-beta.37", - "@mui/core-downloads-tracker": "^5.15.11", - "@mui/system": "^5.15.11", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.11", + "@mui/base": "5.0.0-beta.40", + "@mui/core-downloads-tracker": "^5.15.15", + "@mui/system": "^5.15.15", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", "@types/react-transition-group": "^4.4.10", "clsx": "^2.1.0", "csstype": "^3.1.3", @@ -3927,12 +4186,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.11.tgz", - "integrity": "sha512-jY/696SnSxSzO1u86Thym7ky5T9CgfidU3NFJjguldqK4f3Z5S97amZ6nffg8gTD0HBjY9scB+4ekqDEUmxZOA==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.14.tgz", + "integrity": "sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.15.11", + "@mui/utils": "^5.15.14", "prop-types": "^15.8.1" }, "engines": { @@ -3953,9 +4212,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.11.tgz", - "integrity": "sha512-So21AhAngqo07ces4S/JpX5UaMU2RHXpEA6hNzI6IQjd/1usMPxpgK8wkGgTe3JKmC2KDmH8cvoycq5H3Ii7/w==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.14.tgz", + "integrity": "sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==", "dependencies": { "@babel/runtime": "^7.23.9", "@emotion/cache": "^11.11.0", @@ -3984,15 +4243,15 @@ } }, "node_modules/@mui/system": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.11.tgz", - "integrity": "sha512-9j35suLFq+MgJo5ktVSHPbkjDLRMBCV17NMBdEQurh6oWyGnLM4uhU4QGZZQ75o0vuhjJghOCA1jkO3+79wKsA==", + "version": "5.15.15", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.15.tgz", + "integrity": "sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.15.11", - "@mui/styled-engine": "^5.15.11", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.11", + "@mui/private-theming": "^5.15.14", + "@mui/styled-engine": "^5.15.14", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", "clsx": "^2.1.0", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -4023,9 +4282,9 @@ } }, "node_modules/@mui/types": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz", - "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==", + "version": "7.2.14", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz", + "integrity": "sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==", "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0" }, @@ -4036,9 +4295,9 @@ } }, "node_modules/@mui/utils": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.11.tgz", - "integrity": "sha512-D6bwqprUa9Stf8ft0dcMqWyWDKEo7D+6pB1k8WajbqlYIRA8J8Kw9Ra7PSZKKePGBGWO+/xxrX1U8HpG/aXQCw==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.14.tgz", + "integrity": "sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA==", "dependencies": { "@babel/runtime": "^7.23.9", "@types/prop-types": "^15.7.11", @@ -4160,92 +4419,377 @@ "tar-fs": "^2.1.1" } }, - "node_modules/@ndelangen/get-tarball/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "node_modules/@ndelangen/get-tarball/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/@ndelangen/get-tarball/node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/@ndelangen/get-tarball/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@netlify/blobs": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-2.2.0.tgz", + "integrity": "sha512-j2C0+IvWj9CLNGPoiA7ETquMFDExZTrv4CarjfE6Au0eY3zlinnnTVae7DE+VQFK+U0CDM/O0VvelNy1QbsdwQ==", + "engines": { + "node": "^14.16.0 || >=16.0.0" + } + }, + "node_modules/@netlify/esbuild": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild/-/esbuild-0.14.39.tgz", + "integrity": "sha512-C3xpwdT2xw6SnSb+hLQoxjtikAKiz6BjQjzlIaysHDpGbmIcmUHZ/X+dyLtCqAvf15WNK5GSBZYOlpgcOE0WZA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@netlify/esbuild-android-64": "0.14.39", + "@netlify/esbuild-android-arm64": "0.14.39", + "@netlify/esbuild-darwin-64": "0.14.39", + "@netlify/esbuild-darwin-arm64": "0.14.39", + "@netlify/esbuild-freebsd-64": "0.14.39", + "@netlify/esbuild-freebsd-arm64": "0.14.39", + "@netlify/esbuild-linux-32": "0.14.39", + "@netlify/esbuild-linux-64": "0.14.39", + "@netlify/esbuild-linux-arm": "0.14.39", + "@netlify/esbuild-linux-arm64": "0.14.39", + "@netlify/esbuild-linux-mips64le": "0.14.39", + "@netlify/esbuild-linux-ppc64le": "0.14.39", + "@netlify/esbuild-linux-riscv64": "0.14.39", + "@netlify/esbuild-linux-s390x": "0.14.39", + "@netlify/esbuild-netbsd-64": "0.14.39", + "@netlify/esbuild-openbsd-64": "0.14.39", + "@netlify/esbuild-sunos-64": "0.14.39", + "@netlify/esbuild-windows-32": "0.14.39", + "@netlify/esbuild-windows-64": "0.14.39", + "@netlify/esbuild-windows-arm64": "0.14.39" + } + }, + "node_modules/@netlify/esbuild-android-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz", + "integrity": "sha512-azq+lsvjRsKLap8ubIwSJXGyknUACqYu5h98Fvyoh40Qk4QXIVKl16JIJ4s+B7jy2k9qblEc5c4nxdDA3aGbVA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@netlify/esbuild-android-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz", + "integrity": "sha512-WhIP7ePq4qMC1sxoaeB9SsJqSW6uzW7XDj/IuWl1l9r94nwxywU1sYdVLaF2mZr15njviazYjVr8x1d+ipwL3w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@netlify/esbuild-darwin-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", + "integrity": "sha512-eF4GvLYiDxtcyjFT55+h+8c8A2HltjeMezCqkt3AQSgOdu1nhlvwbBhIdg2dyM6gKEaEm5hBtTbicEDSwsLodA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@netlify/esbuild-darwin-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", + "integrity": "sha512-b7rtnX/VtYwNbUCxs3eulrCWJ+u2YvqDcXiIV1ka+od+N0fTx+4RrVkVp1lha9L0wEJYK9J7UWZOMLMyd1ynRg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@netlify/esbuild-freebsd-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz", + "integrity": "sha512-XtusxDJt2hUKUdggbTFolMx0kJL2zEa4STI7YwpB+ukEWoW5rODZjiLZbqqYLcjDH8k4YwHaMxs103L8eButEQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@netlify/esbuild-freebsd-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz", + "integrity": "sha512-A9XZKai+k6kfndCtN6Dh2usT28V0+OGxzFdZsANONPQiEUTrGZCgwcHWiVlVn7SeAwPR1tKZreTnvrfj8cj7hA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@netlify/esbuild-linux-32": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz", + "integrity": "sha512-ZQnqk/82YRvINY+aF+LlGfRZ19c5mH0jaxsO046GpIOPx6PcXHG8JJ2lg+vLJVe4zFPohxzabcYpwFuT4cg/GA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@netlify/esbuild-linux-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz", + "integrity": "sha512-IQtswVw7GAKNX/3yV390wSfSXvMWy0d5cw8csAffwBk9gupftY2lzepK4Cn6uD/aqLt3Iku33FbHop/2nPGfQA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@netlify/esbuild-linux-arm": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz", + "integrity": "sha512-QdOzQniOed0Bz1cTC9TMMwvtAqKayYv66H4edJlbvElC81yJZF/c9XhmYWJ6P5g4nkChZubQ5RcQwTLmrFGexg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@netlify/esbuild-linux-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz", + "integrity": "sha512-4Jie4QV6pWWuGN7TAshNMGbdTA9+VbRkv3rPIxhgK5gBfmsAV1yRKsumE4Y77J0AZNRiOriyoec4zc1qkmI3zg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@netlify/esbuild-linux-mips64le": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz", + "integrity": "sha512-Htozxr95tw4tSd86YNbCLs1eoYQzNu/cHpzFIkuJoztZueUhl8XpRvBdob7n3kEjW1gitLWAIn8XUwSt+aJ1Tg==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@netlify/esbuild-linux-ppc64le": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz", + "integrity": "sha512-tFy0ufWIdjeuk1rPHee00TZlhr9OSF00Ufb4ROFyt2ArKuMSkWRJuDgx6MtZcAnCIN4cybo/xWl3MKTM+scnww==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@netlify/esbuild-linux-riscv64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz", + "integrity": "sha512-ZzfKvwIxL7wQnYbVFpyNW0wotnLoKageUEM57RbjekesJoNQnqUR6Usm+LDZoB8iRsI58VX1IxnstP0cX8vOHw==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@netlify/esbuild-linux-s390x": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz", + "integrity": "sha512-yjC0mFwnuMRoh0WcF0h71MF71ytZBFEQQTRdgiGT0+gbC4UApBqnTkJdLx32RscBKi9skbMChiJ748hDJou6FA==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@netlify/esbuild-netbsd-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz", + "integrity": "sha512-mIq4znOoz3YfTVdv3sIWfR4Zx5JgMnT4srlhC5KYVHibhxvyDdin5txldYXmR4Zv4dZd6DSuWFsn441aUegHeA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@ndelangen/get-tarball/node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "node_modules/@netlify/esbuild-openbsd-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz", + "integrity": "sha512-+t6QdzJCngH19hV7ClpFAeFDI2ko/HNcFbiNwaXTMVLB3hWi1sJtn+fzZck5HfzN4qsajAVqZq4nwX69SSt25A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@ndelangen/get-tarball/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, + "node_modules/@netlify/esbuild-sunos-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz", + "integrity": "sha512-HLfXG6i2p3wyyyWHeeP4ShGDJ1zRMnf9YLJLe2ezv2KqvcKw/Un/m/FBuDW1p13oSUO7ShISMzgc1dw1GGBEOQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/@netlify/blobs": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-2.2.0.tgz", - "integrity": "sha512-j2C0+IvWj9CLNGPoiA7ETquMFDExZTrv4CarjfE6Au0eY3zlinnnTVae7DE+VQFK+U0CDM/O0VvelNy1QbsdwQ==", + "node_modules/@netlify/esbuild-windows-32": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz", + "integrity": "sha512-ZpSQcKbVSCU3ln7mHpsL/5dWsUqCNdTnC5YAArnaOwdrlIunrsbo5j4MOZRRcGExb2uvTc/rb+D3mlGb8j1rkA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^14.16.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/@netlify/esbuild": { + "node_modules/@netlify/esbuild-windows-64": { "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild/-/esbuild-0.14.39.tgz", - "integrity": "sha512-C3xpwdT2xw6SnSb+hLQoxjtikAKiz6BjQjzlIaysHDpGbmIcmUHZ/X+dyLtCqAvf15WNK5GSBZYOlpgcOE0WZA==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, + "resolved": "https://registry.npmjs.org/@netlify/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz", + "integrity": "sha512-I3gCdO8+6IDhT4Y1ZmV4o2Gg0oELv7N4kCcE4kqclz10fWHNjf19HQNHyBJe0AWnFV5ZfT154VVD31dqgwpgFw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { "node": ">=12" - }, - "optionalDependencies": { - "@netlify/esbuild-android-64": "0.14.39", - "@netlify/esbuild-android-arm64": "0.14.39", - "@netlify/esbuild-darwin-64": "0.14.39", - "@netlify/esbuild-darwin-arm64": "0.14.39", - "@netlify/esbuild-freebsd-64": "0.14.39", - "@netlify/esbuild-freebsd-arm64": "0.14.39", - "@netlify/esbuild-linux-32": "0.14.39", - "@netlify/esbuild-linux-64": "0.14.39", - "@netlify/esbuild-linux-arm": "0.14.39", - "@netlify/esbuild-linux-arm64": "0.14.39", - "@netlify/esbuild-linux-mips64le": "0.14.39", - "@netlify/esbuild-linux-ppc64le": "0.14.39", - "@netlify/esbuild-linux-riscv64": "0.14.39", - "@netlify/esbuild-linux-s390x": "0.14.39", - "@netlify/esbuild-netbsd-64": "0.14.39", - "@netlify/esbuild-openbsd-64": "0.14.39", - "@netlify/esbuild-sunos-64": "0.14.39", - "@netlify/esbuild-windows-32": "0.14.39", - "@netlify/esbuild-windows-64": "0.14.39", - "@netlify/esbuild-windows-arm64": "0.14.39" } }, - "node_modules/@netlify/esbuild-darwin-arm64": { + "node_modules/@netlify/esbuild-windows-arm64": { "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", - "integrity": "sha512-b7rtnX/VtYwNbUCxs3eulrCWJ+u2YvqDcXiIV1ka+od+N0fTx+4RrVkVp1lha9L0wEJYK9J7UWZOMLMyd1ynRg==", + "resolved": "https://registry.npmjs.org/@netlify/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz", + "integrity": "sha512-WX52W8U1lsfWcz6NWoSpDs57lgiiMHN23seq8G2bvxzGS/tvYD3dxVLLW5UPoKSnFDyVQT7b6Zkt6AkBten1yQ==", "cpu": [ "arm64" ], "optional": true, "os": [ - "darwin" + "win32" ], "engines": { "node": ">=12" @@ -4596,48 +5140,200 @@ "node": ">= 8" } }, - "node_modules/@parcel/watcher": { + "node_modules/@parcel/watcher": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz", + "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==", + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.4.1", + "@parcel/watcher-darwin-arm64": "2.4.1", + "@parcel/watcher-darwin-x64": "2.4.1", + "@parcel/watcher-freebsd-x64": "2.4.1", + "@parcel/watcher-linux-arm-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-musl": "2.4.1", + "@parcel/watcher-linux-x64-glibc": "2.4.1", + "@parcel/watcher-linux-x64-musl": "2.4.1", + "@parcel/watcher-win32-arm64": "2.4.1", + "@parcel/watcher-win32-ia32": "2.4.1", + "@parcel/watcher-win32-x64": "2.4.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz", + "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz", + "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz", + "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz", + "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz", + "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz", + "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz", + "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz", - "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==", - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz", + "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">= 10.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.4.1", - "@parcel/watcher-darwin-arm64": "2.4.1", - "@parcel/watcher-darwin-x64": "2.4.1", - "@parcel/watcher-freebsd-x64": "2.4.1", - "@parcel/watcher-linux-arm-glibc": "2.4.1", - "@parcel/watcher-linux-arm64-glibc": "2.4.1", - "@parcel/watcher-linux-arm64-musl": "2.4.1", - "@parcel/watcher-linux-x64-glibc": "2.4.1", - "@parcel/watcher-linux-x64-musl": "2.4.1", - "@parcel/watcher-win32-arm64": "2.4.1", - "@parcel/watcher-win32-ia32": "2.4.1", - "@parcel/watcher-win32-x64": "2.4.1" } }, - "node_modules/@parcel/watcher-darwin-arm64": { + "node_modules/@parcel/watcher-linux-x64-musl": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz", - "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz", + "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==", "cpu": [ - "arm64" + "x64" ], "optional": true, "os": [ - "darwin" + "linux" ], "engines": { "node": ">= 10.0.0" @@ -4672,11 +5368,67 @@ "inBundle": true, "license": "MIT" }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz", + "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz", + "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz", + "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "optional": true, "engines": { "node": ">=14" @@ -4764,9 +5516,9 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.24", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", - "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==" + "version": "1.0.0-next.25", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", + "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==" }, "node_modules/@popperjs/core": { "version": "2.11.8", @@ -5498,9 +6250,9 @@ } }, "node_modules/@rushstack/eslint-patch": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz", - "integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.2.tgz", + "integrity": "sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==", "dev": true }, "node_modules/@sentry/browser": { @@ -5517,6 +6269,11 @@ "node": ">=6" } }, + "node_modules/@sentry/browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/@sentry/cli": { "version": "1.77.3", "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-1.77.3.tgz", @@ -5563,6 +6320,11 @@ "node": ">=6" } }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/@sentry/hub": { "version": "6.19.7", "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.19.7.tgz", @@ -5576,6 +6338,11 @@ "node": ">=6" } }, + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/@sentry/integrations": { "version": "6.19.7", "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-6.19.7.tgz", @@ -5590,6 +6357,11 @@ "node": ">=6" } }, + "node_modules/@sentry/integrations/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/@sentry/minimal": { "version": "6.19.7", "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.19.7.tgz", @@ -5603,6 +6375,11 @@ "node": ">=6" } }, + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/@sentry/node": { "version": "6.19.7", "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.19.7.tgz", @@ -5621,6 +6398,11 @@ "node": ">=6" } }, + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/@sentry/types": { "version": "6.19.7", "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.7.tgz", @@ -5641,6 +6423,11 @@ "node": ">=6" } }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/@sentry/webpack-plugin": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/@sentry/webpack-plugin/-/webpack-plugin-1.21.0.tgz", @@ -6046,9 +6833,9 @@ } }, "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { - "version": "18.19.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.18.tgz", - "integrity": "sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==", + "version": "18.19.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", + "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -6538,9 +7325,9 @@ } }, "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "18.19.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.18.tgz", - "integrity": "sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==", + "version": "18.19.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", + "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -6627,9 +7414,9 @@ } }, "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "18.19.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.18.tgz", - "integrity": "sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==", + "version": "18.19.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", + "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -6700,18 +7487,18 @@ } }, "node_modules/@storybook/core-webpack/node_modules/@types/node": { - "version": "18.19.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.18.tgz", - "integrity": "sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==", + "version": "18.19.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", + "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@storybook/csf": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.2.tgz", - "integrity": "sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.4.tgz", + "integrity": "sha512-B9UI/lsQMjF+oEfZCI6YXNoeuBcGZoOP5x8yKbe2tIEmsMjSztFKkpPzi5nLCnBk/MBtl6QJeI3ksJnbsWPkOw==", "dev": true, "dependencies": { "type-fest": "^2.19.0" @@ -6914,9 +7701,9 @@ } }, "node_modules/@storybook/nextjs/node_modules/@types/node": { - "version": "18.19.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.18.tgz", - "integrity": "sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==", + "version": "18.19.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", + "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -7058,9 +7845,9 @@ } }, "node_modules/@storybook/preset-react-webpack/node_modules/@types/node": { - "version": "18.19.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.18.tgz", - "integrity": "sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==", + "version": "18.19.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", + "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -7214,12 +8001,6 @@ "webpack": ">= 4" } }, - "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/@storybook/react-dom-shim": { "version": "7.6.17", "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.17.tgz", @@ -7235,9 +8016,9 @@ } }, "node_modules/@storybook/react/node_modules/@types/node": { - "version": "18.19.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.18.tgz", - "integrity": "sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==", + "version": "18.19.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", + "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -7340,9 +8121,9 @@ } }, "node_modules/@swc/core": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.2.tgz", - "integrity": "sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg==", + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.14.tgz", + "integrity": "sha512-tHXg6OxboUsqa/L7DpsCcFnxhLkqN/ht5pCwav1HnvfthbiNIJypr86rNx4cUnQDJepETviSqBTIjxa7pSpGDQ==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -7357,16 +8138,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.4.2", - "@swc/core-darwin-x64": "1.4.2", - "@swc/core-linux-arm-gnueabihf": "1.4.2", - "@swc/core-linux-arm64-gnu": "1.4.2", - "@swc/core-linux-arm64-musl": "1.4.2", - "@swc/core-linux-x64-gnu": "1.4.2", - "@swc/core-linux-x64-musl": "1.4.2", - "@swc/core-win32-arm64-msvc": "1.4.2", - "@swc/core-win32-ia32-msvc": "1.4.2", - "@swc/core-win32-x64-msvc": "1.4.2" + "@swc/core-darwin-arm64": "1.4.14", + "@swc/core-darwin-x64": "1.4.14", + "@swc/core-linux-arm-gnueabihf": "1.4.14", + "@swc/core-linux-arm64-gnu": "1.4.14", + "@swc/core-linux-arm64-musl": "1.4.14", + "@swc/core-linux-x64-gnu": "1.4.14", + "@swc/core-linux-x64-musl": "1.4.14", + "@swc/core-win32-arm64-msvc": "1.4.14", + "@swc/core-win32-ia32-msvc": "1.4.14", + "@swc/core-win32-x64-msvc": "1.4.14" }, "peerDependencies": { "@swc/helpers": "^0.5.0" @@ -7378,9 +8159,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.2.tgz", - "integrity": "sha512-1uSdAn1MRK5C1m/TvLZ2RDvr0zLvochgrZ2xL+lRzugLlCTlSA+Q4TWtrZaOz+vnnFVliCpw7c7qu0JouhgQIw==", + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.14.tgz", + "integrity": "sha512-8iPfLhYNspBl836YYsfv6ErXwDUqJ7IMieddV3Ey/t/97JAEAdNDUdtTKDtbyP0j/Ebyqyn+fKcqwSq7rAof0g==", "cpu": [ "arm64" ], @@ -7393,6 +8174,150 @@ "node": ">=10" } }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.14.tgz", + "integrity": "sha512-9CqSj8uRZ92cnlgAlVaWMaJJBdxtNvCzJxaGj5KuIseeG6Q0l1g+qk8JcU7h9dAsH9saHTNwNFBVGKQo0W0ujg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.14.tgz", + "integrity": "sha512-mfd5JArPITTzMjcezH4DwMw+BdjBV1y25Khp8itEIpdih9ei+fvxOOrDYTN08b466NuE2dF2XuhKtRLA7fXArQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.14.tgz", + "integrity": "sha512-3Lqlhlmy8MVRS9xTShMaPAp0oyUt0KFhDs4ixJsjdxKecE0NJSV/MInuDmrkij1C8/RQ2wySRlV9np5jK86oWw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.14.tgz", + "integrity": "sha512-n0YoCa64TUcJrbcXIHIHDWQjdUPdaXeMHNEu7yyBtOpm01oMGTKP3frsUXIABLBmAVWtKvqit4/W1KVKn5gJzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.14.tgz", + "integrity": "sha512-CGmlwLWbfG1dB4jZBJnp2IWlK5xBMNLjN7AR5kKA3sEpionoccEnChOEvfux1UdVJQjLRKuHNV9yGyqGBTpxfQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.14.tgz", + "integrity": "sha512-xq4npk8YKYmNwmr8fbvF2KP3kUVdZYfXZMQnW425gP3/sn+yFQO8Nd0bGH40vOVQn41kEesSe0Z5O/JDor2TgQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.14.tgz", + "integrity": "sha512-imq0X+gU9uUe6FqzOQot5gpKoaC00aCUiN58NOzwp0QXEupn8CDuZpdBN93HiZswfLruu5jA1tsc15x6v9p0Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.14.tgz", + "integrity": "sha512-cH6QpXMw5D3t+lpx6SkErHrxN0yFzmQ0lgNAJxoDRiaAdDbqA6Col8UqUJwUS++Ul6aCWgNhCdiEYehPaoyDPA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.14.tgz", + "integrity": "sha512-FmZ4Tby4wW65K/36BKzmuu7mlq7cW5XOxzvufaSNVvQ5PN4OodAlqPjToe029oma4Av+ykJiif64scMttyNAzg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", @@ -7407,16 +8332,14 @@ "tslib": "^2.4.0" } }, - "node_modules/@swc/helpers/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/@swc/types": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", - "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", - "dev": true + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.6.tgz", + "integrity": "sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==", + "dev": true, + "dependencies": { + "@swc/counter": "^0.1.3" + } }, "node_modules/@tanstack/query-core": { "version": "4.36.1", @@ -7486,52 +8409,52 @@ } }, "node_modules/@trpc/client": { - "version": "10.45.1", - "resolved": "https://registry.npmjs.org/@trpc/client/-/client-10.45.1.tgz", - "integrity": "sha512-nVbAk1xpIiI64WgzXGgfxPOGgHoYvffn1IsjV1D/Ri7DL4BKuo2qtZ7UQ+OuHkzH2M8j4ikSVBDpk545fOdvpw==", + "version": "10.45.2", + "resolved": "https://registry.npmjs.org/@trpc/client/-/client-10.45.2.tgz", + "integrity": "sha512-ykALM5kYWTLn1zYuUOZ2cPWlVfrXhc18HzBDyRhoPYN0jey4iQHEFSEowfnhg1RvYnrAVjNBgHNeSAXjrDbGwg==", "funding": [ "https://trpc.io/sponsor" ], "peerDependencies": { - "@trpc/server": "10.45.1" + "@trpc/server": "10.45.2" } }, "node_modules/@trpc/next": { - "version": "10.45.1", - "resolved": "https://registry.npmjs.org/@trpc/next/-/next-10.45.1.tgz", - "integrity": "sha512-HSuQ0OcKUtt8mcQ4Mz4GQpy5PkNYJNvC9EEHkqTkEGa71BLEPKviyVWaE7biOlxjA0tM0aDOM21id+cRkEpfXA==", + "version": "10.45.2", + "resolved": "https://registry.npmjs.org/@trpc/next/-/next-10.45.2.tgz", + "integrity": "sha512-RSORmfC+/nXdmRY1pQ0AalsVgSzwNAFbZLYHiTvPM5QQ8wmMEHilseCYMXpu0se/TbPt9zVR6Ka2d7O6zxKkXg==", "funding": [ "https://trpc.io/sponsor" ], "peerDependencies": { "@tanstack/react-query": "^4.18.0", - "@trpc/client": "10.45.1", - "@trpc/react-query": "10.45.1", - "@trpc/server": "10.45.1", + "@trpc/client": "10.45.2", + "@trpc/react-query": "10.45.2", + "@trpc/server": "10.45.2", "next": "*", "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "node_modules/@trpc/react-query": { - "version": "10.45.1", - "resolved": "https://registry.npmjs.org/@trpc/react-query/-/react-query-10.45.1.tgz", - "integrity": "sha512-48OOMpwVjQFUQJqlp9/tW1lqESZg9YEqB5iVci7mYaDzZPEs/YUcV85XKvYzgeW+7K9oShX/JMVce8muON/6uQ==", + "version": "10.45.2", + "resolved": "https://registry.npmjs.org/@trpc/react-query/-/react-query-10.45.2.tgz", + "integrity": "sha512-BAqb9bGZIscroradlNx+Cc9522R+idY3BOSf5z0jHUtkxdMbjeGKxSSMxxu7JzoLqSIEC+LVzL3VvF8sdDWaZQ==", "funding": [ "https://trpc.io/sponsor" ], "peerDependencies": { "@tanstack/react-query": "^4.18.0", - "@trpc/client": "10.45.1", - "@trpc/server": "10.45.1", + "@trpc/client": "10.45.2", + "@trpc/server": "10.45.2", "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "node_modules/@trpc/server": { - "version": "10.45.1", - "resolved": "https://registry.npmjs.org/@trpc/server/-/server-10.45.1.tgz", - "integrity": "sha512-KOzBEVaHW9IxEedUP9E50y0tYxAuvlzyjn80Bpemw4rcNbT4WtJnhkFPUY+qDJl7Crt3B/oY2qMgSxVWi9toLg==", + "version": "10.45.2", + "resolved": "https://registry.npmjs.org/@trpc/server/-/server-10.45.2.tgz", + "integrity": "sha512-wOrSThNNE4HUnuhJG6PfDRp4L2009KDVxsd+2VYH8ro6o/7/jwYZ8Uu5j+VaW+mOmc8EHerHzGcdbGNQSAUPgg==", "funding": [ "https://trpc.io/sponsor" ] @@ -8966,9 +9889,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.56.3", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.3.tgz", - "integrity": "sha512-PvSf1wfv2wJpVIFUMSb+i4PvqNYkB9Rkp9ZDO3oaWzq4SKhsQk4mrMBr3ZH06I0hKrVGLBacmgl8JM4WVjb9dg==", + "version": "8.56.9", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", + "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", "dev": true, "dependencies": { "@types/estree": "*", @@ -9004,9 +9927,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.43", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", - "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", "dev": true, "dependencies": { "@types/node": "*", @@ -9110,9 +10033,9 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.202", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", - "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", + "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", "dev": true }, "node_modules/@types/mapbox-gl": { @@ -9125,9 +10048,9 @@ } }, "node_modules/@types/mdx": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.11.tgz", - "integrity": "sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", "dev": true }, "node_modules/@types/mime": { @@ -9143,9 +10066,9 @@ "dev": true }, "node_modules/@types/mysql": { - "version": "2.15.25", - "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.25.tgz", - "integrity": "sha512-pKjbzNu/xvD2xOx4psIfxu9CBg+GovLvQFk8NYTW3oT7Gf5QY65MvNgQNFvVb0nC3l9DCKGqBFYhujVrDqii4A==", + "version": "2.15.26", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz", + "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==", "optional": true, "dependencies": { "@types/node": "*" @@ -9198,9 +10121,9 @@ "dev": true }, "node_modules/@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/qrcode": { "version": "1.5.5", @@ -9211,9 +10134,9 @@ } }, "node_modules/@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "version": "6.9.14", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", + "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", "dev": true }, "node_modules/@types/range-parser": { @@ -9223,19 +10146,19 @@ "dev": true }, "node_modules/@types/react": { - "version": "16.14.57", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.57.tgz", - "integrity": "sha512-fuNq/GV1a6GgqSuVuC457vYeTbm4E1CUBQVZwSPxqYnRhIzSXCJ1gGqyv+PKhqLyfbKCga9dXHJDzv+4XE41fw==", + "version": "16.14.60", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.60.tgz", + "integrity": "sha512-wIFmnczGsTcgwCBeIYOuy2mdXEiKZ5znU/jNOnMZPQyCcIxauMGWlX0TNG4lZ7NxRKj7YUIZRneJQSSdB2jKgg==", "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", + "@types/scheduler": "^0.16", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.2.19", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz", - "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==", + "version": "18.2.25", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.25.tgz", + "integrity": "sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==", "dev": true, "dependencies": { "@types/react": "*" @@ -9311,14 +10234,14 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, "dependencies": { "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" + "@types/node": "*", + "@types/send": "*" } }, "node_modules/@types/sinonjs__fake-timers": { @@ -9714,9 +10637,9 @@ "integrity": "sha512-haGBC8noyA5BfjCRXRH+VIkHCDVW5iD5UX24P2nOdilwUxI4qWsattS/co8QBGq64XsNLRAMdM5pQUE3zxkF9Q==" }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -9736,9 +10659,9 @@ "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { @@ -9759,15 +10682,15 @@ "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -9795,28 +10718,28 @@ "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -9824,24 +10747,24 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -9850,12 +10773,12 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -9894,12 +10817,6 @@ "esbuild": ">=0.10.0" } }, - "node_modules/@yarnpkg/esbuild-plugin-pnp/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/@yarnpkg/fslib": { "version": "2.10.3", "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz", @@ -9913,6 +10830,12 @@ "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" } }, + "node_modules/@yarnpkg/fslib/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@yarnpkg/libzip": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz", @@ -9926,6 +10849,12 @@ "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" } }, + "node_modules/@yarnpkg/libzip/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@yr/monotone-cubic-spline": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", @@ -10066,7 +10995,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -10222,9 +11150,9 @@ } }, "node_modules/apexcharts": { - "version": "3.46.0", - "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.46.0.tgz", - "integrity": "sha512-ELAY6vj8JQD7QLktKasTzwm9Wt0qxqfQSo+3QWS7G7I774iK8HCkG1toGsqJH0mkK6PtYBtnSIe66uUcwoCw1w==", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.48.0.tgz", + "integrity": "sha512-Lhpj1Ij6lKlrUke8gf+P+SE6uGUn+Pe1TnCJ+zqrY0YMvbqM3LMb1lY+eybbTczUyk0RmMZomlTa2NgX2EUs4Q==", "dependencies": { "@yr/monotone-cubic-spline": "^1.0.3", "svg.draggable.js": "^2.2.2", @@ -10277,9 +11205,9 @@ } }, "node_modules/aria-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", - "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", "dev": true, "dependencies": { "tslib": "^2.0.0" @@ -10288,12 +11216,6 @@ "node": ">=10" } }, - "node_modules/aria-hidden/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/aria-query": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", @@ -10307,7 +11229,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -10325,15 +11246,16 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -10362,17 +11284,18 @@ "node": ">=8" } }, - "node_modules/array.prototype.filter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", - "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -10382,15 +11305,16 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", - "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", + "es-abstract": "^1.23.2", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" }, "engines": { @@ -10436,6 +11360,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, "node_modules/array.prototype.tosorted": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", @@ -10453,7 +11389,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -10481,15 +11416,14 @@ } }, "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "minimalistic-assert": "^1.0.0" } }, "node_modules/asn1.js/node_modules/bn.js": { @@ -10547,12 +11481,6 @@ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, - "node_modules/ast-types/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -10574,15 +11502,6 @@ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -10609,7 +11528,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -10645,12 +11563,12 @@ } }, "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dev": true, "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -11067,13 +11985,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", - "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", + "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", + "@babel/helper-define-polyfill-provider": "^0.6.1", "semver": "^6.3.1" }, "peerDependencies": { @@ -11081,25 +11999,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", - "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz", + "integrity": "sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" + "@babel/helper-define-polyfill-provider": "^0.6.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -11248,37 +12166,35 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/bare-events": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.0.tgz", - "integrity": "sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", + "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", "optional": true }, "node_modules/bare-fs": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.2.0.tgz", - "integrity": "sha512-+VhW202E9eTVGkX7p+TNXtZC4RTzj9JfJW7PtfIbZ7mIQ/QT9uOafQTx7lx2n9ERmWsXvLHF4hStAFn4gl2mQw==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.2.3.tgz", + "integrity": "sha512-amG72llr9pstfXOBOHve1WjiuKKAMnebcmMbPWDZ7BCevAoJLpugjuAPRsDINEyjT0a6tbaVx3DctkXIRbLuJw==", "optional": true, "dependencies": { "bare-events": "^2.0.0", - "bare-os": "^2.0.0", "bare-path": "^2.0.0", "streamx": "^2.13.0" } }, "node_modules/bare-os": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.2.0.tgz", - "integrity": "sha512-hD0rOPfYWOMpVirTACt4/nK8mC55La12K5fY1ij8HAdfQakD62M+H4o4tpfKzVGLgRDTuk3vjA4GqGXXCeFbag==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.2.1.tgz", + "integrity": "sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==", "optional": true }, "node_modules/bare-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.0.tgz", - "integrity": "sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.1.tgz", + "integrity": "sha512-OHM+iwRDRMDBsSW7kl3dO62JyHdBKO3B25FB9vNQBPcGHMo4+eA8Yj41Lfbk3pS/seDY+siNge0LdRTulAau/A==", "optional": true, "dependencies": { "bare-os": "^2.1.0" @@ -11351,11 +12267,14 @@ } }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bl": { @@ -11410,12 +12329,12 @@ "dev": true }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -11423,7 +12342,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -11481,7 +12400,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11567,25 +12485,68 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", - "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dev": true, "dependencies": { "bn.js": "^5.2.1", "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.4", + "elliptic": "^6.5.5", + "hash-base": "~3.0", "inherits": "^2.0.4", - "parse-asn1": "^5.1.6", - "readable-stream": "^3.6.2", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 4" + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" } }, + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "node_modules/browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", @@ -11750,12 +12711,6 @@ "tslib": "^2.0.3" } }, - "node_modules/camel-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -11765,9 +12720,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001589", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz", - "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==", + "version": "1.0.30001610", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001610.tgz", + "integrity": "sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA==", "funding": [ { "type": "opencollective", @@ -11861,7 +12816,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, "engines": { "node": ">=10" } @@ -11890,7 +12844,6 @@ "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, "funding": [ { "type": "github", @@ -11955,7 +12908,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, "engines": { "node": ">=6" } @@ -11985,10 +12937,9 @@ } }, "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.4.tgz", + "integrity": "sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==", "dependencies": { "string-width": "^4.2.0" }, @@ -12401,8 +13352,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/concat-stream": { "version": "2.0.0", @@ -12504,9 +13454,9 @@ } }, "node_modules/cookie-es": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.0.0.tgz", - "integrity": "sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.1.0.tgz", + "integrity": "sha512-L2rLOcK0wzWSfSDA33YR+PUHDG10a8px7rUHKWbGLP4YfbsMed2KFUw5fczvDPbT98DDe3LEzviswl810apTEw==" }, "node_modules/cookie-signature": { "version": "1.0.6", @@ -12528,9 +13478,9 @@ } }, "node_modules/core-js": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.0.tgz", - "integrity": "sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==", + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.1.tgz", + "integrity": "sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -12538,12 +13488,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.0.tgz", - "integrity": "sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==", + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", + "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", "dev": true, "dependencies": { - "browserslist": "^4.22.3" + "browserslist": "^4.23.0" }, "funding": { "type": "opencollective", @@ -12551,9 +13501,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.0.tgz", - "integrity": "sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ==", + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.1.tgz", + "integrity": "sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==", "dev": true, "hasInstallScript": true, "funding": { @@ -12725,16 +13675,16 @@ } }, "node_modules/css-loader": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", - "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "dev": true, "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.4", - "postcss-modules-scope": "^3.1.1", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.5.4" @@ -13198,6 +14148,54 @@ "node": ">=0.10" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", @@ -14014,12 +15012,6 @@ "tslib": "^2.0.3" } }, - "node_modules/dot-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", @@ -14142,8 +15134,7 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/ecc-jsbn": { "version": "0.1.2", @@ -14161,9 +15152,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "dependencies": { "jake": "^10.8.5" @@ -14176,15 +15167,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.682", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.682.tgz", - "integrity": "sha512-oCglfs8yYKs9RQjJFOHonSnhikPK3y+0SvSYc/YpYJV//6rqc0/hbwd0c7vgK4vrl6y2gJAwjkhkSGWK+z4KRA==", + "version": "1.4.736", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.736.tgz", + "integrity": "sha512-Rer6wc3ynLelKNM4lOCg7/zPQj8tPOCB2hzD32PX9wd3hgRRi9MxEbmkFCokzcEhRVMiOVLjnL9ig9cefJ+6+Q==", "dev": true }, "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", + "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", "dev": true, "dependencies": { "bn.js": "^4.11.9", @@ -14205,8 +15196,7 @@ "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/emojis-list": { "version": "3.0.0", @@ -14269,9 +15259,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -14304,9 +15294,9 @@ } }, "node_modules/envinfo": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", - "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.12.0.tgz", + "integrity": "sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -14345,18 +15335,21 @@ } }, "node_modules/es-abstract": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", - "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", - "dev": true, + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.6", + "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.2", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", @@ -14364,15 +15357,16 @@ "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.1", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.1", + "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", @@ -14380,17 +15374,17 @@ "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.0", + "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.1", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -14399,12 +15393,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, "node_modules/es-cookie": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/es-cookie/-/es-cookie-1.3.2.tgz", @@ -14450,42 +15438,51 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", - "integrity": "sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==", + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", + "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", "dev": true, "dependencies": { - "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.4", + "es-abstract": "^1.23.0", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.2", + "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.1", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.0" + "safe-array-concat": "^1.1.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", "dev": true }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -14508,7 +15505,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -15019,27 +16015,29 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", + "es-iterator-helpers": "^1.0.17", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "string.prototype.matchall": "^4.0.10" }, "engines": { "node": ">=4" @@ -15392,16 +16390,16 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -15449,9 +16447,9 @@ "integrity": "sha512-M2+Gl6vtvHW5CiRwy82epoiMHWWDVsLws+YnhO2C0lY6eAbRSvRdCA1G1VxSY68y+Urfb74npTO0kdHgC6OPHg==" }, "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -15712,11 +16710,6 @@ "node": ">= 10" } }, - "node_modules/file-selector/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/file-system-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", @@ -16031,18 +17024,18 @@ "dev": true }, "node_modules/flow-parser": { - "version": "0.229.2", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.229.2.tgz", - "integrity": "sha512-T72XV2Izvl7yV6dhHhLaJ630Y6vOZJl6dnOS6dN0bPW9ExuREu7xGAf3omtcxX76POTuux9TJPu9ZpS48a/rdw==", + "version": "0.233.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.233.0.tgz", + "integrity": "sha512-E/mv51GYJfLuRX6fZnw4M52gBxYa8pkHUOgNEZOcQK2RTXS8YXeU5rlalkTcY99UpwbeNVCSUFKaavpOksi/pQ==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -16062,7 +17055,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, "dependencies": { "is-callable": "^1.1.3" } @@ -16071,7 +17063,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -16087,7 +17078,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "engines": { "node": ">=14" }, @@ -16229,6 +17219,11 @@ "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", "optional": true }, + "node_modules/framer-motion/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/framesync": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/framesync/-/framesync-4.1.0.tgz", @@ -16267,7 +17262,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -16279,7 +17273,6 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -16290,8 +17283,7 @@ "node_modules/fs-minipass/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/fs-monkey": { "version": "1.0.5", @@ -16330,7 +17322,6 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -16560,7 +17551,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -16574,9 +17564,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -16604,18 +17594,18 @@ } }, "node_modules/giget": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.1.tgz", - "integrity": "sha512-4VG22mopWtIeHwogGSy1FViXVo0YT+m6BrqZfz0JJFwbSsePsCdOzdLIIli5BtMp7Xe8f/o2OmBpQX2NBOC24g==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz", + "integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==", "dev": true, "dependencies": { - "citty": "^0.1.5", + "citty": "^0.1.6", "consola": "^3.2.3", - "defu": "^6.1.3", - "node-fetch-native": "^1.6.1", - "nypm": "^0.3.3", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.3", + "nypm": "^0.3.8", "ohash": "^1.1.3", - "pathe": "^1.1.1", + "pathe": "^1.1.2", "tar": "^6.2.0" }, "bin": { @@ -16645,16 +17635,15 @@ "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" }, "node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -16686,16 +17675,14 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -16734,7 +17721,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, "dependencies": { "define-properties": "^1.1.3" }, @@ -17015,7 +18001,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -17076,14 +18061,13 @@ } }, "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", "dev": true, "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, "engines": { "node": ">=4" @@ -17100,9 +18084,9 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -17172,13 +18156,12 @@ "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", "dev": true, "funding": [ { @@ -17522,7 +18505,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "engines": { "node": ">=0.8.19" } @@ -17531,7 +18513,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, "engines": { "node": ">=8" } @@ -17561,7 +18542,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, "engines": { "node": ">=10" } @@ -17570,7 +18550,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -17608,11 +18587,6 @@ "tslib": "^2.1.0" } }, - "node_modules/intl-messageformat/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -17691,9 +18665,9 @@ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" }, "node_modules/iron-webcrypto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.0.0.tgz", - "integrity": "sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.1.0.tgz", + "integrity": "sha512-5vgYsCakNlaQub1orZK5QmNYhwYtcllTkZBp5sfIaCqY93Cf6l+v2rtE+E4TMbcfjxDMCdrO8wmp7+ZvhDECLA==", "funding": { "url": "https://github.com/sponsors/brc-dd" } @@ -17726,7 +18700,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -17762,7 +18735,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -17785,7 +18757,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -17823,7 +18794,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -17854,6 +18824,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -18133,10 +19117,13 @@ } }, "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -18161,7 +19148,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -18181,7 +19167,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -18264,10 +19249,13 @@ "dev": true }, "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -18276,7 +19264,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, "dependencies": { "call-bind": "^1.0.7" }, @@ -18302,7 +19289,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -18317,7 +19303,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -18332,7 +19317,6 @@ "version": "1.1.13", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, "dependencies": { "which-typed-array": "^1.1.14" }, @@ -18368,10 +19352,13 @@ "dev": true }, "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -18380,7 +19367,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -18389,13 +19375,16 @@ } }, "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -18443,8 +19432,7 @@ "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/isexe": { "version": "2.0.0", @@ -18508,7 +19496,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -19373,12 +20360,6 @@ "tslib": "^2.0.3" } }, - "node_modules/lower-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/lru_map": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", @@ -19475,9 +20456,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", - "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", + "version": "0.30.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.9.tgz", + "integrity": "sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -19575,9 +20556,9 @@ } }, "node_modules/markdown-to-jsx": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.1.tgz", - "integrity": "sha512-GbrbkTnHp9u6+HqbPRFJbObi369AgJNXi/sGqq5HRsoZW063xR1XDCaConqq+whfEIAlzB1YPnOgsPc7B7bc/A==", + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.7.tgz", + "integrity": "sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg==", "dev": true, "engines": { "node": ">= 10" @@ -19861,7 +20842,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -19881,7 +20861,6 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -19890,7 +20869,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -19903,7 +20881,6 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -19914,8 +20891,7 @@ "node_modules/minizlib/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/mjolnir.js": { "version": "2.7.1", @@ -20242,9 +21218,9 @@ } }, "node_modules/next-intl": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-3.11.0.tgz", - "integrity": "sha512-2YYsg0uQkocOIO4HOiu8CbaCkPBWIs4gunUc9HSPimGFJR6WLp8JyzksKadaZOz3o5z2NmMvq7h/RcONCYurhw==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-3.11.1.tgz", + "integrity": "sha512-KaMdMMTLJ8Qs15AfltKFTdzk3OjAEIKRGmRu6kpH5Mv3DPUoOX9sQ+fXvNlKmLzw+TeBt5yPCswzLZFmJMbsOA==", "funding": [ { "type": "individual", @@ -20254,7 +21230,7 @@ "dependencies": { "@formatjs/intl-localematcher": "^0.2.32", "negotiator": "^0.6.3", - "use-intl": "^3.11.0" + "use-intl": "^3.11.1" }, "peerDependencies": { "next": "^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0", @@ -20269,11 +21245,6 @@ "tslib": "^2.4.0" } }, - "node_modules/next-intl/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/next-unused": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/next-unused/-/next-unused-0.0.6.tgz", @@ -20358,16 +21329,10 @@ "tslib": "^2.0.3" } }, - "node_modules/no-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/node-abi": { - "version": "3.56.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.56.0.tgz", - "integrity": "sha512-fZjdhDOeRcaS+rcpve7XuwHBmktS1nS1gzgghwKUQQ8nTy2FdSDr6ZT8k6YhvlJeHmmQMYiT/IH9hfco5zeW2Q==", + "version": "3.57.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.57.0.tgz", + "integrity": "sha512-Dp+A9JWxRaKuHP35H77I4kCKesDy5HUDEmScia2FyncMTOXASMyg251F5PhFoDA5uqBrDDffiLpbqnrZmNXW+g==", "dependencies": { "semver": "^7.3.5" }, @@ -20462,9 +21427,9 @@ } }, "node_modules/node-fetch-native": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.2.tgz", - "integrity": "sha512-69mtXOFZ6hSkYiXAVB5SqaRvrbITC/NPyqv7yuu/qw0nmgPyYbIMYYNIDhNtwPrzk0ptrimrLz/hhjvm4w5Z+w==" + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", + "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==" }, "node_modules/node-forge": { "version": "1.3.1", @@ -20569,7 +21534,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -20581,7 +21545,6 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, "bin": { "semver": "bin/semver" } @@ -20595,9 +21558,9 @@ } }, "node_modules/npm": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-10.4.0.tgz", - "integrity": "sha512-RS7Mx0OVfXlOcQLRePuDIYdFCVBPCNapWHplDK+mh7GDdP/Tvor4ocuybRRPSvfcRb2vjRJt1fHCqw3cr8qACQ==", + "version": "10.5.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.5.2.tgz", + "integrity": "sha512-cHVG7QEJwJdZyOrK0dKX5uf3R5Fd0E8AcmSES1jLtO52UT1enUKZ96Onw/xwq4CbrTZEnDuu2Vf9kCQh/Sd12w==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -20606,6 +21569,7 @@ "@npmcli/map-workspaces", "@npmcli/package-json", "@npmcli/promise-spawn", + "@npmcli/redact", "@npmcli/run-script", "@sigstore/tuf", "abbrev", @@ -20675,27 +21639,28 @@ "@npmcli/arborist": "^7.2.1", "@npmcli/config": "^8.0.2", "@npmcli/fs": "^3.1.0", - "@npmcli/map-workspaces": "^3.0.4", - "@npmcli/package-json": "^5.0.0", + "@npmcli/map-workspaces": "^3.0.6", + "@npmcli/package-json": "^5.0.2", "@npmcli/promise-spawn": "^7.0.1", + "@npmcli/redact": "^1.1.0", "@npmcli/run-script": "^7.0.4", - "@sigstore/tuf": "^2.3.0", + "@sigstore/tuf": "^2.3.2", "abbrev": "^2.0.0", "archy": "~1.0.0", "cacache": "^18.0.2", "chalk": "^5.3.0", "ci-info": "^4.0.0", "cli-columns": "^4.0.0", - "cli-table3": "^0.6.3", + "cli-table3": "^0.6.4", "columnify": "^1.6.0", "fastest-levenshtein": "^1.0.16", "fs-minipass": "^3.0.3", - "glob": "^10.3.10", + "glob": "^10.3.12", "graceful-fs": "^4.2.11", "hosted-git-info": "^7.0.1", - "ini": "^4.1.1", - "init-package-json": "^6.0.0", - "is-cidr": "^5.0.3", + "ini": "^4.1.2", + "init-package-json": "^6.0.2", + "is-cidr": "^5.0.5", "json-parse-even-better-errors": "^3.0.1", "libnpmaccess": "^8.0.1", "libnpmdiff": "^6.0.3", @@ -20709,11 +21674,11 @@ "libnpmteam": "^6.0.0", "libnpmversion": "^5.0.1", "make-fetch-happen": "^13.0.0", - "minimatch": "^9.0.3", + "minimatch": "^9.0.4", "minipass": "^7.0.4", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", - "node-gyp": "^10.0.1", + "node-gyp": "^10.1.0", "nopt": "^7.2.0", "normalize-package-data": "^6.0.0", "npm-audit-report": "^5.0.0", @@ -20721,7 +21686,7 @@ "npm-package-arg": "^11.0.1", "npm-pick-manifest": "^9.0.0", "npm-profile": "^9.0.0", - "npm-registry-fetch": "^16.1.0", + "npm-registry-fetch": "^16.2.0", "npm-user-validate": "^2.0.0", "npmlog": "^7.0.1", "p-map": "^4.0.0", @@ -20729,12 +21694,12 @@ "parse-conflict-json": "^3.0.1", "proc-log": "^3.0.0", "qrcode-terminal": "^0.12.0", - "read": "^2.1.0", - "semver": "^7.5.4", - "spdx-expression-parse": "^3.0.1", + "read": "^3.0.1", + "semver": "^7.6.0", + "spdx-expression-parse": "^4.0.0", "ssri": "^10.0.5", "supports-color": "^9.4.0", - "tar": "^6.2.0", + "tar": "^6.2.1", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "treeverse": "^3.0.0", @@ -20838,7 +21803,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { - "version": "2.2.0", + "version": "2.2.2", "inBundle": true, "license": "ISC", "dependencies": { @@ -20846,14 +21811,14 @@ "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.1" + "socks-proxy-agent": "^8.0.3" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "7.3.1", + "version": "7.4.2", "inBundle": true, "license": "ISC", "dependencies": { @@ -20865,7 +21830,8 @@ "@npmcli/name-from-folder": "^2.0.0", "@npmcli/node-gyp": "^3.0.0", "@npmcli/package-json": "^5.0.0", - "@npmcli/query": "^3.0.1", + "@npmcli/query": "^3.1.0", + "@npmcli/redact": "^1.1.0", "@npmcli/run-script": "^7.0.2", "bin-links": "^4.0.1", "cacache": "^18.0.0", @@ -20873,12 +21839,12 @@ "hosted-git-info": "^7.0.1", "json-parse-even-better-errors": "^3.0.0", "json-stringify-nice": "^1.1.4", - "minimatch": "^9.0.0", + "minimatch": "^9.0.4", "nopt": "^7.0.0", "npm-install-checks": "^6.2.0", "npm-package-arg": "^11.0.1", "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^16.0.0", + "npm-registry-fetch": "^16.2.0", "npmlog": "^7.0.1", "pacote": "^17.0.4", "parse-conflict-json": "^3.0.0", @@ -20899,13 +21865,13 @@ } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "8.1.0", + "version": "8.2.2", "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/map-workspaces": "^3.0.2", "ci-info": "^4.0.0", - "ini": "^4.1.0", + "ini": "^4.1.2", "nopt": "^7.0.0", "proc-log": "^3.0.0", "read-package-json-fast": "^3.0.2", @@ -20953,7 +21919,7 @@ } }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "5.0.4", + "version": "5.0.5", "inBundle": true, "license": "ISC", "dependencies": { @@ -20986,7 +21952,7 @@ } }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "3.0.4", + "version": "3.0.6", "inBundle": true, "license": "ISC", "dependencies": { @@ -21030,7 +21996,7 @@ } }, "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "5.0.0", + "version": "5.0.2", "inBundle": true, "license": "ISC", "dependencies": { @@ -21058,7 +22024,7 @@ } }, "node_modules/npm/node_modules/@npmcli/query": { - "version": "3.0.1", + "version": "3.1.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -21068,6 +22034,14 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/npm/node_modules/@npmcli/run-script": { "version": "7.0.4", "inBundle": true, @@ -21093,18 +22067,18 @@ } }, "node_modules/npm/node_modules/@sigstore/bundle": { - "version": "2.1.1", + "version": "2.3.1", "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.2.1" + "@sigstore/protobuf-specs": "^0.3.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@sigstore/core": { - "version": "0.2.0", + "version": "1.1.0", "inBundle": true, "license": "Apache-2.0", "engines": { @@ -21112,21 +22086,21 @@ } }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.2.1", + "version": "0.3.1", "inBundle": true, "license": "Apache-2.0", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@sigstore/sign": { - "version": "2.2.1", + "version": "2.3.0", "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.1.1", - "@sigstore/core": "^0.2.0", - "@sigstore/protobuf-specs": "^0.2.1", + "@sigstore/bundle": "^2.3.0", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.1", "make-fetch-happen": "^13.0.0" }, "engines": { @@ -21134,11 +22108,11 @@ } }, "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "2.3.0", + "version": "2.3.2", "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.2.1", + "@sigstore/protobuf-specs": "^0.3.0", "tuf-js": "^2.2.0" }, "engines": { @@ -21146,13 +22120,13 @@ } }, "node_modules/npm/node_modules/@sigstore/verify": { - "version": "0.1.0", + "version": "1.2.0", "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.1.1", - "@sigstore/core": "^0.2.0", - "@sigstore/protobuf-specs": "^0.2.1" + "@sigstore/bundle": "^2.3.1", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -21187,7 +22161,7 @@ } }, "node_modules/npm/node_modules/agent-base": { - "version": "7.1.0", + "version": "7.1.1", "inBundle": true, "license": "MIT", "dependencies": { @@ -21266,11 +22240,14 @@ } }, "node_modules/npm/node_modules/binary-extensions": { - "version": "2.2.0", + "version": "2.3.0", "inBundle": true, "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm/node_modules/brace-expansion": { @@ -21282,7 +22259,7 @@ } }, "node_modules/npm/node_modules/builtins": { - "version": "5.0.1", + "version": "5.1.0", "inBundle": true, "license": "MIT", "dependencies": { @@ -21345,7 +22322,7 @@ } }, "node_modules/npm/node_modules/cidr-regex": { - "version": "4.0.3", + "version": "4.0.5", "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -21376,7 +22353,7 @@ } }, "node_modules/npm/node_modules/cli-table3": { - "version": "0.6.3", + "version": "0.6.4", "inBundle": true, "license": "MIT", "dependencies": { @@ -21522,7 +22499,7 @@ } }, "node_modules/npm/node_modules/diff": { - "version": "5.1.0", + "version": "5.2.0", "inBundle": true, "license": "BSD-3-Clause", "engines": { @@ -21627,15 +22604,15 @@ } }, "node_modules/npm/node_modules/glob": { - "version": "10.3.10", + "version": "10.3.12", "inBundle": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -21658,7 +22635,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/hasown": { - "version": "2.0.0", + "version": "2.0.2", "inBundle": true, "license": "MIT", "dependencies": { @@ -21685,7 +22662,7 @@ "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/http-proxy-agent": { - "version": "7.0.0", + "version": "7.0.2", "inBundle": true, "license": "MIT", "dependencies": { @@ -21697,7 +22674,7 @@ } }, "node_modules/npm/node_modules/https-proxy-agent": { - "version": "7.0.2", + "version": "7.0.4", "inBundle": true, "license": "MIT", "dependencies": { @@ -21748,7 +22725,7 @@ } }, "node_modules/npm/node_modules/ini": { - "version": "4.1.1", + "version": "4.1.2", "inBundle": true, "license": "ISC", "engines": { @@ -21756,14 +22733,14 @@ } }, "node_modules/npm/node_modules/init-package-json": { - "version": "6.0.0", + "version": "6.0.2", "inBundle": true, "license": "ISC", "dependencies": { + "@npmcli/package-json": "^5.0.0", "npm-package-arg": "^11.0.0", "promzard": "^1.0.0", - "read": "^2.0.0", - "read-package-json": "^7.0.0", + "read": "^3.0.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^5.0.0" @@ -21772,10 +22749,22 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/ip": { - "version": "2.0.0", + "node_modules/npm/node_modules/ip-address": { + "version": "9.0.5", "inBundle": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/npm/node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "inBundle": true, + "license": "BSD-3-Clause" }, "node_modules/npm/node_modules/ip-regex": { "version": "5.0.0", @@ -21789,11 +22778,11 @@ } }, "node_modules/npm/node_modules/is-cidr": { - "version": "5.0.3", + "version": "5.0.5", "inBundle": true, "license": "BSD-2-Clause", "dependencies": { - "cidr-regex": "4.0.3" + "cidr-regex": "^4.0.4" }, "engines": { "node": ">=14" @@ -21845,6 +22834,11 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/npm/node_modules/jsbn": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT" + }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "3.0.1", "inBundle": true, @@ -21880,38 +22874,38 @@ "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { - "version": "8.0.2", + "version": "8.0.3", "inBundle": true, "license": "ISC", "dependencies": { "npm-package-arg": "^11.0.1", - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^16.2.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "6.0.6", + "version": "6.0.9", "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/arborist": "^7.2.1", "@npmcli/disparity-colors": "^3.0.0", "@npmcli/installed-package-contents": "^2.0.2", - "binary-extensions": "^2.2.0", + "binary-extensions": "^2.3.0", "diff": "^5.1.0", - "minimatch": "^9.0.0", + "minimatch": "^9.0.4", "npm-package-arg": "^11.0.1", "pacote": "^17.0.4", - "tar": "^6.2.0" + "tar": "^6.2.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "7.0.7", + "version": "7.0.10", "inBundle": true, "license": "ISC", "dependencies": { @@ -21922,7 +22916,7 @@ "npmlog": "^7.0.1", "pacote": "^17.0.4", "proc-log": "^3.0.0", - "read": "^2.0.0", + "read": "^3.0.1", "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", "walk-up-path": "^3.0.1" @@ -21932,7 +22926,7 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "5.0.4", + "version": "5.0.7", "inBundle": true, "license": "ISC", "dependencies": { @@ -21943,31 +22937,31 @@ } }, "node_modules/npm/node_modules/libnpmhook": { - "version": "10.0.1", + "version": "10.0.2", "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^16.2.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmorg": { - "version": "6.0.2", + "version": "6.0.3", "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^16.2.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "6.0.6", + "version": "6.0.9", "inBundle": true, "license": "ISC", "dependencies": { @@ -21981,14 +22975,14 @@ } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "9.0.4", + "version": "9.0.5", "inBundle": true, "license": "ISC", "dependencies": { "ci-info": "^4.0.0", "normalize-package-data": "^6.0.0", "npm-package-arg": "^11.0.1", - "npm-registry-fetch": "^16.0.0", + "npm-registry-fetch": "^16.2.0", "proc-log": "^3.0.0", "semver": "^7.3.7", "sigstore": "^2.2.0", @@ -21999,23 +22993,23 @@ } }, "node_modules/npm/node_modules/libnpmsearch": { - "version": "7.0.1", + "version": "7.0.2", "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^16.2.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmteam": { - "version": "6.0.1", + "version": "6.0.2", "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^16.2.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -22037,7 +23031,7 @@ } }, "node_modules/npm/node_modules/lru-cache": { - "version": "10.1.0", + "version": "10.2.0", "inBundle": true, "license": "ISC", "engines": { @@ -22066,7 +23060,7 @@ } }, "node_modules/npm/node_modules/minimatch": { - "version": "9.0.3", + "version": "9.0.4", "inBundle": true, "license": "ISC", "dependencies": { @@ -22256,7 +23250,7 @@ } }, "node_modules/npm/node_modules/node-gyp": { - "version": "10.0.1", + "version": "10.1.0", "inBundle": true, "license": "MIT", "dependencies": { @@ -22396,10 +23390,11 @@ } }, "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "16.1.0", + "version": "16.2.0", "inBundle": true, "license": "ISC", "dependencies": { + "@npmcli/redact": "^1.1.0", "make-fetch-happen": "^13.0.0", "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", @@ -22501,11 +23496,11 @@ } }, "node_modules/npm/node_modules/path-scurry": { - "version": "1.10.1", + "version": "1.10.2", "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { @@ -22516,7 +23511,7 @@ } }, "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.0.15", + "version": "6.0.16", "inBundle": true, "license": "MIT", "dependencies": { @@ -22569,11 +23564,11 @@ } }, "node_modules/npm/node_modules/promzard": { - "version": "1.0.0", + "version": "1.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "read": "^2.0.0" + "read": "^3.0.1" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -22587,11 +23582,11 @@ } }, "node_modules/npm/node_modules/read": { - "version": "2.1.0", + "version": "3.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "mute-stream": "~1.0.0" + "mute-stream": "^1.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -22646,7 +23641,7 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.5.4", + "version": "7.6.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -22706,16 +23701,16 @@ } }, "node_modules/npm/node_modules/sigstore": { - "version": "2.2.0", + "version": "2.3.0", "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.1.1", - "@sigstore/core": "^0.2.0", - "@sigstore/protobuf-specs": "^0.2.1", - "@sigstore/sign": "^2.2.1", - "@sigstore/tuf": "^2.3.0", - "@sigstore/verify": "^0.1.0" + "@sigstore/bundle": "^2.3.1", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.1", + "@sigstore/sign": "^2.3.0", + "@sigstore/tuf": "^2.3.1", + "@sigstore/verify": "^1.2.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -22731,24 +23726,24 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.7.1", + "version": "2.8.3", "inBundle": true, "license": "MIT", "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "8.0.2", + "version": "8.0.3", "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.1", "debug": "^4.3.4", "socks": "^2.7.1" }, @@ -22765,13 +23760,22 @@ "spdx-license-ids": "^3.0.0" } }, + "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.3.0", + "version": "2.5.0", "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "3.0.1", + "version": "4.0.0", "inBundle": true, "license": "MIT", "dependencies": { @@ -22780,7 +23784,7 @@ } }, "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.16", + "version": "3.0.17", "inBundle": true, "license": "CC0-1.0" }, @@ -22857,7 +23861,7 @@ } }, "node_modules/npm/node_modules/tar": { - "version": "6.2.0", + "version": "6.2.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -22969,6 +23973,15 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/npm/node_modules/validate-npm-package-name": { "version": "5.0.0", "inBundle": true, @@ -23146,15 +24159,16 @@ } }, "node_modules/nypm": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.6.tgz", - "integrity": "sha512-2CATJh3pd6CyNfU5VZM7qSwFu0ieyabkEdnogE30Obn1czrmOYiZ8DOZLe1yBdLKWoyD3Mcy2maUs+0MR3yVjQ==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.8.tgz", + "integrity": "sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==", "dev": true, "dependencies": { - "citty": "^0.1.5", + "citty": "^0.1.6", + "consola": "^3.2.3", "execa": "^8.0.1", "pathe": "^1.1.2", - "ufo": "^1.3.2" + "ufo": "^1.4.0" }, "bin": { "nypm": "dist/cli.mjs" @@ -23320,12 +24334,12 @@ } }, "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -23346,7 +24360,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -23361,28 +24374,29 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -23392,40 +24406,45 @@ } }, "node_modules/object.groupby": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", - "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "dependencies": { - "array.prototype.filter": "^1.0.3", - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0" + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dev": true, "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -23441,13 +24460,13 @@ "dev": true }, "node_modules/ofetch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.3.3.tgz", - "integrity": "sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.3.4.tgz", + "integrity": "sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==", "dependencies": { - "destr": "^2.0.1", - "node-fetch-native": "^1.4.0", - "ufo": "^1.3.0" + "destr": "^2.0.3", + "node-fetch-native": "^1.6.3", + "ufo": "^1.5.3" } }, "node_modules/ofetch/node_modules/destr": { @@ -23671,7 +24690,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -23711,12 +24729,6 @@ "tslib": "^2.0.3" } }, - "node_modules/param-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -23729,16 +24741,20 @@ } }, "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, "node_modules/parse-json": { @@ -23785,12 +24801,6 @@ "tslib": "^2.0.3" } }, - "node_modules/pascal-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -23827,12 +24837,11 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { @@ -23846,7 +24855,6 @@ "version": "10.2.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "dev": true, "engines": { "node": "14 || >=16.14" } @@ -24083,19 +25091,23 @@ "tslib": "^1.10.0" } }, + "node_modules/popmotion/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -24114,7 +25126,7 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -24220,9 +25232,9 @@ "dev": true }, "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, "engines": { "node": "^10 || ^12 || >= 14" @@ -24232,9 +25244,9 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", - "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "dev": true, "dependencies": { "icss-utils": "^5.0.0", @@ -24249,9 +25261,9 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", - "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.4" @@ -24279,9 +25291,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -24317,9 +25329,9 @@ "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" }, "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -24347,9 +25359,9 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "node_modules/prebuild-install/node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "engines": { "node": ">=8" } @@ -25057,12 +26069,12 @@ } }, "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", + "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", "dev": true, "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -25125,9 +26137,9 @@ "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" }, "node_modules/radix3": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.0.tgz", - "integrity": "sha512-pNsHDxbGORSvuSScqNJ+3Km6QAVqk8CfsCBIEoDgpqLrkD2f3QM4I7d1ozJJ172OmIcoUcerZaNWqtLkRXTV3A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==" }, "node_modules/raf": { "version": "3.4.1", @@ -25171,9 +26183,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -25445,9 +26457,9 @@ "integrity": "sha512-8gyj4TTxeP7eEyc2QKawEuQoAZdjKvMY4pgWfycGmqGByhs17fR+zEBs0JUDq4US/l+vbTl+6zvUIx27iDo/Vw==" }, "node_modules/react-hook-form": { - "version": "7.50.1", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.50.1.tgz", - "integrity": "sha512-3PCY82oE0WgeOgUtIr3nYNNtNvqtJ7BZjsbxh6TnYNbXButaD5WpjOmTjdxZfheuHKR68qfeFnEDVYoSSFPMTQ==", + "version": "7.51.3", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.51.3.tgz", + "integrity": "sha512-cvJ/wbHdhYx8aviSWh28w9ImjmVsb5Y05n1+FW786vEZQJV5STNM0pW6ujS+oiBecb0ARBxJFyAnXj9+GHXACQ==", "engines": { "node": ">=12.22.0" }, @@ -25485,12 +26497,12 @@ } }, "node_modules/react-lazyload": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-lazyload/-/react-lazyload-3.2.0.tgz", - "integrity": "sha512-zJlrG8QyVZz4+xkYZH5v1w3YaP5wEFaYSUWC4CT9UXfK75IfRAIEdnyIUF+dXr3kX2MOtL1lUaZmaQZqrETwgw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/react-lazyload/-/react-lazyload-3.2.1.tgz", + "integrity": "sha512-oDLlLOI/rRLY0fUh/HYFCy4CqCe7zdJXv6oTl2pC30tN3ezWxvwcdHYfD/ZkrGOMOOT5pO7hNLSvg7WsmAij1w==", "peerDependencies": { - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", - "react-dom": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/react-lifecycles-compat": { @@ -25617,9 +26629,9 @@ } }, "node_modules/react-player": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/react-player/-/react-player-2.14.1.tgz", - "integrity": "sha512-jILj7F9o+6NHzrJ1GqZIxfJgskvGmKeJ05FNhPvgiCpvMZFmFneKEkukywHcULDO2lqITm+zcEkLSq42mX0FbA==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/react-player/-/react-player-2.16.0.tgz", + "integrity": "sha512-mAIPHfioD7yxO0GNYVFD1303QFtI3lyyQZLY229UEAp/a10cSW+hPcakg0Keq8uWJxT2OiT/4Gt+Lc9bD6bJmQ==", "dependencies": { "deepmerge": "^4.0.0", "load-script": "^1.0.0", @@ -25666,9 +26678,9 @@ } }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.5.tgz", - "integrity": "sha512-3cqjOqg6s0XbOjWvmasmqHch+RLxIEk2r/70rzGXuz3iIGQsQheEQyqYCBb5EECoD01Vo2SIbDqW4paLeLTASw==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", "dev": true, "dependencies": { "react-style-singleton": "^2.2.1", @@ -25687,18 +26699,6 @@ } } }, - "node_modules/react-remove-scroll-bar/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/react-remove-scroll/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/react-simple-animate": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/react-simple-animate/-/react-simple-animate-3.5.2.tgz", @@ -25746,12 +26746,6 @@ } } }, - "node_modules/react-style-singleton/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -25899,15 +26893,15 @@ } }, "node_modules/recast": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.4.tgz", - "integrity": "sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==", + "version": "0.23.6", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.6.tgz", + "integrity": "sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==", "dev": true, "dependencies": { - "assert": "^2.0.0", "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" }, "engines": { @@ -25923,12 +26917,6 @@ "node": ">=0.10.0" } }, - "node_modules/recast/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/redis-errors": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", @@ -25949,16 +26937,16 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", - "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0", - "get-intrinsic": "^1.2.3", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -26433,12 +27421,6 @@ "tslib": "^2.1.0" } }, - "node_modules/rxjs/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/s2-geometry": { "version": "1.2.10", "resolved": "https://registry.npmjs.org/s2-geometry/-/s2-geometry-1.2.10.tgz", @@ -26448,13 +27430,12 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", - "dev": true, + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -26488,7 +27469,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -26507,9 +27487,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { - "version": "1.71.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", - "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz", + "integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -26616,7 +27596,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -26702,16 +27681,16 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -26795,9 +27774,9 @@ } }, "node_modules/sharp/node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "engines": { "node": ">=8" } @@ -26857,11 +27836,11 @@ } }, "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" @@ -26989,9 +27968,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -27019,7 +27998,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -27028,14 +28006,12 @@ "node_modules/spdx-exceptions": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -27044,8 +28020,7 @@ "node_modules/spdx-license-ids": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", - "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", - "dev": true + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==" }, "node_modules/sprintf-js": { "version": "1.0.3", @@ -27230,7 +28205,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -27243,8 +28217,7 @@ "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", @@ -27252,34 +28225,40 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", - "dev": true, + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -27289,28 +28268,29 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "dev": true, + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "dev": true, + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -27346,7 +28326,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -27432,6 +28411,11 @@ "tslib": "^1.10.0" } }, + "node_modules/style-value-types/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/styled-jsx": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.2.tgz", @@ -27645,10 +28629,9 @@ } }, "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", - "dev": true, + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -27688,7 +28671,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -27697,7 +28679,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -27708,8 +28689,7 @@ "node_modules/tar/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/telejson": { "version": "7.2.0", @@ -27770,9 +28750,9 @@ } }, "node_modules/terser": { - "version": "5.28.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz", - "integrity": "sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==", + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz", + "integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -27924,8 +28904,7 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/throttleit": { "version": "1.0.1", @@ -28020,15 +28999,12 @@ "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, "engines": { - "node": ">=8.17.0" + "node": ">=14.14" } }, "node_modules/tmpl": { @@ -28142,9 +29118,14 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/traverse": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", - "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.9.tgz", + "integrity": "sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==", + "dependencies": { + "gopd": "^1.0.1", + "typedarray.prototype.slice": "^1.0.3", + "which-typed-array": "^1.1.15" + }, "engines": { "node": ">= 0.4" }, @@ -28363,9 +29344,9 @@ } }, "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tsutils": { "version": "3.21.0", @@ -28382,6 +29363,12 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", @@ -28450,7 +29437,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -28464,7 +29450,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -28483,7 +29468,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -28500,10 +29484,9 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", - "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", - "dev": true, + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -28524,6 +29507,25 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, + "node_modules/typedarray.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz", + "integrity": "sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-offset": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -28560,9 +29562,9 @@ } }, "node_modules/ufo": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz", - "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==" + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", + "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==" }, "node_modules/uglify-js": { "version": "3.17.4", @@ -28581,7 +29583,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -28750,15 +29751,18 @@ } }, "node_modules/unplugin": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.7.1.tgz", - "integrity": "sha512-JqzORDAPxxs8ErLV4x+LL7bk5pk3YlcWqpSNsIkAZj972KzFZLClc/ekppahKkOczGkwIG6ElFgdOgOlK4tXZw==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.10.1.tgz", + "integrity": "sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==", "dev": true, "dependencies": { "acorn": "^8.11.3", - "chokidar": "^3.5.3", + "chokidar": "^3.6.0", "webpack-sources": "^3.2.3", "webpack-virtual-modules": "^0.6.1" + }, + "engines": { + "node": ">=14.0.0" } }, "node_modules/unplugin/node_modules/acorn": { @@ -28961,9 +29965,9 @@ "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==" }, "node_modules/use-callback-ref": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.1.tgz", - "integrity": "sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", "dev": true, "dependencies": { "tslib": "^2.0.0" @@ -28981,12 +29985,6 @@ } } }, - "node_modules/use-callback-ref/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/use-deep-compare-effect": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/use-deep-compare-effect/-/use-deep-compare-effect-1.8.1.tgz", @@ -29005,9 +30003,9 @@ } }, "node_modules/use-intl": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-3.11.0.tgz", - "integrity": "sha512-zq0V1vBruZ+8BPcpLszPayRvPVCcnlkCU5l9ghrSVAkJgj/EAHlXTd6grbxnkKUeC4V7UNFR88OqF15HML7Bow==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-3.11.1.tgz", + "integrity": "sha512-pFfrQXa3LBHh2MairVFUEXp6BnVcqJno9wbHIEaH0n7ib2kNTMP8jjjuboLHEIphRHygEpbFAjKIr0glUHCytA==", "dependencies": { "@formatjs/ecma402-abstract": "^1.11.4", "intl-messageformat": "^9.3.18" @@ -29051,12 +30049,6 @@ } } }, - "node_modules/use-sidecar/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", @@ -29132,7 +30124,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -29331,26 +30322,26 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.90.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", - "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.16.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", @@ -29358,7 +30349,7 @@ "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -29447,9 +30438,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.3.tgz", + "integrity": "sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==", "dev": true, "dependencies": { "colorette": "^2.0.10", @@ -29570,6 +30561,19 @@ "node": ">=0.4.0" } }, + "node_modules/webpack/node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/wgs84": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/wgs84/-/wgs84-0.0.0.tgz", @@ -29607,7 +30611,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -29646,15 +30649,18 @@ } }, "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -29666,16 +30672,15 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", - "dev": true, + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -29710,7 +30715,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -29728,7 +30732,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -29745,7 +30748,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -29757,7 +30759,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "engines": { "node": ">=12" }, @@ -29769,7 +30770,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -29786,7 +30786,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -29811,7 +30810,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -29862,9 +30860,9 @@ } }, "node_modules/xss": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", - "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz", + "integrity": "sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==", "dependencies": { "commander": "^2.20.3", "cssfilter": "0.0.10" From 3b24f7bd3c08d8eaa17a53f26c82ca36bce1e02e Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 15 Apr 2024 18:22:49 +0530 Subject: [PATCH 64/70] fix: resolves language switching bug on back button (single project) --- middleware.ts | 1 + .../projects/screens/SingleProjectDetails.tsx | 21 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/middleware.ts b/middleware.ts index e7e4c317d4..cf85f12ed5 100644 --- a/middleware.ts +++ b/middleware.ts @@ -74,6 +74,7 @@ export default async function middleware(req: NextRequest) { const start = Date.now(); const url = req.nextUrl; const pathname = url.pathname; + console.log('pathname', pathname); const host = req.headers.get('host') as string; const { slug, supportedLanguages } = await getTenantConciseInfo(host); diff --git a/src/features/projects/screens/SingleProjectDetails.tsx b/src/features/projects/screens/SingleProjectDetails.tsx index 5c877d6e5c..60cd0e6f6f 100644 --- a/src/features/projects/screens/SingleProjectDetails.tsx +++ b/src/features/projects/screens/SingleProjectDetails.tsx @@ -97,18 +97,17 @@ function SingleProjectDetails(): ReactElement { } else { if (document.referrer) { window.history.go(-2); + } else { + router.replace({ + pathname: '/', + query: { + ...(isEmbed ? { embed: 'true' } : {}), + ...(isEmbed && callbackUrl !== undefined + ? { callback: callbackUrl } + : {}), + }, + }); } - router.replace( - `/${ - isEmbed - ? `${ - callbackUrl != undefined - ? `?embed=true&callback=${callbackUrl}` - : '?embed=true' - }` - : `` - }` - ); } }; From a13b08fcedf0dbdd82a921891679ff1b6af7f0ad Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Tue, 16 Apr 2024 12:20:18 +0530 Subject: [PATCH 65/70] fix: resolves blank map on switching language (project details pg) --- pages/sites/[slug]/[locale]/[p].tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pages/sites/[slug]/[locale]/[p].tsx b/pages/sites/[slug]/[locale]/[p].tsx index 866d26e56b..5b7564e129 100644 --- a/pages/sites/[slug]/[locale]/[p].tsx +++ b/pages/sites/[slug]/[locale]/[p].tsx @@ -151,12 +151,10 @@ export default function Donate({ React.useEffect(() => { if (geoJson && !router.query.site && !router.query.ploc && project) { router.push( - `/${project.slug}?site=${geoJson.features[0].properties.id}`, - undefined, - { shallow: true } + `/${locale}/${project.slug}?site=${geoJson.features[0].properties.id}` ); } - }, [project, router]); + }, [project, router.query.site, router.query.ploc, locale]); React.useEffect(() => { //for selecting one of the site of project if user use link to directly visit to site from home page From b6abe89e27730ee8f1a1f072baaad2eb74896c38 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Tue, 16 Apr 2024 12:39:56 +0530 Subject: [PATCH 66/70] fix: fixes issue (no site query string on first load of project details page) --- pages/sites/[slug]/[locale]/[p].tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pages/sites/[slug]/[locale]/[p].tsx b/pages/sites/[slug]/[locale]/[p].tsx index 5b7564e129..58119956ee 100644 --- a/pages/sites/[slug]/[locale]/[p].tsx +++ b/pages/sites/[slug]/[locale]/[p].tsx @@ -149,12 +149,17 @@ export default function Donate({ }, [project]); React.useEffect(() => { - if (geoJson && !router.query.site && !router.query.ploc && project) { + if ( + geoJson?.features[0].properties.id && + !router.query.site && + !router.query.ploc && + project + ) { router.push( `/${locale}/${project.slug}?site=${geoJson.features[0].properties.id}` ); } - }, [project, router.query.site, router.query.ploc, locale]); + }, [project?.slug, router.query.site, router.query.ploc, locale, geoJson]); React.useEffect(() => { //for selecting one of the site of project if user use link to directly visit to site from home page From b7714f34022be3c78e44e175d59fd56cb1c8aa3d Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Tue, 16 Apr 2024 14:43:09 +0530 Subject: [PATCH 67/70] fix: resolves caching issue after updating language --- src/features/common/Layout/UserLayout/UserLayout.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/features/common/Layout/UserLayout/UserLayout.tsx b/src/features/common/Layout/UserLayout/UserLayout.tsx index 1c09340497..44350bdb93 100644 --- a/src/features/common/Layout/UserLayout/UserLayout.tsx +++ b/src/features/common/Layout/UserLayout/UserLayout.tsx @@ -125,6 +125,7 @@ function NavLink({ user, }: NavLinkProps) { const [isSubMenuActive, setisSubMenuActive] = useState(false); + const locale = useLocale(); useEffect(() => { // Check if array of submenu has activeSubLink if (link.subMenu && link.subMenu.length > 0) { @@ -157,12 +158,12 @@ function NavLink({ onClick={() => { // This is to shift to the main page needed when there is no sub menu if ((!link.subMenu || link.subMenu.length <= 0) && link.path) { - router.push(link.path); + router.push(`/${locale}${link.path}`); setactiveLink(link.path); setActiveSubMenu(''); } else { if (link.hideSubMenu && link.path) { - router.push(link.path); + router.push(`/${locale}${link.path}`); } else { setisSubMenuActive(!isSubMenuActive); } @@ -203,7 +204,7 @@ function NavLink({ //this is to shift to the submenu pages link.path && setactiveLink(link.path); setActiveSubMenu(subLink.path); - router.push(subLink.path); + router.push(`/${locale}${subLink.path}`); }} > {subLink.title} From 522ae94255d9310a68b164763742cd10f05343e2 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Tue, 16 Apr 2024 14:59:13 +0530 Subject: [PATCH 68/70] fix: resolves language caching issue for back button click (single project page) --- src/features/projects/screens/SingleProjectDetails.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/features/projects/screens/SingleProjectDetails.tsx b/src/features/projects/screens/SingleProjectDetails.tsx index 60cd0e6f6f..33121dd6fb 100644 --- a/src/features/projects/screens/SingleProjectDetails.tsx +++ b/src/features/projects/screens/SingleProjectDetails.tsx @@ -7,7 +7,7 @@ import ReactPlayer from 'react-player/lazy'; import ReadMoreReact from 'read-more-react'; import BackButton from '../../../../public/assets/images/icons/BackButton'; import ProjectContactDetails from '../components/projectDetails/ProjectContactDetails'; -import { useTranslations } from 'next-intl'; +import { useLocale, useTranslations } from 'next-intl'; import CancelIcon from '../../../../public/assets/images/icons/CancelIcon'; import ExpandIcon from '../../../../public/assets/images/icons/ExpandIcon'; import ProjectInfo from '../components/projectDetails/ProjectInfo'; @@ -36,6 +36,7 @@ function SingleProjectDetails(): ReactElement { const tDonate = useTranslations('Donate'); const tMaps = useTranslations('Maps'); + const locale = useLocale(); const { project, geoJson, @@ -99,7 +100,7 @@ function SingleProjectDetails(): ReactElement { window.history.go(-2); } else { router.replace({ - pathname: '/', + pathname: `/${locale}`, query: { ...(isEmbed ? { embed: 'true' } : {}), ...(isEmbed && callbackUrl !== undefined From aac6bb4c0d11de941188ae176dd8f91afe54a403 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 17 Apr 2024 14:47:11 +0530 Subject: [PATCH 69/70] fix: removes additional history item on language change --- .../common/Layout/Footer/SelectLanguageAndCountry.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx b/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx index 3afbd9cf4b..4dccac58f7 100644 --- a/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx +++ b/src/features/common/Layout/Footer/SelectLanguageAndCountry.tsx @@ -171,14 +171,14 @@ export default function TransitionsModal({ if (modalLanguage !== locale) { const { asPath, pathname } = router; if (pathname === '/sites/[slug]/[locale]') { - router.push(encodeURI(`/${modalLanguage}`)); + router.replace(encodeURI(`/${modalLanguage}`)); } else { const splitPathnames = asPath.split('/'); if (splitPathnames.length > 2) { const newPathname = splitPathnames.slice(2).join('/'); - router.push(encodeURI(`/${modalLanguage}/${newPathname}`)); + router.replace(encodeURI(`/${modalLanguage}/${newPathname}`)); } else { - router.push(encodeURI(`/${modalLanguage}`)); + router.replace(encodeURI(`/${modalLanguage}`)); } } } From 1fbc84abafdde2f61bbed82db5e4764064c08e9d Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 17 Apr 2024 15:32:56 +0530 Subject: [PATCH 70/70] fix: resolves cache issue for locale in project detail pages --- src/features/projects/components/ProjectSnippet.tsx | 2 +- src/features/projects/components/maps/Markers.tsx | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/features/projects/components/ProjectSnippet.tsx b/src/features/projects/components/ProjectSnippet.tsx index d69d106c34..31d3d5a56f 100644 --- a/src/features/projects/components/ProjectSnippet.tsx +++ b/src/features/projects/components/ProjectSnippet.tsx @@ -111,7 +111,7 @@ export default function ProjectSnippet({
{ router.push( - `/${project.slug}/${ + `/${locale}/${project.slug}/${ embed === 'true' ? `${ callbackUrl != undefined diff --git a/src/features/projects/components/maps/Markers.tsx b/src/features/projects/components/maps/Markers.tsx index 3c28e47e12..740820a3c4 100644 --- a/src/features/projects/components/maps/Markers.tsx +++ b/src/features/projects/components/maps/Markers.tsx @@ -7,6 +7,7 @@ import { ParamsContext } from '../../../common/Layout/QueryParamsContext'; import ProjectTypeIcon from '../ProjectTypeIcon'; import { SetState } from '../../../common/types/common'; import { MapProject } from '../../../common/types/ProjectPropsContextInterface'; +import { useLocale } from 'next-intl'; type PopupClosedData = { show: false; @@ -32,6 +33,7 @@ export default function Markers({ }: Props): ReactElement { let timer: NodeJS.Timeout; const router = useRouter(); + const locale = useLocale(); const [open, setOpen] = React.useState(false); const buttonRef = React.useRef(null); const { embed, callbackUrl } = React.useContext(ParamsContext); @@ -47,7 +49,7 @@ export default function Markers({ }; const goToProject = (projectSlug: string): void => { router.push( - `/${projectSlug}/${ + `/${locale}/${projectSlug}/${ embed === 'true' ? `${ callbackUrl != undefined