Merged in feature/i18n-check (pull request #24)

Add vue-i18n-extract and npm command

Approved-by: Daniel Egger
This commit is contained in:
Christian Cueni 2023-02-21 06:14:57 +00:00
commit 8c0a6ea6b9
12 changed files with 512 additions and 338 deletions

View File

@ -94,6 +94,21 @@ Preferences -> Tools -> Actions on Save
* Run eslint --fix
* Run prettier
## Translations
We use (vue-i18n)[https://kazupon.github.io/vue-i18n/] for translations
and (vue-i18n-extract)[https://github.com/Spittal/vue-i18n-extract] for helper
scripts.
```
# will create a report on command line with missing translations
npm run vue-i18n-extract
# add missing translations to files, see docs for more options
cd client
npx vue-i18n-extract --add
```
## Deployment to CapRover
### CapRover Dev (vbv-lernwelt.control.iterativ.ch)

View File

@ -1,2 +1,4 @@
dist
node_modules
**/__tests__/*.json
src/colors.json

View File

@ -1,8 +1,9 @@
{
"htmlWhitespaceSensitivity": "ignore",
"jsonRecursiveSort": true,
"organizeImportsSkipDestructiveCodeActions": true,
"printWidth": 88,
"semi": true,
"singleQuote": false,
"tabWidth": 2,
"printWidth": 88,
"organizeImportsSkipDestructiveCodeActions": true,
"htmlWhitespaceSensitivity": "ignore"
"tabWidth": 2
}

215
client/package-lock.json generated
View File

@ -21,6 +21,7 @@
"pinia": "^2.0.21",
"vue": "^3.2.38",
"vue-i18n": "^9.2.2",
"vue-i18n-extract": "^2.0.7",
"vue-router": "^4.1.5"
},
"devDependencies": {
@ -51,6 +52,7 @@
"postcss-import": "^14.1.0",
"prettier": "^2.7.1",
"prettier-plugin-organize-imports": "^3.1.1",
"prettier-plugin-sort-json": "^1.0.0",
"prettier-plugin-tailwindcss": "^0.2.1",
"replace-in-file": "^6.3.5",
"sass": "^1.54.6",
@ -3345,6 +3347,12 @@
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
"node_modules/@types/prettier": {
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz",
"integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==",
"dev": true
},
"node_modules/@types/semver": {
"version": "7.3.13",
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz",
@ -4225,8 +4233,7 @@
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
},
"node_modules/aria-query": {
"version": "5.1.3",
@ -4409,8 +4416,7 @@
"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/base64-js": {
"version": "1.5.1",
@ -4467,7 +4473,6 @@
"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"
}
@ -4569,6 +4574,14 @@
"node": ">=10.16.0"
}
},
"node_modules/cac": {
"version": "6.7.14",
"resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
"integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
"engines": {
"node": ">=8"
}
},
"node_modules/call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@ -4942,8 +4955,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/constant-case": {
"version": "3.0.4",
@ -5725,6 +5737,26 @@
"integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==",
"dev": true
},
"node_modules/dot-object": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/dot-object/-/dot-object-2.1.4.tgz",
"integrity": "sha512-7FXnyyCLFawNYJ+NhkqyP9Wd2yzuo+7n9pGiYpkmXCTYa8Ci2U0eUNDVg5OuO5Pm6aFXI2SWN8/N/w7SJWu1WA==",
"dependencies": {
"commander": "^4.0.0",
"glob": "^7.1.5"
},
"bin": {
"dot-object": "bin/dot-object"
}
},
"node_modules/dot-object/node_modules/commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
"engines": {
"node": ">= 6"
}
},
"node_modules/dotenv": {
"version": "16.0.3",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
@ -6953,8 +6985,7 @@
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
"dev": true
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"node_modules/fsevents": {
"version": "2.3.2",
@ -7046,7 +7077,6 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@ -7084,7 +7114,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"
@ -7094,7 +7123,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"
},
@ -7552,7 +7580,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dev": true,
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@ -7561,8 +7588,7 @@
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/inquirer": {
"version": "8.2.5",
@ -7946,6 +7972,14 @@
"integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==",
"dev": true
},
"node_modules/is-valid-glob": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
"integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-weakmap": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
@ -8062,7 +8096,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
"dependencies": {
"argparse": "^2.0.1"
},
@ -8675,7 +8708,6 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
"integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
@ -8965,7 +8997,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dev": true,
"dependencies": {
"wrappy": "1"
}
@ -9205,7 +9236,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
@ -9522,6 +9552,21 @@
}
}
},
"node_modules/prettier-plugin-sort-json": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/prettier-plugin-sort-json/-/prettier-plugin-sort-json-1.0.0.tgz",
"integrity": "sha512-XgcaF/Sojax1vD6j53wNIByx0rp7ecang+A8W0eM+Ks3yBFu/qXjJNvUtC1lEWeYbNfmRs/d8FyYJCYozAVENw==",
"dev": true,
"dependencies": {
"@types/prettier": "^2.7.2"
},
"engines": {
"node": ">=14.0.0"
},
"peerDependencies": {
"prettier": "^2.3.2"
}
},
"node_modules/prettier-plugin-tailwindcss": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.2.1.tgz",
@ -11125,6 +11170,39 @@
"vue": "^3.0.0"
}
},
"node_modules/vue-i18n-extract": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/vue-i18n-extract/-/vue-i18n-extract-2.0.7.tgz",
"integrity": "sha512-i1NW5R58S720iQ1BEk+6ILo3hT6UA8mtYNNolSH4rt9345qvXdvA6GHy2+jHozdDAKHwlu9VvS/+vIMKs1UYQw==",
"dependencies": {
"cac": "^6.7.12",
"dot-object": "^2.1.4",
"glob": "^8.0.1",
"is-valid-glob": "^1.0.0",
"js-yaml": "^4.1.0"
},
"bin": {
"vue-i18n-extract": "bin/vue-i18n-extract.js"
}
},
"node_modules/vue-i18n-extract/node_modules/glob": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
"integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^5.0.1",
"once": "^1.3.0"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/vue-router": {
"version": "4.1.6",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz",
@ -11460,8 +11538,7 @@
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"dev": true
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"node_modules/ws": {
"version": "8.11.0",
@ -14317,6 +14394,12 @@
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
"@types/prettier": {
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz",
"integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==",
"dev": true
},
"@types/semver": {
"version": "7.3.13",
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz",
@ -15009,8 +15092,7 @@
"argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
},
"aria-query": {
"version": "5.1.3",
@ -15149,8 +15231,7 @@
"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=="
},
"base64-js": {
"version": "1.5.1",
@ -15190,7 +15271,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0"
}
@ -15256,6 +15336,11 @@
"streamsearch": "^1.1.0"
}
},
"cac": {
"version": "6.7.14",
"resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
"integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="
},
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@ -15544,8 +15629,7 @@
"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=="
},
"constant-case": {
"version": "3.0.4",
@ -16143,6 +16227,22 @@
}
}
},
"dot-object": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/dot-object/-/dot-object-2.1.4.tgz",
"integrity": "sha512-7FXnyyCLFawNYJ+NhkqyP9Wd2yzuo+7n9pGiYpkmXCTYa8Ci2U0eUNDVg5OuO5Pm6aFXI2SWN8/N/w7SJWu1WA==",
"requires": {
"commander": "^4.0.0",
"glob": "^7.1.5"
},
"dependencies": {
"commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
}
}
},
"dotenv": {
"version": "16.0.3",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
@ -16977,8 +17077,7 @@
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
"dev": true
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"fsevents": {
"version": "2.3.2",
@ -17042,7 +17141,6 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@ -17056,7 +17154,6 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@ -17066,7 +17163,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@ -17416,7 +17512,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@ -17425,8 +17520,7 @@
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"inquirer": {
"version": "8.2.5",
@ -17703,6 +17797,11 @@
}
}
},
"is-valid-glob": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
"integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA=="
},
"is-weakmap": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
@ -17801,7 +17900,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
"requires": {
"argparse": "^2.0.1"
}
@ -18274,7 +18372,6 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
"integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
"dev": true,
"requires": {
"brace-expansion": "^2.0.1"
}
@ -18490,7 +18587,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dev": true,
"requires": {
"wrappy": "1"
}
@ -18678,8 +18774,7 @@
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"dev": true
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
},
"path-key": {
"version": "3.1.1",
@ -18847,6 +18942,15 @@
"dev": true,
"requires": {}
},
"prettier-plugin-sort-json": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/prettier-plugin-sort-json/-/prettier-plugin-sort-json-1.0.0.tgz",
"integrity": "sha512-XgcaF/Sojax1vD6j53wNIByx0rp7ecang+A8W0eM+Ks3yBFu/qXjJNvUtC1lEWeYbNfmRs/d8FyYJCYozAVENw==",
"dev": true,
"requires": {
"@types/prettier": "^2.7.2"
}
},
"prettier-plugin-tailwindcss": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.2.1.tgz",
@ -19980,6 +20084,32 @@
"@vue/devtools-api": "^6.2.1"
}
},
"vue-i18n-extract": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/vue-i18n-extract/-/vue-i18n-extract-2.0.7.tgz",
"integrity": "sha512-i1NW5R58S720iQ1BEk+6ILo3hT6UA8mtYNNolSH4rt9345qvXdvA6GHy2+jHozdDAKHwlu9VvS/+vIMKs1UYQw==",
"requires": {
"cac": "^6.7.12",
"dot-object": "^2.1.4",
"glob": "^8.0.1",
"is-valid-glob": "^1.0.0",
"js-yaml": "^4.1.0"
},
"dependencies": {
"glob": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
"integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^5.0.1",
"once": "^1.3.0"
}
}
}
},
"vue-router": {
"version": "4.1.6",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz",
@ -20233,8 +20363,7 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"dev": true
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"ws": {
"version": "8.11.0",

View File

@ -10,6 +10,7 @@
"coverage": "vitest run --coverage",
"typecheck": "vue-tsc --noEmit -p tsconfig.app.json --composite false",
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
"vue-i18n-extract": "vue-i18n-extract report",
"prettier": "prettier . --write",
"prettier:check": "prettier . --check",
"tailwind": "tailwindcss -i tailwind.css -o ../server/vbv_lernwelt/static/css/tailwind.css --watch"
@ -28,6 +29,7 @@
"pinia": "^2.0.21",
"vue": "^3.2.38",
"vue-i18n": "^9.2.2",
"vue-i18n-extract": "^2.0.7",
"vue-router": "^4.1.5"
},
"devDependencies": {
@ -58,6 +60,7 @@
"postcss-import": "^14.1.0",
"prettier": "^2.7.1",
"prettier-plugin-organize-imports": "^3.1.1",
"prettier-plugin-sort-json": "^1.0.0",
"prettier-plugin-tailwindcss": "^0.2.1",
"replace-in-file": "^6.3.5",
"sass": "^1.54.6",

View File

@ -1,170 +1,170 @@
{
"circlePage": {
"circleContentBoxTitle": "Das lernst du in diesem Circle.",
"contactExpertButton": "Fachexpertin kontaktieren",
"contactExpertDescription": "Tausche dich mit der Fachexpertin für den Circle {circleName} aus.",
"documents": {
"action": "Unterlagen hochladen",
"chooseLearningSequence": "Bitte wähle eine Lernsequenz aus",
"chooseName": "Bitte wähle einen Namen",
"chooseSequence": "Wähle eine Lernsequenz aus",
"expertDescription": "Stelle deinen Lernenden zusätzliche Inhalte zur Verfügung.",
"fileLabel": "Datei",
"maxFileSize": "Maximale Dateigrösse: 20 MB",
"modalAction": "Datei auswählen",
"modalFileName": "Name",
"modalNameInformation": "Max. 70 Zeichen",
"selectFile": "Bitte wähle eine Datei aus",
"title": "Unterlagen",
"uploadErrorMessage": "Beim Hochladen ist ein Fehler aufgetreten. Bitte versuche es erneut.",
"userDescription": "Hier findest du die Unterlagen, die dir die Fachexpertin zur Verfügung gestellt hat."
},
"duration": "Dauer",
"gotQuestions": "Hast du Fragen?",
"learnMore": "Erfahre mehr dazu"
},
"cockpit": {
"examsDone": "Abgelegte Prüfungen von Teilnehmer.",
"feedbacksDone": "Abgeschickte Feedbacks von Teilnehmer.",
"notifyTask": "Benachrichtigen",
"notifyTaskDescription": "Teilnehmer benachrichtigen",
"profileLink": "Profil anzeigen",
"progress": "Fortschritt",
"tasksDone": "Erledigte Transferaufträge von Teilnehmer.",
"title": "Cockpit"
},
"competences": {
"assessAgain": "Sich nochmals einschätzen",
"assessment": "Einschätzungen",
"competences": "Kompetenzen",
"lastImprovements": "Letzte verbesserte Kompetenzen",
"notAssessed": "Nicht eingeschätzt",
"title": "KompetenzNavi"
},
"constants": {
"no": "Nein",
"satisfied": "zufrieden",
"unsatisfied": "unzufrieden",
"verySatisfied": "sehr zufrieden",
"veryUnsatisfied": "sehr unzufrieden",
"yes": "Ja"
},
"dashboard": {
"welcome": "Willkommen, {name}"
},
"feedback": {
"answers": "Antworten",
"areYouSatisfied": "Wie zufrieden bist du?",
"average": "Durchschnitt",
"circleFeedback": "Feedback zum Circle",
"completionDescription": "Dein Feedback ist anonym. Dein Vor- und Nachname werden bei deiner Trainer/-in nicht angezeigt.",
"completionTitle": "Schicke dein Feedback an {name}",
"courseNegativeFeedbackLabel": "Wo sehen Sie Verbesserungspotenzial?",
"coursePositiveFeedbackLabel": "Was hat Ihnen besonders gut gefallen?",
"feedbackPageInfo": "Teilnehmer haben das Feedback ausgefüllt",
"feedbackPageTitle": "Feedback zum Lehrgang",
"feedbackSent": "Dein Feedback wurde abgeschickt",
"goalAttainmentLabel": "Zielerreichung insgesamt",
"happy": "Zufrieden",
"instructorCompetenceLabel": "Der Kursleiter war themenstark, fachkompetent.",
"instructorOpenFeedbackLabel": "Was ich dem Kursleiter sonst noch sagen wollte:",
"instructorRespectLabel": "Fragen und Anregungen der Kursteilnehmenden wurden ernst genommen und aufgegriffen.",
"intro": "{name}, dein/e Trainer/-in, bittet dich, ihm/ihr Feedback zu geben. Das ist freiwillig, würde aber ihm/ihr helfen, deine Lernerlebniss zu verbessern.",
"materialsRatingLabel": "Falls ja: Wie beurteilen Sie die Vorbereitungsunterlagen (z.B. eLearning)?",
"noFeedbacks": "Es wurden noch keine Feedbacks abgegeben",
"proficiencyLabel": "Wie beurteilen Sie Ihre Sicherheit bezüglichen den Themen nach dem Kurs?",
"questionTitle": "Frage",
"receivedMaterialsLabel": "Haben Sie Vorbereitungsunterlagen (z.B. eLearning) erhalten?",
"recommendLabel": "Würden Sie den Kurs weiterempfehlen?",
"satisfactionLabel": "Zufriedenheit insgesamt",
"sendFeedback": "Feedback abschicken",
"sentByUsers": "Von {count} Teilnehmern ausgefüllt",
"showDetails": "Details anzeigen",
"unhappy": "Unzufrieden",
"veryHappy": "Sehr zufrieden",
"veryUnhappy": "Sehr unzufrieden"
},
"footer": {
"contact": "Kontakt",
"dataProtection": "Datenschutzbestimmungen",
"faq": "FAQ",
"imprint": "Impressum"
},
"general": {
"nextStep": "Weiter geht's",
"start": "Los geht's",
"backToLearningPath": "zurück zum Lernpfad",
"backToCircle": "zurück zum Circle",
"next": "Weiter",
"back": "zurück",
"backCapitalized": "@.capitalize:general.back",
"save": "Speichern",
"send": "Senden",
"learningUnit": "Lerneinheit",
"learningPath": "Lernpfad",
"learningSequence": "Lernsequenz",
"show": "Anschauen",
"backToCircle": "zurück zum Circle",
"backToLearningPath": "zurück zum Lernpfad",
"certificate": "Zertifikat | Zertifikate",
"circles": "Circles",
"transferTask": "Transferauftrag | Transferaufträge",
"feedback": "Feedback | Feedbacks",
"exam": "Prüfung | Prüfungen",
"examResult": "Prüfungsresultat | Prüfungsresultate",
"certificate": "Zertifikat | Zertifikate",
"feedback": "Feedback | Feedbacks",
"learningPath": "Lernpfad",
"learningSequence": "Lernsequenz",
"learningUnit": "Lerneinheit",
"next": "Weiter",
"nextStep": "Weiter geht's",
"no": "Nein",
"notification": "Benachrichtigung | Benachrichtigungen",
"profileLink": "Profil anzeigen",
"save": "Speichern",
"send": "Senden",
"settings": "Kontoeinstellungen",
"shop": "Shop",
"yes": "Ja",
"no": "Nein",
"show": "Anschauen",
"showAll": "Alle anschauen",
"settings": "Kontoeinstellungen"
"start": "Los geht's",
"transferTask": "Transferauftrag | Transferaufträge",
"yes": "Ja"
},
"learningContent": {
"completeAndContinue": "Als erledigt markieren"
},
"learningPathPage": {
"nextStep": "Nächster Schritt",
"showListView": "Listenansicht anzeigen",
"welcomeBack": "Willkommen zurück, {name}"
},
"mainNavigation": {
"logout": "Abmelden",
"profile": "Profil"
},
"dashboard": {
"welcome": "Willkommen, {name}"
},
"learningPathPage": {
"welcomeBack": "Willkommen zurück, {name}",
"showListView": "Listenansicht anzeigen",
"nextStep": "Nächster Schritt"
},
"circlePage": {
"duration": "Dauer",
"circleContentBoxTitle": "Das lernst du in diesem Circle.",
"gotQuestions": "Hast du Fragen?",
"contactExpertButton": "Fachexpertin kontaktieren",
"contactExpertDescription": "Tausche dich mit der Fachexpertin für den Circle {circleName} aus.",
"learnMore": "Erfahre mehr dazu",
"documents": {
"title": "Unterlagen",
"expertDescription": "Stelle deinen Lernenden zusätzliche Inhalte zur Verfügung.",
"userDescription": "Hier findest du die Unterlagen, die dir die Fachexpertin zur Verfügung gestellt hat.",
"action": "Unterlagen hochladen",
"modalAction": "Datei auswählen",
"fileLabel": "Datei",
"modalFileName": "Name",
"modalNameInformation": "Max. 70 Zeichen",
"chooseSequence": "Wähle eine Lernsequenz aus",
"selectFile": "Bitte wähle eine Datei aus",
"chooseName": "Bitte wähle einen Namen",
"chooseLearningSequence": "Bitte wähle eine Lernsequenz aus",
"uploadErrorMessage": "Beim Hochladen ist ein Fehler aufgetreten. Bitte versuche es erneut.",
"maxFileSize": "Maximale Dateigrösse: 20 MB"
}
},
"learningContent": {
"completeAndContinue": "Als erledigt markieren"
},
"selfEvaluation": {
"selfEvaluation": "Selbsteinschätzung",
"title": "@:selfEvaluation.selfEvaluation {title}",
"steps": "Schritt {current} von {max}",
"instruction": [
"Überprüfe, ob du in der Lernheinheit",
"alles verstanden hast.",
"Lies die folgende Aussage und bewerte sie:"
],
"yes": "Ja, ich kann das",
"no": "Das muss ich nochmals anschauen",
"progressText": "Schau dein Fortschritt in deinem KompetenzNavi:",
"progressLink": "KompetenzNavi öffnen",
"selfEvaluationYes": "@:selfEvaluation: Ich kann das.",
"selfEvaluationNo": "@:selfEvaluation: Muss ich nochmals anschauen."
},
"competences": {
"competences": "Kompetenzen",
"title": "KompetenzNavi",
"lastImprovements": "Letzte verbesserte Kompetenzen",
"assessment": "Einschätzungen",
"notAssessed": "Nicht eingeschätzt",
"assessAgain": "Sich nochmals einschätzen"
},
"mediaLibrary": {
"title": "Mediathek",
"learningMedia": {
"titel": "Lernmedien",
"description": "Finde eine vollständige Liste der Bücher und anderen Medien, auf die im Kurs verwiesen wird."
},
"handlungsfelder": {
"title": "Handlungsfeld | Handlungsfelder",
"description": "Finde alle Ressourcen der Handlungsfelder wie Lernmedien, Links und andere nützliche Informationen."
}
"description": "Finde alle Ressourcen der Handlungsfelder wie Lernmedien, Links und andere nützliche Informationen.",
"title": "Handlungsfeld | Handlungsfelder"
},
"footer": {
"dataProtection": "Datenschutzbestimmungen",
"imprint": "Impressum",
"contact": "Kontakt",
"faq": "FAQ"
"learningMedia": {
"description": "Finde eine vollständige Liste der Bücher und anderen Medien, auf die im Kurs verwiesen wird.",
"titel": "Lernmedien"
},
"cockpit": {
"title": "Cockpit",
"tasksDone": "Erledigte Transferaufträge von Teilnehmer.",
"feedbacksDone": "Abgeschickte Feedbacks von Teilnehmer.",
"examsDone": "Abgelegte Prüfungen von Teilnehmer.",
"progress": "Fortschritt",
"profileLink": "Profil anzeigen",
"notifyTaskDescription": "Teilnehmer benachrichtigen",
"notifyTask": "Benachrichtigen"
"title": "Mediathek"
},
"messages": {
"sendMessage": "Nachricht schreiben"
},
"feedback": {
"intro": "{name}, dein/e Trainer/-in, bittet dich, ihm/ihr Feedback zu geben. Das ist freiwillig, würde aber ihm/ihr helfen, deine Lernerlebniss zu verbessern.",
"areYouSatisfied": "Wie zufrieden bist du?",
"recommendLabel": "Würden Sie den Kurs weiterempfehlen?",
"satisfactionLabel": "Zufriedenheit insgesamt",
"goalAttainmentLabel": "Zielerreichung insgesamt",
"proficiencyLabel": "Wie beurteilen Sie Ihre Sicherheit bezüglichen den Themen nach dem Kurs?",
"receivedMaterialsLabel": "Haben Sie Vorbereitungsunterlagen (z.B. eLearning) erhalten?",
"materialsRatingLabel": "Falls ja: Wie beurteilen Sie die Vorbereitungsunterlagen (z.B. eLearning)?",
"instructorCompetenceLabel": "Der Kursleiter war themenstark, fachkompetent.",
"instructorRespectLabel": "Fragen und Anregungen der Kursteilnehmenden wurden ernst genommen und aufgegriffen.",
"instructorOpenFeedbackLabel": "Was ich dem Kursleiter sonst noch sagen wollte:",
"courseNegativeFeedbackLabel": "Wo sehen Sie Verbesserungspotenzial?",
"coursePositiveFeedbackLabel": "Was hat Ihnen besonders gut gefallen?",
"completionTitle": "Schicke dein Feedback an {name}",
"completionDescription": "Dein Feedback ist anonym. Dein Vor- und Nachname werden bei deiner Trainer/-in nicht angezeigt.",
"sendFeedback": "Feedback abschicken",
"feedbackSent": "Dein Feedback wurde abgeschickt",
"circleFeedback": "Feedback zum Circle",
"showDetails": "Details anzeigen",
"sentByUsers": "Von {count} Teilnehmern ausgefüllt",
"feedbackPageTitle": "Feedback zum Lehrgang",
"feedbackPageInfo": "Teilnehmer haben das Feedback ausgefüllt",
"questionTitle": "Frage",
"veryUnhappy": "Sehr unzufrieden",
"unhappy": "Unzufrieden",
"happy": "Zufrieden",
"veryHappy": "Sehr zufrieden",
"average": "Durchschnitt",
"answers": "Antworten",
"noFeedbacks": "Es wurden noch keine Feedbacks abgegeben"
},
"notifications": {
"load_more": "Mehr laden",
"no_notifications": "Du hast derzeit keine Benachrichtigungen"
},
"selfEvaluation": {
"instruction": [
"Überprüfe, ob du in der Lernheinheit",
"alles verstanden hast.",
"Lies die folgende Aussage und bewerte sie:"
],
"no": "Das muss ich nochmals anschauen",
"progressLink": "KompetenzNavi öffnen",
"progressText": "Schau dein Fortschritt in deinem KompetenzNavi:",
"selfEvaluation": "Selbsteinschätzung",
"selfEvaluationNo": "@:selfEvaluation: Muss ich nochmals anschauen.",
"selfEvaluationYes": "@:selfEvaluation: Ich kann das.",
"steps": "Schritt {current} von {max}",
"title": "@:selfEvaluation.selfEvaluation {title}",
"yes": "Ja, ich kann das"
},
"settings": {
"emailNotifications": "Email Benachrichtigungen"
},
"constants": {
"yes": "Ja",
"no": "Nein",
"verySatisfied": "sehr zufrieden",
"satisfied": "zufrieden",
"unsatisfied": "unzufrieden",
"veryUnsatisfied": "sehr unzufrieden"
}
}

View File

@ -1,159 +1,170 @@
{
"general": {
"nextStep": "Prochaine étape",
"start": "Commencer",
"backToLearningPath": "zurück zum Lernpfad",
"backToCircle": "zurück zum Circle",
"next": "Weiter",
"back": "zurück",
"backCapitalized": "@.capitalize:general.back",
"save": "Speichern",
"learningUnit": "Lerneinheit",
"learningPath": "Lernpfad",
"learningSequence": "Lernsequenz",
"show": "Anschauen",
"circles": "Circles",
"transferTask": "Transferauftrag | Transferaufträge",
"feedback": "Feedback | Feedbacks",
"exam": "Prüfung | Prüfungen",
"examResult": "Prüfungsresultat | Prüfungsresultate",
"certificate": "Zertifikat | Zertifikate",
"notification": "Benachrichtigung | Benachrichtigungen",
"profileLink": "Profil anzeigen",
"shop": "Shop",
"yes": "Ja",
"no": "Nein"
"circlePage": {
"circleContentBoxTitle": "Das lernst du in diesem Circle.",
"contactExpertButton": "Fachexpertin kontaktieren",
"contactExpertDescription": "Tausche dich mit der Fachexpertin für den Circle {circleName} aus.",
"documents": {
"action": "Unterlagen hochladen",
"chooseLearningSequence": "Bitte wähle eine Lernsequenz aus",
"chooseName": "Bitte wähle einen Namen",
"chooseSequence": "Wähle eine Lernsequenz aus",
"expertDescription": "Stelle deinen Lernenden zusätzliche Inhalte zur Verfügung.",
"fileLabel": "Datei",
"maxFileSize": "Maximale Dateigrösse: 20 MB",
"modalAction": "Datei auswählen",
"modalFileName": "Name",
"modalNameInformation": "Max. 70 Zeichen",
"selectFile": "Bitte wähle eine Datei aus",
"title": "Unterlagen",
"uploadErrorMessage": "Beim Hochladen ist ein Fehler aufgetreten. Bitte versuche es erneut.",
"userDescription": "Hier findest du die Unterlagen, die dir die Fachexpertin zur Verfügung gestellt hat."
},
"mainNavigation": {
"logout": "Abmelden",
"settings": "Kontoeinstellungen"
"duration": "Dauer",
"gotQuestions": "Hast du Fragen?",
"learnMore": "Erfahre mehr dazu"
},
"cockpit": {
"examsDone": "Abgelegte Prüfungen von Teilnehmer.",
"feedbacksDone": "Abgeschickte Feedbacks von Teilnehmer.",
"profileLink": "Profil anzeigen",
"progress": "Fortschritt",
"tasksDone": "Erledigte Transferaufträge von Teilnehmer.",
"title": "Cockpit"
},
"competences": {
"assessAgain": "Sich nochmals einschätzen",
"assessment": "Einschätzungen",
"competences": "Kompetenzen",
"lastImprovements": "Letzte verbesserte Kompetenzen",
"notAssessed": "Nicht eingeschätzt",
"showAll": "Alle anschauen",
"title": "KompetenzNavi"
},
"constants": {
"no": "Nein",
"satisfied": "zufrieden",
"unsatisfied": "unzufrieden",
"verySatisfied": "sehr zufrieden",
"veryUnsatisfied": "sehr unzufrieden",
"yes": "Ja"
},
"dashboard": {
"welcome": "Willkommen, {name}"
},
"learningPathPage": {
"welcomeBack": "Willkommen zurück, {name}",
"showListView": "Listenansicht anzeigen",
"nextStep": "Nächster Schritt"
"feedback": {
"answers": "Antworten",
"areYouSatisfied": "Wie zufrieden bist du?",
"average": "Durchschnitt",
"circleFeedback": "Feedback zum Circle",
"completionDescription": "Dein Feedback ist anonym. Dein Vor- und Nachname werden bei deiner Trainer/-in nicht angezeigt.",
"completionTitle": "Schicke dein Feedback an {name}",
"courseNegativeFeedbackLabel": "Wo sehen Sie Verbesserungspotenzial?",
"coursePositiveFeedbackLabel": "Was hat Ihnen besonders gut gefallen?",
"feedbackPageInfo": "Teilnehmer haben das Feedback ausgefüllt",
"feedbackPageTitle": "Feedback zum Lehrgang",
"feedbackSent": "Dein Feedback wurde abgeschickt",
"goalAttainmentLabel": "Zielerreichung insgesamt",
"happy": "Zufrieden",
"instructorCompetenceLabel": "Der Kursleiter war themenstark, fachkompetent.",
"instructorOpenFeedbackLabel": "Was ich dem Kursleiter sonst noch sagen wollte:",
"instructorRespectLabel": "Fragen und Anregungen der Kursteilnehmenden wurden ernst genommen und aufgegriffen.",
"intro": "{name}, dein/e Trainer/-in, bittet dich, ihm/ihr Feedback zu geben. Das ist freiwillig, würde aber ihm/ihr helfen, deine Lernerlebniss zu verbessern.",
"materialsRatingLabel": "Falls ja: Wie beurteilen Sie die Vorbereitungsunterlagen (z.B. eLearning)?",
"noFeedbacks": "Es wurden noch keine Feedbacks abgegeben",
"proficiencyLabel": "Wie beurteilen Sie Ihre Sicherheit bezüglichen den Themen nach dem Kurs?",
"questionTitle": "Frage",
"receivedMaterialsLabel": "Haben Sie Vorbereitungsunterlagen (z.B. eLearning) erhalten?",
"recommendLabel": "Würden Sie den Kurs weiterempfehlen?",
"satisfactionLabel": "Zufriedenheit insgesamt",
"sendFeedback": "Feedback abschicken",
"sentByUsers": "Von {count} Teilnehmern ausgefüllt",
"showDetails": "Details anzeigen",
"unhappy": "Unzufrieden",
"veryHappy": "Sehr zufrieden",
"veryUnhappy": "Sehr unzufrieden"
},
"circlePage": {
"duration": "Dauer",
"circleContentBoxTitle": "Das lernst du in diesem Circle.",
"gotQuestions": "Hast du Fragen?",
"contactExpertButton": "Fachexpertin kontaktieren",
"contactExpertDescription": "Tausche dich mit der Fachexpertin für den Circle {circleName} aus.",
"learnMore": "Erfahre mehr dazu",
"documents": {
"title": "Unterlagen",
"expertDescription": "Stelle deinen Lernenden zusätzliche Inhalte zur Verfügung.",
"userDescription": "Hier findest du die Unterlagen, die dir die Fachexpertin zur Verfügung gestellt hat.",
"action": "Unterlagen hochladen",
"modalAction": "Datei auswählen",
"fileLabel": "Datei",
"modalFileName": "Name",
"modalNameInformation": "Max. 70 Zeichen",
"chooseSequence": "Wähle eine Lernsequenz aus",
"selectFile": "Bitte wähle eine Datei aus",
"chooseName": "Bitte wähle einen Namen",
"chooseLearningSequence": "Bitte wähle eine Lernsequenz aus",
"uploadErrorMessage": "Beim Hochladen ist ein Fehler aufgetreten. Bitte versuche es erneut.",
"maxFileSize": "Maximale Dateigrösse: 20 MB"
}
"footer": {
"contact": "Kontakt",
"dataProtection": "Datenschutzbestimmungen",
"faq": "FAQ",
"imprint": "Impressum"
},
"general": {
"back": "zurück",
"backCapitalized": "@.capitalize:general.back",
"backToCircle": "zurück zum Circle",
"backToLearningPath": "zurück zum Lernpfad",
"certificate": "Zertifikat | Zertifikate",
"circles": "Circles",
"exam": "Prüfung | Prüfungen",
"examResult": "Prüfungsresultat | Prüfungsresultate",
"feedback": "Feedback | Feedbacks",
"hello": "",
"learningPath": "Lernpfad",
"learningSequence": "Lernsequenz",
"learningUnit": "Lerneinheit",
"next": "Weiter",
"nextStep": "Prochaine étape",
"no": "Nein",
"notification": "Benachrichtigung | Benachrichtigungen",
"profileLink": "Profil anzeigen",
"save": "Speichern",
"settings": "",
"shop": "Shop",
"show": "Anschauen",
"showAll": "",
"start": "Commencer",
"transferTask": "Transferauftrag | Transferaufträge",
"yes": "Ja"
},
"learningContent": {
"completeAndContinue": "Als erledigt markieren"
},
"learningPathPage": {
"nextStep": "Nächster Schritt",
"showListView": "Listenansicht anzeigen",
"welcomeBack": "Willkommen zurück, {name}"
},
"mainNavigation": {
"logout": "Abmelden",
"profile": "",
"settings": "Kontoeinstellungen"
},
"mediaLibrary": {
"handlungsfelder": {
"description": "Finde alle Ressourcen der Handlungsfelder wie Lernmedien, Links und andere nützliche Informationen.",
"title": "Handlungsfeld | Handlungsfelder"
},
"learningMedia": {
"description": "Finde eine vollständige Liste der Bücher und anderen Medien, auf die im Kurs verwiesen wird.",
"titel": "Lernmedien"
},
"title": "Mediathek"
},
"messages": {
"sendMessage": "Nachricht schreiben"
},
"notifications": {
"load_more": "",
"no_notifications": ""
},
"selfEvaluation": {
"selfEvaluation": "Selbsteinschätzung",
"title": "@:selfEvaluation.selfEvaluation {title}",
"steps": "Schritt {current} von {max}",
"instruction": [
"Überprüfe, ob du in der Lernheinheit",
"alles verstanden hast.",
"Lies die folgende Aussage und bewerte sie:"
],
"yes": "Ja, ich kann das",
"no": "Das muss ich nochmals anschauen",
"progressText": "Schau dein Fortschritt in deinem KompetenzNavi:",
"progressLink": "KompetenzNavi öffnen",
"progressText": "Schau dein Fortschritt in deinem KompetenzNavi:",
"selfEvaluation": "Selbsteinschätzung",
"selfEvaluationNo": "@:selfEvaluation: Muss ich nochmals anschauen.",
"selfEvaluationYes": "@:selfEvaluation: Ich kann das.",
"selfEvaluationNo": "@:selfEvaluation: Muss ich nochmals anschauen."
"steps": "Schritt {current} von {max}",
"title": "@:selfEvaluation.selfEvaluation {title}",
"yes": "Ja, ich kann das"
},
"competences": {
"competences": "Kompetenzen",
"title": "KompetenzNavi",
"lastImprovements": "Letzte verbesserte Kompetenzen",
"showAll": "Alle anschauen",
"assessment": "Einschätzungen",
"notAssessed": "Nicht eingeschätzt",
"assessAgain": "Sich nochmals einschätzen"
},
"mediaLibrary": {
"title": "Mediathek",
"learningMedia": {
"titel": "Lernmedien",
"description": "Finde eine vollständige Liste der Bücher und anderen Medien, auf die im Kurs verwiesen wird."
},
"handlungsfelder": {
"title": "Handlungsfeld | Handlungsfelder",
"description": "Finde alle Ressourcen der Handlungsfelder wie Lernmedien, Links und andere nützliche Informationen."
}
},
"footer": {
"dataProtection": "Datenschutzbestimmungen",
"imprint": "Impressum",
"contact": "Kontakt",
"faq": "FAQ"
},
"cockpit": {
"title": "Cockpit",
"tasksDone": "Erledigte Transferaufträge von Teilnehmer.",
"feedbacksDone": "Abgeschickte Feedbacks von Teilnehmer.",
"examsDone": "Abgelegte Prüfungen von Teilnehmer.",
"progress": "Fortschritt",
"profileLink": "Profil anzeigen"
},
"messages": {
"sendMessage": "Nachricht schreiben"
},
"feedback": {
"intro": "{name}, dein/e Trainer/-in, bittet dich, ihm/ihr Feedback zu geben. Das ist freiwillig, würde aber ihm/ihr helfen, deine Lernerlebniss zu verbessern.",
"areYouSatisfied": "Wie zufrieden bist du?",
"recommendLabel": "Würden Sie den Kurs weiterempfehlen?",
"satisfactionLabel": "Zufriedenheit insgesamt",
"goalAttainmentLabel": "Zielerreichung insgesamt",
"proficiencyLabel": "Wie beurteilen Sie Ihre Sicherheit bezüglichen den Themen nach dem Kurs?",
"receivedMaterialsLabel": "Haben Sie Vorbereitungsunterlagen (z.B. eLearning) erhalten?",
"materialsRatingLabel": "Falls ja: Wie beurteilen Sie die Vorbereitungsunterlagen (z.B. eLearning)?",
"instructorCompetenceLabel": "Der Kursleiter war themenstark, fachkompetent.",
"instructorRespectLabel": "Fragen und Anregungen der Kursteilnehmenden wurden ernst genommen und aufgegriffen.",
"instructorOpenFeedbackLabel": "Was ich dem Kursleiter sonst noch sagen wollte:",
"courseNegativeFeedbackLabel": "Wo sehen Sie Verbesserungspotenzial?",
"coursePositiveFeedbackLabel": "Was hat Ihnen besonders gut gefallen?",
"completionTitle": "Schicke dein Feedback an {name}",
"completionDescription": "Dein Feedback ist anonym. Dein Vor- und Nachname werden bei deiner Trainer/-in nicht angezeigt.",
"sendFeedback": "Feedback abschicken",
"feedbackSent": "Dein Feedback wurde abgeschickt",
"circleFeedback": "Feedback zum Circle",
"showDetails": "Details anzeigen",
"sentByUsers": "Von {count} Teilnehmern ausgefüllt",
"feedbackPageTitle": "Feedback zum Lehrgang",
"feedbackPageInfo": "Teilnehmer haben das Feedback ausgefüllt",
"questionTitle": "Frage",
"veryUnhappy": "Sehr unzufrieden",
"unhappy": "Unzufrieden",
"happy": "Zufrieden",
"veryHappy": "Sehr zufrieden",
"average": "Durchschnitt",
"answers": "Antworten",
"noFeedbacks": "Es wurden noch keine Feedbacks abgegeben"
},
"constants": {
"yes": "Ja",
"no": "Nein",
"verySatisfied": "sehr zufrieden",
"satisfied": "zufrieden",
"unsatisfied": "unzufrieden",
"veryUnsatisfied": "sehr unzufrieden"
"settings": {
"emailNotifications": ""
}
}

View File

@ -1,15 +1,15 @@
{
"extends": "@vue/tsconfig/tsconfig.web.json",
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
"exclude": ["src/**/__tests__/*"],
"compilerOptions": {
"lib": ["ES2021", "DOM", "DOM.Iterable"],
"composite": true,
"strict": true,
"allowJs": true,
"baseUrl": ".",
"composite": true,
"lib": ["ES2021", "DOM", "DOM.Iterable"],
"paths": {
"@/*": ["./src/*"]
}
}
},
"strict": true
},
"exclude": ["src/**/__tests__/*"],
"extends": "@vue/tsconfig/tsconfig.web.json",
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"]
}

View File

@ -1,8 +1,8 @@
{
"extends": "@vue/tsconfig/tsconfig.node.json",
"include": ["vite.config.*"],
"compilerOptions": {
"composite": true,
"types": ["node", "vitest"]
}
},
"extends": "@vue/tsconfig/tsconfig.node.json",
"include": ["vite.config.*"]
}

View File

@ -1,9 +1,9 @@
{
"extends": "./tsconfig.app.json",
"exclude": [],
"compilerOptions": {
"composite": true,
"lib": [],
"types": ["node", "jsdom", "vitest/globals"]
}
},
"exclude": [],
"extends": "./tsconfig.app.json"
}

View File

@ -0,0 +1,12 @@
// eslint-disable-next-line
module.exports = {
vueFiles: "./src/**/*.?(js|vue)",
languageFiles: "./src/locales/*.json",
exclude: ["translation_key_1", "translation_key_2"],
output: false,
add: false,
remove: false,
ci: false,
separator: ".",
noEmptyTranslation: "",
};

View File

@ -6,7 +6,8 @@
"test": "echo \"Error: no test specified\" && exit 1",
"cypress:open": "cypress open",
"cypress:ci": "currents run --parallel --record --key $CURRENTS_KEY",
"prettier": "npm run prettier --prefix client"
"prettier": "npm run prettier --prefix client",
"vue-i18n-extract": "npm run vue-i18n-extract --prefix client"
},
"devDependencies": {
"@currents/cli": "^3.1.3",