Compare commits

..

26 Commits

Author SHA1 Message Date
f7fc1967a5 🚀RELEASE v0.10.0
All checks were successful
continuous-integration/drone/push Build is passing
2021-03-26 20:07:14 +01:00
aedb8a765b new license file version [CI SKIP] 2021-03-26 19:06:59 +00:00
cf58bd15c3 Bumped lfk-client version 🔝
All checks were successful
continuous-integration/drone/push Build is passing
2021-03-26 20:05:26 +01:00
34f4f68524 new license file version [CI SKIP] 2021-03-26 19:04:28 +00:00
09b8144080 Merge pull request 'Implemented password strength test feature/106-password_strength' (#115) from feature/106-password_strength into dev
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #115
2021-03-26 19:03:03 +00:00
f1e6fb4ce7 Merge branch 'dev' into feature/106-password_strength 2021-03-26 19:59:47 +01:00
2ca63fd1f6 🚀RELEASE v0.9.1
All checks were successful
continuous-integration/drone/push Build is passing
2021-03-26 19:59:29 +01:00
a5d25e7d92 Merge pull request 'Org selfservice Link feature/112-org_registration_links' (#114) from feature/112-org_registration_links into dev
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #114
2021-03-26 18:58:34 +00:00
4167819e7a Formatting🛠
ref #106
2021-03-26 19:52:31 +01:00
5bd3a463f0 Sorted translations 🌍
ref #106
2021-03-26 19:51:57 +01:00
79c447b4c6 Added translations
ref #106
2021-03-26 19:51:27 +01:00
540304f947 User creation can now only be triggered if pw is strong enoug
ref #106
2021-03-26 19:48:42 +01:00
75d8f7331b Reset can now only be triggered if pw is strong enoug
ref #106
2021-03-26 19:47:26 +01:00
b2509e9e53 Module now exports functions that check if a password is strong enough and equal to a potential confirmation field
ref #106
2021-03-26 19:45:53 +01:00
7862f44653 Now using pw strength component for user creation
ref #106
2021-03-26 19:31:21 +01:00
962dd0c1bb Added missing exports
ref #106
2021-03-26 19:29:47 +01:00
5d5f7c7f5c Now using pw strength component for reset
ref #106
2021-03-26 19:29:37 +01:00
6aaf838451 Now using pw strength component
ref #106
2021-03-26 19:29:25 +01:00
ad3bd312e9 Added a password strength verification
ref #106
2021-03-26 19:26:26 +01:00
5fa9939696 Added more cirteria to the password strength component
ref #106
2021-03-26 19:02:09 +01:00
4956bb0e9c Implemented a custom password strength component
ref #106
2021-03-26 18:47:24 +01:00
c074c12be7 Sorted translations
ref #112
2021-03-26 18:11:49 +01:00
ddbc293e9c Added translations
ref #112
2021-03-26 18:11:23 +01:00
a3921b45c7 Copy now 100% worX
ref #112
2021-03-26 18:11:10 +01:00
38e1c8c5a1 Merge branch 'feature/112-org_registration_links' of git.odit.services:lfk/frontend into feature/112-org_registration_links 2021-03-26 18:04:08 +01:00
c2d29ff233 Added check if key exists
ref #112
2021-03-26 18:04:05 +01:00
12 changed files with 1027 additions and 898 deletions

View File

@@ -2,8 +2,49 @@
All notable changes to this project will be documented in this file. Dates are displayed in UTC. All notable changes to this project will be documented in this file. Dates are displayed in UTC.
#### [0.10.0](https://git.odit.services/lfk/frontend/compare/0.9.1...0.10.0)
- Added translations [`79c447b`](https://git.odit.services/lfk/frontend/commit/79c447b4c65e55ebb5af71fb0b09174c36e2cecf)
- Sorted translations 🌍 [`5bd3a46`](https://git.odit.services/lfk/frontend/commit/5bd3a463f00abaf2c98ab554f88e5542d01f364a)
- Reset can now only be triggered if pw is strong enoug [`75d8f73`](https://git.odit.services/lfk/frontend/commit/75d8f7331b6ae78f3979bb62148188a16f83cb8d)
- Module now exports functions that check if a password is strong enough and equal to a potential confirmation field [`b2509e9`](https://git.odit.services/lfk/frontend/commit/b2509e9e53ab6b51dfd55e26712e8928160cd64b)
- Added more cirteria to the password strength component [`5fa9939`](https://git.odit.services/lfk/frontend/commit/5fa9939696a35d60d762feb0cebef61d31869218)
- Now using pw strength component [`6aaf838`](https://git.odit.services/lfk/frontend/commit/6aaf8384512185a3a319ce6b3e2505e910468e64)
- Added a password strength verification [`ad3bd31`](https://git.odit.services/lfk/frontend/commit/ad3bd312e9a5785f81029ea2b7e302ea1addd988)
- Implemented a custom password strength component [`4956bb0`](https://git.odit.services/lfk/frontend/commit/4956bb0e9c3c1d22d60e849aea5664e35330f897)
- User creation can now only be triggered if pw is strong enoug [`540304f`](https://git.odit.services/lfk/frontend/commit/540304f947f60a7072c592ca8088996ce7e95cb4)
- Now using pw strength component for user creation [`7862f44`](https://git.odit.services/lfk/frontend/commit/7862f446532903f1a2eac7b21d5c80c3245785e5)
- Added missing exports [`962dd0c`](https://git.odit.services/lfk/frontend/commit/962dd0c1bbc0df7f20bcec5b4247188c8935c87e)
- new license file version [CI SKIP] [`aedb8a7`](https://git.odit.services/lfk/frontend/commit/aedb8a765ba053545adbba9eb014b3bb0e5aac8c)
- Bumped lfk-client version 🔝 [`cf58bd1`](https://git.odit.services/lfk/frontend/commit/cf58bd15c3541c417ab2be83d96135e931a2b6f6)
- new license file version [CI SKIP] [`34f4f68`](https://git.odit.services/lfk/frontend/commit/34f4f68524918fd3d1963966a1e259d5b60efaca)
- Merge pull request 'Implemented password strength test feature/106-password_strength' (#115) from feature/106-password_strength into dev [`09b8144`](https://git.odit.services/lfk/frontend/commit/09b81440804cf98303fcb723a9717d6d0f432da8)
- Formatting🛠 [`4167819`](https://git.odit.services/lfk/frontend/commit/4167819e7a864d3b1dd95ba48ab1525a454f7f30)
- Now using pw strength component for reset [`5d5f7c7`](https://git.odit.services/lfk/frontend/commit/5d5f7c7f5c6a69146f41996f4facfeff95791be0)
#### [0.9.1](https://git.odit.services/lfk/frontend/compare/0.9.0...0.9.1)
> 26 March 2021
- 🚀RELEASE v0.9.1 [`2ca63fd`](https://git.odit.services/lfk/frontend/commit/2ca63fd1f675f0da2b18ba43095074dd4823991d)
- Merge pull request 'Org selfservice Link feature/112-org_registration_links' (#114) from feature/112-org_registration_links into dev [`a5d25e7`](https://git.odit.services/lfk/frontend/commit/a5d25e7d92c7c37e90dbb4ba74b787873f920c6b)
- Added checkbox to enable registration [`f9fe793`](https://git.odit.services/lfk/frontend/commit/f9fe79357317653b46c09eb95b0db13845cddcf9)
- Sorted translations [`c074c12`](https://git.odit.services/lfk/frontend/commit/c074c12be75f285612f7a732c106404d9fb4538a)
- You can now copy the selfservice links to your clipboard [`fcd55f8`](https://git.odit.services/lfk/frontend/commit/fcd55f89d72e6ceb9bb2bdd194cc3420145d6d0d)
- Formatting [`f185d55`](https://git.odit.services/lfk/frontend/commit/f185d559c0d6476f2f2b9ea74aaad3297411801d)
- Copy now 100% worX [`a3921b4`](https://git.odit.services/lfk/frontend/commit/a3921b45c70b410293db593a75d2fdd34c131733)
- Fixed changes in wrong file [`73d95bc`](https://git.odit.services/lfk/frontend/commit/73d95bc0042f8f586ba2f2345342e25da1d280c2)
- Added check if key exists [`c2d29ff`](https://git.odit.services/lfk/frontend/commit/c2d29ff233f6b3e9dd2555b7e0b845592da2ba35)
- Added check if key exists [`2316baa`](https://git.odit.services/lfk/frontend/commit/2316baa8984832382be9f3b4549ca62cf9ccb5a3)
- Added translations [`ddbc293`](https://git.odit.services/lfk/frontend/commit/ddbc293e9ca0525910bf3d995de970ee2c35c56a)
- new license file version [CI SKIP] [`ded9b58`](https://git.odit.services/lfk/frontend/commit/ded9b589fe087915176c5b54f3c55e412541bc8f)
- Merge pull request 'first merge to main 🚀' (#71) from dev into main [`9aa8e7e`](https://git.odit.services/lfk/frontend/commit/9aa8e7edffa7e51b00a5ab7a8f16828b7a469181)
#### [0.9.0](https://git.odit.services/lfk/frontend/compare/0.8.7...0.9.0) #### [0.9.0](https://git.odit.services/lfk/frontend/compare/0.8.7...0.9.0)
> 26 March 2021
- 🚀RELEASE v0.9.0 [`67c3732`](https://git.odit.services/lfk/frontend/commit/67c3732fad5a7c64ae11dcbebaaa095e1a2b387c)
- Merge pull request 'Runner cards feature/94-runnercard_mgnt' (#111) from feature/94-runnercard_mgnt into dev [`2932f45`](https://git.odit.services/lfk/frontend/commit/2932f4591e62187a4903511051d110e9679c0993) - Merge pull request 'Runner cards feature/94-runnercard_mgnt' (#111) from feature/94-runnercard_mgnt into dev [`2932f45`](https://git.odit.services/lfk/frontend/commit/2932f4591e62187a4903511051d110e9679c0993)
- Sorted translations 🌍 [`1665a1a`](https://git.odit.services/lfk/frontend/commit/1665a1a093862a13be78ec65dcdf64eb7d855593) - Sorted translations 🌍 [`1665a1a`](https://git.odit.services/lfk/frontend/commit/1665a1a093862a13be78ec65dcdf64eb7d855593)
- Added translations [`6b5945a`](https://git.odit.services/lfk/frontend/commit/6b5945add86a77630c500872545bb91724b2047f) - Added translations [`6b5945a`](https://git.odit.services/lfk/frontend/commit/6b5945add86a77630c500872545bb91724b2047f)

View File

@@ -14,7 +14,7 @@
</head> </head>
<body> <body>
<span style="display: none;visibility: hidden;" id="buildinfo">RELEASE_INFO-0.9.0-RELEASE_INFO</span> <span style="display: none;visibility: hidden;" id="buildinfo">RELEASE_INFO-0.10.0-RELEASE_INFO</span>
<noscript>You need to enable JavaScript to run this app.</noscript> <noscript>You need to enable JavaScript to run this app.</noscript>
<script src="/env.js"></script> <script src="/env.js"></script>
<script defer type="module" src="/_dist_/index.js"></script> <script defer type="module" src="/_dist_/index.js"></script>

View File

@@ -1,6 +1,6 @@
{ {
"name": "@odit/lfk-frontend", "name": "@odit/lfk-frontend",
"version": "0.9.0", "version": "0.10.0",
"scripts": { "scripts": {
"i18n-order": "node order.js", "i18n-order": "node order.js",
"dev:all": "yarn prebuild && snowpack dev", "dev:all": "yarn prebuild && snowpack dev",
@@ -13,7 +13,8 @@
}, },
"license": "CC-BY-NC-SA-4.0", "license": "CC-BY-NC-SA-4.0",
"dependencies": { "dependencies": {
"@odit/lfk-client-js": "0.7.0", "@odit/lfk-client-js": "0.8.0",
"check-password-strength": "^2.0.2",
"csvtojson": "^2.0.10", "csvtojson": "^2.0.10",
"gridjs": "3.3.0", "gridjs": "3.3.0",
"localforage": "1.9.0", "localforage": "1.9.0",

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,52 @@
<script context="module">
import { passwordStrength } from "check-password-strength";
export function password_strong_enough(password_change) {
let strength = passwordStrength(password_change);
return (
strength?.contains.includes("lowercase") &&
strength?.contains.includes("uppercase") &&
strength?.contains.includes("number") &&
strength?.length > 9
);
}
export function password_strong_enough_and_equal(
password_change,
password_confirm
) {
return (
password_strong_enough(password_change) &&
password_change === password_confirm
);
}
</script>
<script>
import { getLocaleFromNavigator, _ } from "svelte-i18n";
import { passwordStrength as Strength } from "check-password-strength";
export let password_change;
export let password_confirm;
$: strength = Strength(password_change);
$: passwords_match =
!password_confirm || password_confirm === password_change;
</script>
<div class="ml-4">
<ul class="list-disc font-medium tracking-wide text-red-500 text-xs">
{#if !strength.contains.includes('lowercase')}
<li>{$_('must-contain-a-lowercase-letter')}</li>
{/if}
{#if !strength.contains.includes('uppercase')}
<li>{$_('must-contain-a-uppercase-letter')}</li>
{/if}
{#if !strength.contains.includes('number')}
<li>{$_('must-contain-a-number')}</li>
{/if}
{#if !(strength.length > 9)}
<li>{$_('must-be-at-least-10-characters-long')}</li>
{/if}
{#if !(passwords_match == true)}
<li>{$_('passwords-dont-match')}</li>
{/if}
</ul>
</div>

View File

@@ -1,38 +1,43 @@
<script> <script>
import { AuthService } from "@odit/lfk-client-js"; import { AuthService } from "@odit/lfk-client-js";
import { _ } from "svelte-i18n"; import { _ } from "svelte-i18n";
import Toastify from "toastify-js"; import Toastify from "toastify-js";
import "toastify-js/src/toastify.css"; import "toastify-js/src/toastify.css";
import PasswordStrength, {
password_strong_enough,
} from "../auth/PasswordStrength.svelte";
let state = "reset_in_progress"; let state = "reset_in_progress";
let password = ""; let password = "";
export let params; export let params;
function set_new_password() { function set_new_password() {
if(password.trim() !== ""){ if (password.trim() !== "") {
Toastify({ Toastify({
text: $_('password-reset-in-progress'), text: $_("password-reset-in-progress"),
duration: 3500, duration: 3500,
}).showToast(); }).showToast();
AuthService.authControllerResetPassword(atob(params.resetkey),{ password }) AuthService.authControllerResetPassword(atob(params.resetkey), {
password,
})
.then((resp) => { .then((resp) => {
Toastify({ Toastify({
text: $_('password-reset-successful'), text: $_("password-reset-successful"),
duration: 3500, duration: 3500,
}).showToast(); }).showToast();
state="reset_success"; state = "reset_success";
}) })
.catch((err) => { .catch((err) => {
state="reset_error"; state = "reset_error";
}); });
} else { } else {
Toastify({ Toastify({
text: $_('please-provide-a-password'), text: $_("please-provide-a-password"),
duration: 3500, duration: 3500,
}).showToast(); }).showToast();
} }
} }
</script> </script>
{#if state==="reset_success"} {#if state === 'reset_success'}
<div class="min-h-screen flex items-center justify-center bg-gray-100"> <div class="min-h-screen flex items-center justify-center bg-gray-100">
<div class="max-w-md w-full py-12 px-6"> <div class="max-w-md w-full py-12 px-6">
<img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" /> <img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" />
@@ -56,31 +61,31 @@
</div> </div>
</div> </div>
</div> </div>
{:else if state==="reset_error"} {:else if state === 'reset_error'}
<div class="min-h-screen flex items-center justify-center bg-gray-100"> <div class="min-h-screen flex items-center justify-center bg-gray-100">
<div class="max-w-md w-full py-12 px-6"> <div class="max-w-md w-full py-12 px-6">
<img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" /> <img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" />
<p class="mt-6 text-lg text-center font-bold text-gray-900"> <p class="mt-6 text-lg text-center font-bold text-gray-900">
{$_('application_name')} {$_('application_name')}
</p> </p>
<p class="mt-2 mb-2 text-sm text-center text-gray-900 font-bold"> <p class="mt-2 mb-2 text-sm text-center text-gray-900 font-bold">
{$_('password-reset-failed')} {$_('password-reset-failed')}
</p> </p>
<p class="mt-2 mb-2 text-sm text-center text-gray-900"> <p class="mt-2 mb-2 text-sm text-center text-gray-900">
{$_('please-request-a-new-reset-mail')} {$_('please-request-a-new-reset-mail')}
</p> </p>
<div class="mt-6">
<div class="mt-6"> <div class="mt-6">
<a <div class="mt-6">
href="/forgot_password/" <a
class="text-center relative block w-full py-2 px-3 border border-transparent rounded-md text-white font-semibold bg-gray-800 hover:bg-gray-700 focus:bg-gray-900 focus:outline-none focus:shadow-outline sm:text-sm"> href="/forgot_password/"
{$_('request-a-new-reset-mail')} class="text-center relative block w-full py-2 px-3 border border-transparent rounded-md text-white font-semibold bg-gray-800 hover:bg-gray-700 focus:bg-gray-900 focus:outline-none focus:shadow-outline sm:text-sm">
</a> {$_('request-a-new-reset-mail')}
</a>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> {:else if state === 'reset_in_progress'}
{:else if state==="reset_in_progress"}
<div class="min-h-screen flex items-center justify-center bg-gray-100"> <div class="min-h-screen flex items-center justify-center bg-gray-100">
<div class="max-w-md w-full py-12 px-6"> <div class="max-w-md w-full py-12 px-6">
<img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" /> <img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" />
@@ -102,11 +107,14 @@
placeholder={$_('new-password')} placeholder={$_('new-password')}
bind:value={password} /> bind:value={password} />
</div> </div>
<PasswordStrength bind:password_change={password} />
</div> </div>
<div class="mt-5"> <div class="mt-5">
<button <button
on:click={set_new_password} on:click={set_new_password}
disabled={!password_strong_enough(password)}
class:opacity-50={!password_strong_enough(password)}
type="submit" type="submit"
class="relative block w-full py-2 px-3 border border-transparent rounded-md text-white font-semibold bg-gray-800 hover:bg-gray-700 focus:bg-gray-900 focus:outline-none focus:shadow-outline sm:text-sm"> class="relative block w-full py-2 px-3 border border-transparent rounded-md text-white font-semibold bg-gray-800 hover:bg-gray-700 focus:bg-gray-900 focus:outline-none focus:shadow-outline sm:text-sm">
<span class="absolute left-0 inset-y pl-3"> <span class="absolute left-0 inset-y pl-3">

View File

@@ -117,6 +117,15 @@
} }
} }
async function copy() { async function copy() {
if(!editable.registrationKey){
Toastify({
text: $_('you-have-to-save-your-changes-to-generate-a-link'),
duration: 500,
backgroundColor:
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
}).showToast();
return;
}
valueCopy = registrationLink; valueCopy = registrationLink;
await tick(); await tick();
areaDom.focus(); areaDom.focus();
@@ -331,12 +340,11 @@
<div on:click={copy} class="inline-flex w-full"> <div on:click={copy} class="inline-flex w-full">
<p <p
name="token" name="token"
class:bg-green-200={copied}
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 p-2"> class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 p-2">
{#if editable.registrationKey} {#if editable.registrationKey}
{registrationLink} {registrationLink}
{:else} {:else}
You have to save your changes to generate a link. {$_('you-have-to-save-your-changes-to-generate-a-link')}
{/if} {/if}
</p> </p>
<div <div
@@ -351,9 +359,11 @@
d="M7 4V2h10v2h3l1 1v16a1 1 0 01-1 1H4a1 1 0 01-1-1V5l1-1h3zm0 2H5v14h14V6h-2v2H7V6zm2-2v2h6V4H9z" /></svg> d="M7 4V2h10v2h3l1 1v16a1 1 0 01-1 1H4a1 1 0 01-1-1V5l1-1h3zm0 2H5v14h14V6h-2v2H7V6zm2-2v2h6V4H9z" /></svg>
</div> </div>
</div> </div>
{#if editable.registrationKey}
<p class="text-gray-500 text-xs"> <p class="text-gray-500 text-xs">
{$_('click-to-copy-the-link-into-your-clipboard')} {$_('click-to-copy-the-link-into-your-clipboard')}
</p> </p>
{/if}
</div> </div>
{/if} {/if}
<!-- --> <!-- -->

View File

@@ -1,6 +1,9 @@
<script> <script>
import { getLocaleFromNavigator, _ } from "svelte-i18n"; import { getLocaleFromNavigator, _ } from "svelte-i18n";
import { RunnerOrganizationService, RunnerTeamService } from "@odit/lfk-client-js"; import {
RunnerOrganizationService,
RunnerTeamService,
} from "@odit/lfk-client-js";
import Toastify from "toastify-js"; import Toastify from "toastify-js";
export let sponsoring_contracts_show = false; export let sponsoring_contracts_show = false;
export let generate_runners = []; export let generate_runners = [];

View File

@@ -4,6 +4,9 @@
import { MeService } from "@odit/lfk-client-js"; import { MeService } from "@odit/lfk-client-js";
import Toastify from "toastify-js"; import Toastify from "toastify-js";
import ConfirmProfileDeletion from "./ConfirmProfileDeletion.svelte"; import ConfirmProfileDeletion from "./ConfirmProfileDeletion.svelte";
import PasswordStrength, {
password_strong_enough_and_equal,
} from "../auth/PasswordStrength.svelte";
$: data_loaded = false; $: data_loaded = false;
$: delete_triggered = false; $: delete_triggered = false;
$: original_data = {}; $: original_data = {};
@@ -15,8 +18,10 @@
JSON.stringify(editable) === JSON.stringify(original_data) JSON.stringify(editable) === JSON.stringify(original_data)
); );
$: save_enabled = changes_performed && isEmail(editable.email); $: save_enabled = changes_performed && isEmail(editable.email);
$: update_password_enabled = $: update_password_enabled = password_strong_enough_and_equal(
password_change.length > 0 && password_change === password_confirm; password_change,
password_confirm
);
const user_promise = MeService.meControllerGet().then((data) => { const user_promise = MeService.meControllerGet().then((data) => {
data_loaded = true; data_loaded = true;
data.groups = data.groups.map((g) => g.id); data.groups = data.groups.map((g) => g.id);
@@ -45,7 +50,7 @@
function changePassword() { function changePassword() {
if (data_loaded === true && update_password_enabled) { if (data_loaded === true && update_password_enabled) {
Toastify({ Toastify({
text: $_('changing-your-password'), text: $_("changing-your-password"),
duration: 2500, duration: 2500,
}).showToast(); }).showToast();
let postdata = Object.assign({}, original_data); let postdata = Object.assign({}, original_data);
@@ -56,7 +61,7 @@
password_change = ""; password_change = "";
postdata = {}; postdata = {};
Toastify({ Toastify({
text: $_('password-changed'), text: $_("password-changed"),
duration: 2500, duration: 2500,
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)", backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
}).showToast(); }).showToast();
@@ -242,10 +247,7 @@
class="border-gray-300 placeholder-gray-500 appearance-none rounded-md relative block w-full px-3 py-2 border focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm" class="border-gray-300 placeholder-gray-500 appearance-none rounded-md relative block w-full px-3 py-2 border focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm"
placeholder={$_('password')} /> placeholder={$_('password')} />
</div> </div>
{#if password_change != password_confirm && password_change.length > 0} <PasswordStrength bind:password_change bind:password_confirm />
<span
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">{$_('passwords-dont-match')}</span>
{/if}
</div> </div>
<div class="px-4 py-3 bg-gray-50 text-right sm:px-6"> <div class="px-4 py-3 bg-gray-50 text-right sm:px-6">
<button <button
@@ -257,9 +259,9 @@
{$_('update-password')} {$_('update-password')}
</button> </button>
{#if update_password_enabled} {#if update_password_enabled}
<p> <p>
{$_('after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that')} {$_('after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that')}
</p> </p>
{/if} {/if}
</div> </div>
</div> </div>

View File

@@ -5,6 +5,9 @@
import { UserService } from "@odit/lfk-client-js"; import { UserService } from "@odit/lfk-client-js";
import isEmail from "validator/es/lib/isEmail"; import isEmail from "validator/es/lib/isEmail";
import Toastify from "toastify-js"; import Toastify from "toastify-js";
import PasswordStrength, {
password_strong_enough,
} from "../auth/PasswordStrength.svelte";
export let modal_open; export let modal_open;
export let current_users; export let current_users;
let firstname_input; let firstname_input;
@@ -28,7 +31,10 @@
$: isLastnameValid = lastname_input_value.trim().length !== 0; $: isLastnameValid = lastname_input_value.trim().length !== 0;
$: isFirstnameValid = firstname_input_value.trim().length !== 0; $: isFirstnameValid = firstname_input_value.trim().length !== 0;
$: createbtnenabled = $: createbtnenabled =
isFirstnameValid && isLastnameValid && isPasswordValid && isEmailValid; isFirstnameValid &&
isLastnameValid &&
password_strong_enough(password_input_value) &&
isEmailValid;
(function () { (function () {
document.onkeydown = function (e) { document.onkeydown = function (e) {
e = e || window.event; e = e || window.event;
@@ -203,12 +209,8 @@
type="password" type="password"
name="password" name="password"
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" /> class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
{#if !isPasswordValid} <PasswordStrength
<span bind:password_change={password_input_value} />
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
{$_('password-is-required')}
</span>
{/if}
</div> </div>
<div class="col-span-6"> <div class="col-span-6">
<label <label

View File

@@ -1,420 +1,425 @@
{ {
"404message": "Die gesuchte Seite wurde leider nicht gefunden.", "404message": "Die gesuchte Seite wurde leider nicht gefunden.",
"404title": "Fehler 404", "404title": "Fehler 404",
"about": "Über", "about": "Über",
"action": "Aktionen", "action": "Aktionen",
"active": "Aktiv", "active": "Aktiv",
"add-card": "Karte erstellen", "add-card": "Karte erstellen",
"add-donation": "Sponsoring erstellen", "add-donation": "Sponsoring erstellen",
"add-donor": "Sponsor:in erstellen", "add-donor": "Sponsor:in erstellen",
"add-scan": "Scan erstellen", "add-scan": "Scan erstellen",
"add-the-first-scanstation": "Erstelle deine erste Scannerstation.", "add-the-first-scanstation": "Erstelle deine erste Scannerstation.",
"add-user-group": "Neue Gruppe erstellen", "add-user-group": "Neue Gruppe erstellen",
"add-your-first-card": "Erstelle deine erste Läuferkarte", "add-your-first-card": "Erstelle deine erste Läuferkarte",
"add-your-first-contact": "Erstelle den ersten Kontakt", "add-your-first-contact": "Erstelle den ersten Kontakt",
"add-your-first-donor": "Erstelle die erste Sponsor:in", "add-your-first-donor": "Erstelle die erste Sponsor:in",
"add-your-first-group": "Erstelle die erste Gruppe", "add-your-first-group": "Erstelle die erste Gruppe",
"add-your-first-organization": "Erstelle die erste Organisation", "add-your-first-organization": "Erstelle die erste Organisation",
"add-your-first-runner": "Erstelle die erste Läufer:in", "add-your-first-runner": "Erstelle die erste Läufer:in",
"add-your-first-team": "Erstelle das erste Team", "add-your-first-team": "Erstelle das erste Team",
"add-your-first-track": "Erstelle den ersten Track (Laufstrecke).", "add-your-first-track": "Erstelle den ersten Track (Laufstrecke).",
"add-your-first-user": "Erstelle die erste Benutzer:in", "add-your-first-user": "Erstelle die erste Benutzer:in",
"add-your-fist-donation": "Erstelle dein erstes Sponsoring", "add-your-fist-donation": "Erstelle dein erstes Sponsoring",
"add-your-fist-scan": "Füge deinen ersten Scan hinzu", "add-your-fist-scan": "Füge deinen ersten Scan hinzu",
"adding-card": "Karte wird erstellt", "adding-card": "Karte wird erstellt",
"adding-scan": "Scan wird hinzugefügt", "adding-scan": "Scan wird hinzugefügt",
"address": "Adresse", "address": "Adresse",
"address-is-required": "Du musst eine Adresse angeben", "address-is-required": "Du musst eine Adresse angeben",
"after-deletion-we-cant-restore-your-old-profile": "Nach der Löschung können auch die Admins dein Profil nicht wiederherstellen!", "after-deletion-we-cant-restore-your-old-profile": "Nach der Löschung können auch die Admins dein Profil nicht wiederherstellen!",
"after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that": "Nach der Änderung wirst du abgemeldet - bitte melde dich dann mit deinem neuen Passwort an.", "after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that": "Nach der Änderung wirst du abgemeldet - bitte melde dich dann mit deinem neuen Passwort an.",
"all-associated-donations-will-get-deleted-as-well": "Alle Sponsorings dieser Sponsor:in werden ebenfalls gelöscht", "all-associated-donations-will-get-deleted-as-well": "Alle Sponsorings dieser Sponsor:in werden ebenfalls gelöscht",
"all-associated-runners-will-be-deleted-too": "Alle zugehörigen Läufer:innen werden auch gelöscht!", "all-associated-runners-will-be-deleted-too": "Alle zugehörigen Läufer:innen werden auch gelöscht!",
"all-associated-teams-and-runners-will-be-deleted-too": "Alle assoziierten Teams und Läufer:innen werden auch gelöscht!", "all-associated-teams-and-runners-will-be-deleted-too": "Alle assoziierten Teams und Läufer:innen werden auch gelöscht!",
"amount": "Anzahl", "amount": "Anzahl",
"amount-per-kilometer": "Betrag pro Kilometer", "amount-per-kilometer": "Betrag pro Kilometer",
"apartment-suite-etc": "Apartment, Wohnung, etc.", "apartment-suite-etc": "Apartment, Wohnung, etc.",
"application_name": "Lauf für Kaya! - Admin", "application_name": "Lauf für Kaya! - Admin",
"applying-changes": "Änderungen anwenden", "applying-changes": "Änderungen anwenden",
"attention": "Achtung!", "attention": "Achtung!",
"author": "Autor:in", "author": "Autor:in",
"bitte-bestaetige-diese-laeufer-fuer-den-import": "Bitte die Läufer:innen für den Import bestätigen.", "bitte-bestaetige-diese-laeufer-fuer-den-import": "Bitte die Läufer:innen für den Import bestätigen.",
"by": "von", "by": "von",
"cancel": "Abbrechen", "cancel": "Abbrechen",
"cancel-delete": "Löschen abbrechen", "cancel-delete": "Löschen abbrechen",
"cancel-keep-donor": "Abbrechen, Sponsor:in behalten", "cancel-keep-donor": "Abbrechen, Sponsor:in behalten",
"cancel-keep-my-profile": "Abbrechen, mein Profil behalten", "cancel-keep-my-profile": "Abbrechen, mein Profil behalten",
"cancel-keep-organization": "Abbrechen und Organisation bearbeiten", "cancel-keep-organization": "Abbrechen und Organisation bearbeiten",
"cancel-keep-team": "Abbrechen, Team behalten", "cancel-keep-team": "Abbrechen, Team behalten",
"cannot-reset-your-password-directly": "Schade. \nWir können das Passwort leider nicht direkt zurücksetzen.\nBitte sende uns eine Mail in der du deine Identität bestätigst.", "cannot-reset-your-password-directly": "Schade. \nWir können das Passwort leider nicht direkt zurücksetzen.\nBitte sende uns eine Mail in der du deine Identität bestätigst.",
"card-added": "Karte wurde hinzugefügt", "card-added": "Karte wurde hinzugefügt",
"card-deleted": "Karte gelöscht", "card-deleted": "Karte gelöscht",
"card-updated": "Karte aktualisiert", "card-updated": "Karte aktualisiert",
"cards": "Läuferkarten", "cards": "Läuferkarten",
"change-your-password-here": "Hier kannst du dein Passwort ändern", "change-your-password-here": "Hier kannst du dein Passwort ändern",
"changing-your-password": "Passwort wird geändert", "changing-your-password": "Passwort wird geändert",
"city": "Stadt", "city": "Stadt",
"click-to-copy-token-to-clipboard": "Klicke auf den Token, um ihn in deine Zwischenablage zu kopieren", "click-to-copy-the-link-into-your-clipboard": "Klicke auf den Link, um ihn in deine Zwischenablage zu kopieren",
"close": "Schließen", "click-to-copy-token-to-clipboard": "Klicke auf den Token, um ihn in deine Zwischenablage zu kopieren",
"code": "Code", "close": "Schließen",
"configure-the-tracks-and-minimum-lap-times": "Bearbeite die Tracks und ihre minimale Rundenzeit", "code": "Code",
"confirm": "Bestätigen", "configure-the-tracks-and-minimum-lap-times": "Bearbeite die Tracks und ihre minimale Rundenzeit",
"confirm-delete": "Löschung Bestätigen", "confirm": "Bestätigen",
"confirm-delete-donor-with-all-donations": "Bestätigen, Sponsor:in mit allen Sponsorings löschen", "confirm-delete": "Löschung Bestätigen",
"confirm-delete-my-user-profile": "Bestätigung, mein Benutzerprofil löschen", "confirm-delete-donor-with-all-donations": "Bestätigen, Sponsor:in mit allen Sponsorings löschen",
"confirm-delete-organization-and-associated-teams-runners": "Bestätugung, lösche die Organisation und alle zugehörigen Teams und Läufer:innen.", "confirm-delete-my-user-profile": "Bestätigung, mein Benutzerprofil löschen",
"confirm-delete-team-and-associated-runners": "Bestätigung, lösche das Team mitsamt seinen Läufer:innen.", "confirm-delete-organization-and-associated-teams-runners": "Bestätugung, lösche die Organisation und alle zugehörigen Teams und Läufer:innen.",
"confirm-deletion": "Löschung Bestätigen", "confirm-delete-team-and-associated-runners": "Bestätigung, lösche das Team mitsamt seinen Läufer:innen.",
"confirm-the-new-password": "Neues Passwort bestätigen", "confirm-deletion": "Löschung Bestätigen",
"contact": "Kontakt", "confirm-the-new-password": "Neues Passwort bestätigen",
"contact-deleted": "Kontakt gelöscht", "contact": "Kontakt",
"contact-information": "Kontaktinformation", "contact-deleted": "Kontakt gelöscht",
"contact-is-being-updated": "Kontakt wird aktualisiert ...", "contact-information": "Kontaktinformation",
"contact-is-not-a-member-in-any-group": "Kontakt gehört zu keiner Gruppe", "contact-is-being-updated": "Kontakt wird aktualisiert ...",
"contacts": "Kontakte", "contact-is-not-a-member-in-any-group": "Kontakt gehört zu keiner Gruppe",
"contacts-are-being-loaded": "Kontakte werden geladen ...", "contacts": "Kontakte",
"copied-token-to-clipboard": "Token wurde in die Zwischenablage kopiert", "contacts-are-being-loaded": "Kontakte werden geladen ...",
"count_organizations": "Organisationen (Anzahl)", "copied-link-to-clipboard": "Link wurde in die Zwischenablage kopiert",
"count_teams": "Teams (Anzahl)", "copied-token-to-clipboard": "Token wurde in die Zwischenablage kopiert",
"create": "Erstellen", "count_organizations": "Organisationen (Anzahl)",
"create-a-new": "Erstelle eine neue", "count_teams": "Teams (Anzahl)",
"create-a-new-card": "Neue Läuferkarte erstellen", "create": "Erstellen",
"create-a-new-contact": "Kontakt erstellen", "create-a-new": "Erstelle eine neue",
"create-a-new-distance-donation": "Erstelle ein neues Sponsoring", "create-a-new-card": "Neue Läuferkarte erstellen",
"create-a-new-donor": "Neue Sponsor:in erstellen", "create-a-new-contact": "Kontakt erstellen",
"create-a-new-fixed-donation": "Erstelle eine neue Festbetragsspende", "create-a-new-distance-donation": "Erstelle ein neues Sponsoring",
"create-a-new-organization": "Neue Organisation anlegen", "create-a-new-donor": "Neue Sponsor:in erstellen",
"create-a-new-runner": "Neue Läufer:in erstellen", "create-a-new-fixed-donation": "Erstelle eine neue Festbetragsspende",
"create-a-new-scan-fixed-only": "Neuen Scan erstellen (nur mit Festdistanz)", "create-a-new-organization": "Neue Organisation anlegen",
"create-a-new-scanstation": "Neue Station erstellen", "create-a-new-runner": "Neue Läufer:in erstellen",
"create-a-new-team": "Erstelle ein neues Team", "create-a-new-scan-fixed-only": "Neuen Scan erstellen (nur mit Festdistanz)",
"create-a-new-track": "Neuen Track erstellen", "create-a-new-scanstation": "Neue Station erstellen",
"create-a-new-user": "Neue Benutzer:in anlegen", "create-a-new-team": "Erstelle ein neues Team",
"create-a-new-user-group": "Erstelle eine neue Gruppe", "create-a-new-track": "Neuen Track erstellen",
"create-bulk-blanco-cards": "Blankokarten erstellen", "create-a-new-user": "Neue Benutzer:in anlegen",
"create-bulk-cards": "Blankokarten erstellen", "create-a-new-user-group": "Erstelle eine neue Gruppe",
"create-organization": "Organisation erstellen", "create-bulk-blanco-cards": "Blankokarten erstellen",
"create-team": "Team erstellen", "create-bulk-cards": "Blankokarten erstellen",
"create-track": "Track erstellen", "create-organization": "Organisation erstellen",
"create-user": "Benutzer anlegen", "create-team": "Team erstellen",
"created-blanco-cards": "Blankokarten wurden erstellt", "create-track": "Track erstellen",
"creating-blanco-cards": "Erstelle Blankokarten", "create-user": "Benutzer anlegen",
"credits": "Credits", "created-blanco-cards": "Blankokarten wurden erstellt",
"csv_import__class": "Klasse", "creating-blanco-cards": "Erstelle Blankokarten",
"csv_import__firstname": "Vorname", "credits": "Credits",
"csv_import__lastname": "Nachname", "csv_import__class": "Klasse",
"csv_import__middlename": "Mittelname", "csv_import__firstname": "Vorname",
"csv_import__team": "Team", "csv_import__lastname": "Nachname",
"danger-zone": "Gefahrenzone", "csv_import__middlename": "Mittelname",
"dashboard-greeting": "Hallo", "csv_import__team": "Team",
"dashboard-title": "Dashboard", "danger-zone": "Gefahrenzone",
"datatable": { "dashboard-greeting": "Hallo",
"search": "🔍 Suche ...", "dashboard-title": "Dashboard",
"an_error_happened_while_fetching_the_data": "Beim Abrufen der Daten ist ein Fehler aufgetreten", "datatable": {
"loading": "Wird geladen...", "search": "🔍 Suche ...",
"next": "Nächste", "an_error_happened_while_fetching_the_data": "Beim Abrufen der Daten ist ein Fehler aufgetreten",
"of": "von", "loading": "Wird geladen...",
"previous": "Vorherige", "next": "Nächste",
"to": "bis", "of": "von",
"showing": "Zeige", "previous": "Vorherige",
"no_matching_records_found": "Keine passenden Einträge gefunden", "to": "bis",
"page": "Seite", "showing": "Zeige",
"records": "Einträge", "no_matching_records_found": "Keine passenden Einträge gefunden",
"sort_column_ascending": "Spalte aufsteigend sortieren", "page": "Seite",
"sort_column_descending": "Spalte absteigend sortieren" "records": "Einträge",
}, "sort_column_ascending": "Spalte aufsteigend sortieren",
"delete": "Löschen", "sort_column_descending": "Spalte absteigend sortieren"
"delete-contact": "Kontakt löschen", },
"delete-donation": "Sponsporing löschen", "delete": "Löschen",
"delete-donor": "Sponsor:in löschen", "delete-contact": "Kontakt löschen",
"delete-group": "Gruppe löschen", "delete-donation": "Sponsporing löschen",
"delete-organization": "Organisation löschen", "delete-donor": "Sponsor:in löschen",
"delete-profile": "Profil löschen", "delete-group": "Gruppe löschen",
"delete-runner": "Läufer:in löschen", "delete-organization": "Organisation löschen",
"delete-scan": "Scan löschen", "delete-profile": "Profil löschen",
"delete-station": "Station löschen", "delete-runner": "Läufer:in löschen",
"delete-team": "Team Löschen", "delete-scan": "Scan löschen",
"delete-user": "Benutzer:in löschen", "delete-station": "Station löschen",
"deleted-scan": "Scan wurde gelöscht", "delete-team": "Team Löschen",
"dependency_name": "Name", "delete-user": "Benutzer:in löschen",
"description": "Beschreibung", "deleted-scan": "Scan wurde gelöscht",
"description-optional": "Beschreibung (optional)", "dependency_name": "Name",
"deselect-all": "Alle abwählen", "description": "Beschreibung",
"details": "Details", "description-optional": "Beschreibung (optional)",
"disabled": "deaktiviert", "deselect-all": "Alle abwählen",
"distance": "Distanz", "details": "Details",
"distance-donation": "Sponsoring", "disabled": "deaktiviert",
"distance-in-km": "Distanz (in KM)", "distance": "Distanz",
"distance-track": "Distanz (+Track)", "distance-donation": "Sponsoring",
"do-you-really-want-to-delete-your-profile": "Möchtest du dein Profil wirklich löschen?", "distance-in-km": "Distanz (in KM)",
"do-you-want-to-delete-the-organization-delete_org-name": "Möchtest du die Organisation {orgname} löschen?", "distance-track": "Distanz (+Track)",
"do-you-want-to-delete-the-team-delete_team-name": "Möchtest du das Team {teamname} löschen?", "do-you-really-want-to-delete-your-profile": "Möchtest du dein Profil wirklich löschen?",
"do-you-want-to-delete-this-donor-with-all-related-donations": "Möchtest du diese Sponsor:in mit all ihren Sponsorings löschen?", "do-you-want-to-delete-the-organization-delete_org-name": "Möchtest du die Organisation {orgname} löschen?",
"documentation": "Dokumentation", "do-you-want-to-delete-the-team-delete_team-name": "Möchtest du das Team {teamname} löschen?",
"donation-amount": "Sponsoringbetrag", "do-you-want-to-delete-this-donor-with-all-related-donations": "Möchtest du diese Sponsor:in mit all ihren Sponsorings löschen?",
"donation-amount-must-be-greater-that-0-00eur": "Der Sponsoringbetrag muss größer als 0.00€ sein.", "documentation": "Dokumentation",
"donations": "Sponsorings", "donation-amount": "Sponsoringbetrag",
"donor": "Sponsor:in", "donation-amount-must-be-greater-that-0-00eur": "Der Sponsoringbetrag muss größer als 0.00€ sein.",
"donor-added": "Sponsor:in hinzugefügt", "donations": "Sponsorings",
"donor-deleted": "Sponsor:in gelöscht", "donor": "Sponsor:in",
"donor-has-no-associated-donations": "Zur Sponsor:in gibt es noch keine Sponsorings", "donor-added": "Sponsor:in hinzugefügt",
"donor-is-being-added": "Sponsor:in wird hinzugefügt...", "donor-deleted": "Sponsor:in gelöscht",
"donor-is-being-updated": "Sponsor:in wird aktualisiert", "donor-has-no-associated-donations": "Zur Sponsor:in gibt es noch keine Sponsorings",
"donors": "Sponsor:innen", "donor-is-being-added": "Sponsor:in wird hinzugefügt...",
"donors-are-being-loaded": "Sponsor:innen werden geladen", "donor-is-being-updated": "Sponsor:in wird aktualisiert",
"dont-have-your-email-connected": "Deine E-Mail ist nicht verknüpft?", "donors": "Sponsor:innen",
"dont-panic-were-resetting-it": "Keine Panik, wir setzen es zurück ✌", "donors-are-being-loaded": "Sponsor:innen werden geladen",
"e-mail-adress": "E-Mail-Adresse", "dont-have-your-email-connected": "Deine E-Mail ist nicht verknüpft?",
"edit": "Bearbeiten", "dont-panic-were-resetting-it": "Keine Panik, wir setzen es zurück ✌",
"edit-a-card": "Läuferkarte bearbeiten", "e-mail-adress": "E-Mail-Adresse",
"edit-permissions": "Berechtigungen bearbeiten", "edit": "Bearbeiten",
"email_address_or_username": "E-Mail-Adresse/ Benutzername", "edit-a-card": "Läuferkarte bearbeiten",
"enabled": "aktiviert", "edit-permissions": "Berechtigungen bearbeiten",
"enabled_large": "Aktiviert", "email_address_or_username": "E-Mail-Adresse/ Benutzername",
"english": "Englisch", "enabled": "aktiviert",
"error-during-import": "Fehler beim Importieren", "enabled_large": "Aktiviert",
"error-whyile-copying-to-clipboard": "Fehler beim Kopieren in die Zwischenablage", "english": "Englisch",
"error_on_login": "😢Fehler beim Login", "error-during-import": "Fehler beim Importieren",
"erteilte": "Direkt erteilte", "error-whyile-copying-to-clipboard": "Fehler beim Kopieren in die Zwischenablage",
"everything-concerning-your-profile": "Alles zu deinem Profil", "error_on_login": "😢Fehler beim Login",
"everything-is-more-fun-together": "Im Team macht's mehr Spaß 🏃‍♂️🏃‍♀️🏃‍♂️", "erteilte": "Direkt erteilte",
"faq": "FAQ", "everything-concerning-your-profile": "Alles zu deinem Profil",
"filter-by-organization-team": "Filtern nach Organisation / Team", "everything-is-more-fun-together": "Im Team macht's mehr Spaß 🏃‍♂️🏃‍♀️🏃‍♂️",
"first-name": "Vorname", "faq": "FAQ",
"first-name-is-required": "Vorname muss angegeben werden", "filter-by-organization-team": "Filtern nach Organisation / Team",
"first-scan-of-the-day": "Erster Scan des Tages", "first-name": "Vorname",
"fixed-donation": "Festbetragsspende", "first-name-is-required": "Vorname muss angegeben werden",
"forgot_password": "Passwort vergessen?", "first-scan-of-the-day": "Erster Scan des Tages",
"geerbte": "geerbte", "fixed-donation": "Festbetragsspende",
"general-stats": "Allgemeine Statistiken", "forgot_password": "Passwort vergessen?",
"general_promise_error": "😢 Ein unbekannter Fehler ist aufgetreten", "geerbte": "geerbte",
"generate-runnercards": "Läuferkarten generieren", "general-stats": "Allgemeine Statistiken",
"generate-sponsoring-contract": "Sponsoringvertrag generieren", "general_promise_error": "😢 Ein unbekannter Fehler ist aufgetreten",
"generate-sponsoring-contracts": "Sponsoringverträge generieren", "generate-runnercards": "Läuferkarten generieren",
"generating-pdf": "Pdf wird generiert...", "generate-sponsoring-contract": "Sponsoringvertrag generieren",
"generating-pdfs": "PDFs werden generiert...", "generate-sponsoring-contracts": "Sponsoringverträge generieren",
"generic-ui-logic-error": "Etwas ist in der Benutzeroberfläche schiefgelaufen.", "generating-pdf": "Pdf wird generiert...",
"german": "Deutsch", "generating-pdfs": "PDFs werden generiert...",
"go-to-login": "Zum Login", "generic-ui-logic-error": "Etwas ist in der Benutzeroberfläche schiefgelaufen.",
"goback": "Zur Startseite", "german": "Deutsch",
"granted": "Gewährt", "go-to-login": "Zum Login",
"group": "Gruppe", "goback": "Zur Startseite",
"group-added": "Gruppe hinzugefügt", "granted": "Gewährt",
"group-is-being-added": "Gruppe wird erstellt", "group": "Gruppe",
"group-name-is-required": "Der Gruppenname muss angegeben werden.", "group-added": "Gruppe hinzugefügt",
"group-updated": "Gruppe aktualisiert", "group-is-being-added": "Gruppe wird erstellt",
"groups": "Gruppen", "group-name-is-required": "Der Gruppenname muss angegeben werden.",
"groups-are-being-loaded": "Gruppen werden geladen", "group-updated": "Gruppe aktualisiert",
"home": "Start", "groups": "Gruppen",
"icon-image-credits": "Wir möchten uns außerdem für die verwendeten Icons und Bilder bedanken bei:", "groups-are-being-loaded": "Gruppen werden geladen",
"if-you-want-to-create-multiple-blanco-cards-try-the-add-bulk-button": "Wenn du mehrere Blankokarten erstellen willst, nutze doch den \"Blankokarten erstellen\" Knopf.", "home": "Start",
"import-finished": "Import abgeschlossen", "icon-image-credits": "Wir möchten uns außerdem für die verwendeten Icons und Bilder bedanken bei:",
"import-runners": "Läufer:innen importieren", "if-you-want-to-create-multiple-blanco-cards-try-the-add-bulk-button": "Wenn du mehrere Blankokarten erstellen willst, nutze doch den \"Blankokarten erstellen\" Knopf.",
"import__target-organization": "Ziel Organisation", "import-finished": "Import abgeschlossen",
"imprint": "Impressum ", "import-runners": "Läufer:innen importieren",
"imprint-loading": "Impressum lädt...", "import__target-organization": "Ziel Organisation",
"inactive": "Inaktiv", "imprint": "Impressum ",
"installed-version": "Installierte Version", "imprint-loading": "Impressum lädt...",
"internal-error": "Interner Fehler", "inactive": "Inaktiv",
"invalid": "Ungültig", "installed-version": "Installierte Version",
"invalid-mail-reset": "Das ist keine gültige E-Mail", "internal-error": "Interner Fehler",
"just-enter-how-many-you-want-and-the-system-will-create-them": "Gebe einfach ein, wie viele Blankokarten das System erstellen soll.", "invalid": "Ungültig",
"laeufer-hinzufuegen": "Läufer:in hinzufügen", "invalid-mail-reset": "Das ist keine gültige E-Mail",
"laeufer-importieren": "Läufer:innen importieren", "just-enter-how-many-you-want-and-the-system-will-create-them": "Gebe einfach ein, wie viele Blankokarten das System erstellen soll.",
"laptime": "Rundenzeit", "laeufer-hinzufuegen": "Läufer:in hinzufügen",
"last-name": "Nachname", "laeufer-importieren": "Läufer:innen importieren",
"last-name-is-required": "Nachname muss angegeben werden", "laptime": "Rundenzeit",
"lfk-is-os": "Das \"Lauf für Kaya!\" Frontend ist (wie alle anderen Projekte für den \"LfK!\" auch) ein OpenSource Projekt.", "last-name": "Nachname",
"license": "Lizenz", "last-name-is-required": "Nachname muss angegeben werden",
"licenses-are-being-loaded": "Lizenzen werden geladen...", "lfk-is-os": "Das \"Lauf für Kaya!\" Frontend ist (wie alle anderen Projekte für den \"LfK!\" auch) ein OpenSource Projekt.",
"loading-cards": "Läuferkarten werden geladen", "license": "Lizenz",
"loading-contact-details": "Kontaktdaten werden geladen ...", "licenses-are-being-loaded": "Lizenzen werden geladen...",
"loading-donation-details": "Lade Sponsoringdetails", "loading-cards": "Läuferkarten werden geladen",
"loading-donor-details": "Lade Details", "loading-contact-details": "Kontaktdaten werden geladen ...",
"loading-group-detail": "Lade Gruppendetails...", "loading-donation-details": "Lade Sponsoringdetails",
"loading-profile-data": "Lade Profildaten", "loading-donor-details": "Lade Details",
"loading-runners": "Läufer:innen werden geladen...", "loading-group-detail": "Lade Gruppendetails...",
"loading-station-details": "Lade Scanstation-Details ...", "loading-profile-data": "Lade Profildaten",
"log_in": "Anmelden", "loading-runners": "Läufer:innen werden geladen...",
"log_in_to_your_account": "Bitte melde dich an", "loading-station-details": "Lade Scanstation-Details ...",
"login_is_checked": "Login wird überprüft", "log_in": "Anmelden",
"logout": "Abmelden", "log_in_to_your_account": "Bitte melde dich an",
"mail-validation-in-progress": "E-Mail Verifizierung läuft... ", "login_is_checked": "Login wird überprüft",
"manage-admin-users": "Nutzer verwalten", "logout": "Abmelden",
"middle-name": "Mittelname", "mail-validation-in-progress": "E-Mail Verifizierung läuft... ",
"minimum-lap-time-in-s": "Minimale Rundenzeit (in Sekunden)", "manage-admin-users": "Nutzer verwalten",
"minimum-lap-time-must-be-a-positive-number-or-0": "Die minimale Rundenzeit muss eine positive Zahl oder 0 sein", "middle-name": "Mittelname",
"name": "Name", "minimum-lap-time-in-s": "Minimale Rundenzeit (in Sekunden)",
"name-is-required": "Der Gruppenname muss angegeben werden", "minimum-lap-time-must-be-a-positive-number-or-0": "Die minimale Rundenzeit muss eine positive Zahl oder 0 sein",
"new-password": "Neues Passwort", "must-be-at-least-10-characters-long": "Passwort muss mindestens 10 Zeichen lang sein!",
"no-contact-found": "Keine Kontakte gefunden", "must-contain-a-lowercase-letter": "Passwort muss einen Großbuchstaben enthalten!",
"no-contact-selected": "Kein Kontakt ausgewählt", "must-contain-a-number": "Passwort muss eine Zahl enthalten!",
"no-contact-specified": "Kein Kontakt angegeben", "must-contain-a-uppercase-letter": "Passwort muss einen Kleinbuchstaben enthalten!",
"no-donors-found": "Keine Spender:innen gefunden", "name": "Name",
"no-license-text-could-be-found": "Kein Lizenz-Text gefunden 😢", "name-is-required": "Der Gruppenname muss angegeben werden",
"no-organization-or-team-found": "Keine Organisationen oder Teams gefunden", "new-password": "Neues Passwort",
"no-organization-specified": "Keine Organisation angegeben", "no-contact-found": "Keine Kontakte gefunden",
"no-organizations-found": "Keine Organisationen gefunden", "no-contact-selected": "Kein Kontakt ausgewählt",
"no-runners-found": "Keine Läufer:innen gefunden", "no-contact-specified": "Kein Kontakt angegeben",
"no-tracks-added-yet": "Es wurden noch keine Tracks erstellt.", "no-donors-found": "Keine Spender:innen gefunden",
"non-blanko": "Keine/Blankokarte", "no-license-text-could-be-found": "Kein Lizenz-Text gefunden 😢",
"organization": "Organisation", "no-organization-or-team-found": "Keine Organisationen oder Teams gefunden",
"organization-added": "Organisation hinzugefügt", "no-organization-specified": "Keine Organisation angegeben",
"organization-deleted": "Organisation gelöscht", "no-organizations-found": "Keine Organisationen gefunden",
"organization-detail-is-being-loaded": "Organisationsdetails werden geladen ...", "no-runners-found": "Keine Läufer:innen gefunden",
"organization-is-being-added": "Organisation wird hinzugefügt ...", "no-tracks-added-yet": "Es wurden noch keine Tracks erstellt.",
"organization-name-is-required": "Der Name muss angegeben werden", "non-blanko": "Keine/Blankokarte",
"organizations": "Organisationen", "organization": "Organisation",
"organizations-are-being-loaded": "Organisationen werden geladen ...", "organization-added": "Organisation hinzugefügt",
"orgs": "Organisationen", "organization-deleted": "Organisation gelöscht",
"oss_credit_description": "Wir verwenden eine Menge Open Source-Software bei diesen Projekten und möchten uns bei den folgenden Projekten und Mitwirkenden bedanken, die dazu beitragen, Open Source großartig zu machen!", "organization-detail-is-being-loaded": "Organisationsdetails werden geladen ...",
"password": "Passwort", "organization-is-being-added": "Organisation wird hinzugefügt ...",
"password-changed": "Passwort wurde aktualisiert!", "organization-name-is-required": "Der Name muss angegeben werden",
"password-is-required": "Passwort muss angegeben werden", "organizations": "Organisationen",
"password-reset-failed": "Passwort zurücksetzen ist fehlgeschlagen!", "organizations-are-being-loaded": "Organisationen werden geladen ...",
"password-reset-in-progress": "Passwort wird zurückgesetzt...", "orgs": "Organisationen",
"password-reset-mail-sent": "Passwort-Reset Mail wurde an \"{usersEmail}\" geschickt.", "oss_credit_description": "Wir verwenden eine Menge Open Source-Software bei diesen Projekten und möchten uns bei den folgenden Projekten und Mitwirkenden bedanken, die dazu beitragen, Open Source großartig zu machen!",
"password-reset-successful": "Passwort erfolgreich zurückgesetzt!", "password": "Passwort",
"passwords-dont-match": "Die Passwörter stimmen nicht überein.", "password-changed": "Passwort wurde aktualisiert!",
"pdf-generation-failed": "PDF Generierung fehlgeschlagen!", "password-is-required": "Passwort muss angegeben werden",
"pdf-successfully-generated": "PDF wurde erfolgreich generiert!", "password-reset-failed": "Passwort zurücksetzen ist fehlgeschlagen!",
"pdfs-successfully-generated": "Alle PDFs wurden generiert!", "password-reset-in-progress": "Passwort wird zurückgesetzt...",
"per-kilometer": "pro Kilometer", "password-reset-mail-sent": "Passwort-Reset Mail wurde an \"{usersEmail}\" geschickt.",
"permissions": "Berechtigungen", "password-reset-successful": "Passwort erfolgreich zurückgesetzt!",
"permissions-updated": "Berechtigungen aktualisiert!", "passwords-dont-match": "Die Passwörter stimmen nicht überein!",
"phone": "Telefon", "pdf-generation-failed": "PDF Generierung fehlgeschlagen!",
"please-copy-the-token-and-store-it-somewhere-save": "Bitte kopiere dir den Token und bewahre ihn gut auf.", "pdf-successfully-generated": "PDF wurde erfolgreich generiert!",
"please-provide-a-password": "Bitte gebe ein Passwort an...", "pdfs-successfully-generated": "Alle PDFs wurden generiert!",
"please-provide-the-nessecary-information-to-add-a-new-donor": "Bitte mach die Notwendigen Angaben, um eine neue Sponsor:in zu erstellen", "per-kilometer": "pro Kilometer",
"please-provide-the-nessecary-information-to-create-a-new-donation": "Bitte gebe alle für das Sponsoring notwendigen Daten an.", "permissions": "Berechtigungen",
"please-provide-the-nessecary-information-to-create-a-new-scan": "Bitte gebe alle notwendigen Informationen an, um einen neuen Scan zu erstellen.", "permissions-updated": "Berechtigungen aktualisiert!",
"please-provide-the-required-csv-xlsx-file": "Bitte eine CSV oder XLSX Datei hochladen.", "phone": "Telefon",
"please-provide-the-required-information-for-creating-a-new-user-group": "Bitte gebe alle für eine neue Gruppe notwendigen Informationen an.", "please-copy-the-token-and-store-it-somewhere-save": "Bitte kopiere dir den Token und bewahre ihn gut auf.",
"please-provide-the-required-information-to-add-a-new-contact": "Bitte gebe alle nötigen Informationen an, im den neuen Kontakt zu erstellen.", "please-provide-a-password": "Bitte gebe ein Passwort an...",
"please-provide-the-required-information-to-add-a-new-organization": "Bitte gebe alle nötigen Informationen an, im die neue Organisation zu erstellen.", "please-provide-the-nessecary-information-to-add-a-new-donor": "Bitte mach die Notwendigen Angaben, um eine neue Sponsor:in zu erstellen",
"please-provide-the-required-information-to-add-a-new-runner": "Bitte die benötigten Informationen angeben.", "please-provide-the-nessecary-information-to-create-a-new-donation": "Bitte gebe alle für das Sponsoring notwendigen Daten an.",
"please-provide-the-required-information-to-add-a-new-team": "Bitte gebe alle nötigen Informationen an, im das neue Team zu erstellen.", "please-provide-the-nessecary-information-to-create-a-new-scan": "Bitte gebe alle notwendigen Informationen an, um einen neuen Scan zu erstellen.",
"please-provide-the-required-information-to-add-a-new-track": "Bitte die benötigten Informationen angeben.", "please-provide-the-required-csv-xlsx-file": "Bitte eine CSV oder XLSX Datei hochladen.",
"please-provide-the-required-information-to-add-a-new-user": "Bitte gebe alle nötigen Informationen an, im die neue Benutzer:in zu erstellen.", "please-provide-the-required-information-for-creating-a-new-user-group": "Bitte gebe alle für eine neue Gruppe notwendigen Informationen an.",
"please-provide-the-required-information-to-create-a-new-scanstation": "Bitte gebe alle für eine Scannerstation notwendigen Informationen an", "please-provide-the-required-information-to-add-a-new-contact": "Bitte gebe alle nötigen Informationen an, im den neuen Kontakt zu erstellen.",
"please-request-a-new-reset-mail": "Bitte eine neue Passwortreset-Mail anfordern...", "please-provide-the-required-information-to-add-a-new-organization": "Bitte gebe alle nötigen Informationen an, im die neue Organisation zu erstellen.",
"privacy": "Datenschutz", "please-provide-the-required-information-to-add-a-new-runner": "Bitte die benötigten Informationen angeben.",
"privacy-loading": "Datenschutzerklärung lädt...", "please-provide-the-required-information-to-add-a-new-team": "Bitte gebe alle nötigen Informationen an, im das neue Team zu erstellen.",
"profile": "Profil", "please-provide-the-required-information-to-add-a-new-track": "Bitte die benötigten Informationen angeben.",
"profile-picture": "Profilbild", "please-provide-the-required-information-to-add-a-new-user": "Bitte gebe alle nötigen Informationen an, im die neue Benutzer:in zu erstellen.",
"profile-updated": "Profil wurde aktualisiert!", "please-provide-the-required-information-to-create-a-new-scanstation": "Bitte gebe alle für eine Scannerstation notwendigen Informationen an",
"read-license": "Lizenz-Text lesen", "please-request-a-new-reset-mail": "Bitte eine neue Passwortreset-Mail anfordern...",
"receipt-needed": "Spendenquittung benötigt", "privacy": "Datenschutz",
"repo_link": "Link", "privacy-loading": "Datenschutzerklärung lädt...",
"request-a-new-reset-mail": "Neue Reset-Mail anfordern", "profile": "Profil",
"reset-my-password": "Passwort zurücksetzen", "profile-picture": "Profilbild",
"reset-password": "Passwort zurücksetzen", "profile-updated": "Profil wurde aktualisiert!",
"runner": "Läufer:in", "read-license": "Lizenz-Text lesen",
"runner-added": "Läufer:in hinzugefügt", "receipt-needed": "Spendenquittung benötigt",
"runner-import": "Läufer:innen Import", "repo_link": "Link",
"runner-is-being-added": "Läufer:in wird hinzugefügt...", "request-a-new-reset-mail": "Neue Reset-Mail anfordern",
"runner-updated": "Läufer:in aktualisiert!", "reset-my-password": "Passwort zurücksetzen",
"runnerimport_verify_runners_org": "Bitte die Läufer:innen für den Import in die Organisation \"{org_name}\" bestätigen", "reset-password": "Passwort zurücksetzen",
"runners": "Läufer", "runner": "Läufer:in",
"runners-are-being-imported": "Läufer:innen werden importiert ...", "runner-added": "Läufer:in hinzugefügt",
"runners-are-being-loaded": "Läufer:innen werden geladen ...", "runner-import": "Läufer:innen Import",
"save": "Speichern", "runner-is-being-added": "Läufer:in wird hinzugefügt...",
"save-changes": "Änderungen speichern", "runner-updated": "Läufer:in aktualisiert!",
"scan-added": "Scan hinzugefügt", "runnerimport_verify_runners_org": "Bitte die Läufer:innen für den Import in die Organisation \"{org_name}\" bestätigen",
"scan-is-being-updated": "Scan wird aktualisiert", "runners": "Läufer",
"scan-with-fixed-distance": "Scan mit Festdistanz", "runners-are-being-imported": "Läufer:innen werden importiert ...",
"scans": "Scans", "runners-are-being-loaded": "Läufer:innen werden geladen ...",
"scans-are-being-loaded": "Scans werden geladen", "save": "Speichern",
"scanstation": "Scanner Station", "save-changes": "Änderungen speichern",
"scanstation-added": "Station wurde erstellt", "scan-added": "Scan hinzugefügt",
"scanstation-is-being-added": "Scannerstation wird angelegt...", "scan-is-being-updated": "Scan wird aktualisiert",
"scanstations": "Scanner Stationen", "scan-with-fixed-distance": "Scan mit Festdistanz",
"scanstations-are-being-loaded": "Scannerstationen werden geladen...", "scans": "Scans",
"search-for-an-organization-by-name-or-id": "Suche eine Organisation (via Name oder Id)", "scans-are-being-loaded": "Scans werden geladen",
"search-for-an-organization-or-team-by-name-or-id": "Suche eine Organisation oder ein Team (via Name oder Id)", "scanstation": "Scanner Station",
"search-for-donor-name-or-id": "Suche eine Spender:in (via Name oder Id)", "scanstation-added": "Station wurde erstellt",
"search-for-permission": "Berechtigungen durchsuchen", "scanstation-is-being-added": "Scannerstation wird angelegt...",
"search-for-runner-by-name-or-id": "Suche eine Läufer:in (via Name oder Id)", "scanstations": "Scanner Stationen",
"select-all": "Alle auswählen", "scanstations-are-being-loaded": "Scannerstationen werden geladen...",
"select-language": "Sprache auswählen", "search-for-an-organization-by-name-or-id": "Suche eine Organisation (via Name oder Id)",
"send-a-mail-to-lfk-odit-services": "Sende eine Mail an lfk@odit.services", "search-for-an-organization-or-team-by-name-or-id": "Suche eine Organisation oder ein Team (via Name oder Id)",
"set-the-user-active-inactive": "Den Benutzer auf (in)aktiv setzen", "search-for-donor-name-or-id": "Suche eine Spender:in (via Name oder Id)",
"settings": "Einstellungen", "search-for-permission": "Berechtigungen durchsuchen",
"settings-for-your-profile": "Die Einstellungen deines Accounts", "search-for-runner-by-name-or-id": "Suche eine Läufer:in (via Name oder Id)",
"something-about-the-group": "Infos zur Gruppe", "select-all": "Alle auswählen",
"stats-are-being-loaded": "Die Statistiken werden geladen...", "select-language": "Sprache auswählen",
"status": "Status", "selfservice-registration": "Selfservice Registrierung",
"stuff-that-could-harm-your-profile": "Einstellungen, die deinem Profil nachhaltig schaden können", "send-a-mail-to-lfk-odit-services": "Sende eine Mail an lfk@odit.services",
"successful-password-reset": "Passwort erfolgreich zurückgesetzt!", "set-the-user-active-inactive": "Den Benutzer auf (in)aktiv setzen",
"team": "Team", "settings": "Einstellungen",
"team-detail-is-being-loaded": "Team wird geladen...", "settings-for-your-profile": "Die Einstellungen deines Accounts",
"team-name": "Teamname", "something-about-the-group": "Infos zur Gruppe",
"team-name-is-required": "Teamname ist erforderlich", "stats-are-being-loaded": "Die Statistiken werden geladen...",
"teams": "Teams", "status": "Status",
"teams-are-being-loaded": "Teams werden geladen ...", "stuff-that-could-harm-your-profile": "Einstellungen, die deinem Profil nachhaltig schaden können",
"the-provided-phone-number-is-invalid-less-than-br-greater-than-please-enter-a-valid-international-number": "Die angegebene Telefonnummer ist nicht korrekt. <br /> Bitte gebe eine Telefonnummer im internationalen Format an...", "successful-password-reset": "Passwort erfolgreich zurückgesetzt!",
"the-scans-distance-must-be-greater-than-0m": "Die Distanz muss größer als 0m sein.", "team": "Team",
"the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "Der Scannerstation Token wird nur einmal angezeigt - du kannst ihn nicht ändern oder ihn dir nochmal anzeigen lassen!", "team-detail-is-being-loaded": "Team wird geladen...",
"there-are-no-cards-yet": "Es gibt noch keine Läuferkarten.", "team-name": "Teamname",
"there-are-no-contacts-added-yet": "Es wurden noch keine Kontakte hinzugefügt.", "team-name-is-required": "Teamname ist erforderlich",
"there-are-no-donations-yet": "Es gibt noch keine Sponsorings", "teams": "Teams",
"there-are-no-donors-yet": "Es gibt noch keine Sponsor:innen", "teams-are-being-loaded": "Teams werden geladen ...",
"there-are-no-groups-yet": "Es gibt noch keine Gruppen", "the-provided-phone-number-is-invalid-less-than-br-greater-than-please-enter-a-valid-international-number": "Die angegebene Telefonnummer ist nicht korrekt. <br /> Bitte gebe eine Telefonnummer im internationalen Format an...",
"there-are-no-organizations-added-yet": "Es wurden noch keine Organisationen hinzugefügt.", "the-scans-distance-must-be-greater-than-0m": "Die Distanz muss größer als 0m sein.",
"there-are-no-runners-added-yet": "Es wurden noch keine Läufer:innen hinzugefügt.", "the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "Der Scannerstation Token wird nur einmal angezeigt - du kannst ihn nicht ändern oder ihn dir nochmal anzeigen lassen!",
"there-are-no-scans-yet": "Es gibt noch keine Scans", "there-are-no-cards-yet": "Es gibt noch keine Läuferkarten.",
"there-are-no-teams-added-yet": "Es wurden noch keine Teams hinzugefügt.", "there-are-no-contacts-added-yet": "Es wurden noch keine Kontakte hinzugefügt.",
"there-are-no-users-added-yet": "Es wurden noch keine Benutzer hinzugefügt.", "there-are-no-donations-yet": "Es gibt noch keine Sponsorings",
"this-card-is": "Diese Karte ist", "there-are-no-donors-yet": "Es gibt noch keine Sponsor:innen",
"this-might-take-a-moment": "Das könnte einen kleinen Moment dauern", "there-are-no-groups-yet": "Es gibt noch keine Gruppen",
"this-scanstation-is": "Diese Station ist", "there-are-no-organizations-added-yet": "Es wurden noch keine Organisationen hinzugefügt.",
"token": "Token", "there-are-no-runners-added-yet": "Es wurden noch keine Läufer:innen hinzugefügt.",
"total-distance": "gelaufene Strecke", "there-are-no-scans-yet": "Es gibt noch keine Scans",
"total-donation-amount": "Gesamtbetrag", "there-are-no-teams-added-yet": "Es wurden noch keine Teams hinzugefügt.",
"total-donations": "Spendensumme", "there-are-no-users-added-yet": "Es wurden noch keine Benutzer hinzugefügt.",
"total-scans": "gesamte Scans", "this-card-is": "Diese Karte ist",
"track": "Track", "this-might-take-a-moment": "Das könnte einen kleinen Moment dauern",
"track-added": "Track hinzugefügt", "this-scanstation-is": "Diese Station ist",
"track-data-is-being-loaded": "Trackdaten werden geladen", "token": "Token",
"track-is-being-added": "Track wird hinzugefügt...", "total-distance": "gelaufene Strecke",
"track-length-in-m": "Tracklänge (in Metern)", "total-donation-amount": "Gesamtbetrag",
"track-length-must-be-greater-than-0": "Die Länge muss größer als 0 (Meter) sein", "total-donations": "Spendensumme",
"track-name": "Trackname", "total-scans": "gesamte Scans",
"track-name-must-not-be-empty": "Der Name muss angegeben werden", "track": "Track",
"tracks": "Tracks", "track-added": "Track hinzugefügt",
"update-password": "Passwort ändern", "track-data-is-being-loaded": "Trackdaten werden geladen",
"updated-contact": "Kontakt aktualisiert!", "track-is-being-added": "Track wird hinzugefügt...",
"updated-donor": "Sponsor:in wurde aktualisiert", "track-length-in-m": "Tracklänge (in Metern)",
"updated-organization": "Organisation wurde aktualisiert", "track-length-must-be-greater-than-0": "Die Länge muss größer als 0 (Meter) sein",
"updated-scan": "Scan wurde aktualisiert", "track-name": "Trackname",
"updateing-group": "Gruppe wird aktualisiert...", "track-name-must-not-be-empty": "Der Name muss angegeben werden",
"updating-card": "Karte wird aktualisiert", "tracks": "Tracks",
"updating-organization": "Organisation wird aktualisiert", "update-password": "Passwort ändern",
"updating-permissions": "Berechtigungen werden aktualisiert...", "updated-contact": "Kontakt aktualisiert!",
"updating-runner": "Läufer:in wird aktualisiert.", "updated-donor": "Sponsor:in wurde aktualisiert",
"updating-user": "Benutzer:in wird aktualisiert...", "updated-organization": "Organisation wurde aktualisiert",
"updating-your-profile": "Profil wird aktualisiert...", "updated-scan": "Scan wurde aktualisiert",
"user-added": "Benutzer hinzugefügt", "updateing-group": "Gruppe wird aktualisiert...",
"user-groups": "Benutzergruppen", "updating-card": "Karte wird aktualisiert",
"user-is-being-added": "Benutzer wird hinzugefügt ...", "updating-organization": "Organisation wird aktualisiert",
"user-updated": "Benutzer:in wurde aktualisiert", "updating-permissions": "Berechtigungen werden aktualisiert...",
"username": "Benutzername", "updating-runner": "Läufer:in wird aktualisiert.",
"users": "Benutzer", "updating-user": "Benutzer:in wird aktualisiert...",
"valid": "Gültig", "updating-your-profile": "Profil wird aktualisiert...",
"valid-city-is-required": "Du musst eine Stadt angeben", "user-added": "Benutzer hinzugefügt",
"valid-email-is-required": "Es wird eine valide E-Mail Adresse benötigt", "user-groups": "Benutzergruppen",
"valid-international-phone-number-is-required": "Du musst eine Telefonnummer im internationalen Format angeben...", "user-is-being-added": "Benutzer wird hinzugefügt ...",
"valid-zipcode-postal-code-is-required": "Du musst eine valide Postleitzahl angeben", "user-updated": "Benutzer:in wurde aktualisiert",
"verfuegbare": "Verfügbar", "username": "Benutzername",
"welcome_wavinghand": "Willkommen 👋", "users": "Benutzer",
"yes-i-copied-the-token": "Ja, ich habe den Token kopiert", "valid": "Gültig",
"you-are-going-to-loose-all-permissions-and-access-to-the-runner-system": "Du wirst all deine Berechtigungen und den Zugriff aufs Läufersystem verlieren!", "valid-city-is-required": "Du musst eine Stadt angeben",
"you-can-now-use-your-new-password-to-log-in-to-your-account": "Du kannst dich jetzt mit deinem neuen Passwort anmelden! 🎉", "valid-email-is-required": "Es wird eine valide E-Mail Adresse benötigt",
"you-can-provide-a-runner-but-you-dont-have-to": "Du kannst eine Läufer:in angeben, musst aber nicht.", "valid-international-phone-number-is-required": "Du musst eine Telefonnummer im internationalen Format angeben...",
"you-dont-have-any-scanstations-yet": "Es gibt noch keine Scannerstationen", "valid-zipcode-postal-code-is-required": "Du musst eine valide Postleitzahl angeben",
"you-have-to-provide-an-organization": "Du musst eine Organisation angeben", "verfuegbare": "Verfügbar",
"you-must-create-at-least-one-card-or-cancel": "Du musst mindestens eine Blankokarte erstellen (oder abbrechen).", "welcome_wavinghand": "Willkommen 👋",
"zip-postal-code": "Postleitzahl", "yes-i-copied-the-token": "Ja, ich habe den Token kopiert",
"selfservice-registration": "Selfservice Registrierung", "you-are-going-to-loose-all-permissions-and-access-to-the-runner-system": "Du wirst all deine Berechtigungen und den Zugriff aufs Läufersystem verlieren!",
"copied-link-to-clipboard": "Link wurde in die Zwischenablage kopiert", "you-can-now-use-your-new-password-to-log-in-to-your-account": "Du kannst dich jetzt mit deinem neuen Passwort anmelden! 🎉",
"click-to-copy-the-link-into-your-clipboard": "Klicke auf den Link, um ihn in deine Zwischenablage zu kopieren" "you-can-provide-a-runner-but-you-dont-have-to": "Du kannst eine Läufer:in angeben, musst aber nicht.",
} "you-dont-have-any-scanstations-yet": "Es gibt noch keine Scannerstationen",
"you-have-to-provide-an-organization": "Du musst eine Organisation angeben",
"you-have-to-save-your-changes-to-generate-a-link": "Du musst deine Änderungen speichern, um einen Link zu generieren.",
"you-must-create-at-least-one-card-or-cancel": "Du musst mindestens eine Blankokarte erstellen (oder abbrechen).",
"zip-postal-code": "Postleitzahl"
}

View File

@@ -1,421 +1,426 @@
{ {
"404message": "Sorry, the page you are looking for could not be found.", "404message": "Sorry, the page you are looking for could not be found.",
"404title": "Error 404", "404title": "Error 404",
"about": "About", "about": "About",
"action": "Action", "action": "Action",
"active": "Active", "active": "Active",
"add-card": "Add Card", "add-card": "Add Card",
"add-donation": "Add donation", "add-donation": "Add donation",
"add-donor": "add donor", "add-donor": "add donor",
"add-scan": "Add scan", "add-scan": "Add scan",
"add-the-first-scanstation": "Add your first scanstation.", "add-the-first-scanstation": "Add your first scanstation.",
"add-user-group": "Add User Group", "add-user-group": "Add User Group",
"add-your-first-card": "Add your first card", "add-your-first-card": "Add your first card",
"add-your-first-contact": "Add your first contact", "add-your-first-contact": "Add your first contact",
"add-your-first-donor": "add your first donor", "add-your-first-donor": "add your first donor",
"add-your-first-group": "Add your first group", "add-your-first-group": "Add your first group",
"add-your-first-organization": "Add your first organization", "add-your-first-organization": "Add your first organization",
"add-your-first-runner": "Add your first runner", "add-your-first-runner": "Add your first runner",
"add-your-first-team": "Add your first team", "add-your-first-team": "Add your first team",
"add-your-first-track": "Add your first track.", "add-your-first-track": "Add your first track.",
"add-your-first-user": "Add your first user", "add-your-first-user": "Add your first user",
"add-your-fist-donation": "Add your fist donation", "add-your-fist-donation": "Add your fist donation",
"add-your-fist-scan": "Add your fist scan", "add-your-fist-scan": "Add your fist scan",
"adding-card": "Adding Card", "adding-card": "Adding Card",
"adding-scan": "Adding Scan", "adding-scan": "Adding Scan",
"address": "Address", "address": "Address",
"address-is-required": "Address is required", "address-is-required": "Address is required",
"after-deletion-we-cant-restore-your-old-profile": "After deletion we can't restore your old profile!", "after-deletion-we-cant-restore-your-old-profile": "After deletion we can't restore your old profile!",
"after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that": "After the update you'll get logged out - Please login with your new password after that.", "after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that": "After the update you'll get logged out - Please login with your new password after that.",
"all-associated-donations-will-get-deleted-as-well": "All associated donations will get deleted as well", "all-associated-donations-will-get-deleted-as-well": "All associated donations will get deleted as well",
"all-associated-runners-will-be-deleted-too": "All associated runners will be deleted too!", "all-associated-runners-will-be-deleted-too": "All associated runners will be deleted too!",
"all-associated-teams-and-runners-will-be-deleted-too": "All associated teams and runners will be deleted too!", "all-associated-teams-and-runners-will-be-deleted-too": "All associated teams and runners will be deleted too!",
"amount": "Amount", "amount": "Amount",
"amount-per-kilometer": "Amount per kilometer", "amount-per-kilometer": "Amount per kilometer",
"apartment-suite-etc": "Apartment, suite, etc.", "apartment-suite-etc": "Apartment, suite, etc.",
"application_name": "Lauf für Kaya! - Admin", "application_name": "Lauf für Kaya! - Admin",
"applying-changes": "Applying Changes", "applying-changes": "Applying Changes",
"attention": "Attention!", "attention": "Attention!",
"author": "Author", "author": "Author",
"bitte-bestaetige-diese-laeufer-fuer-den-import": "Please confirm these runners for import.", "bitte-bestaetige-diese-laeufer-fuer-den-import": "Please confirm these runners for import.",
"by": "by", "by": "by",
"cancel": "Cancel", "cancel": "Cancel",
"cancel-delete": "Cancel Delete", "cancel-delete": "Cancel Delete",
"cancel-keep-donor": "Cancel, keep donor", "cancel-keep-donor": "Cancel, keep donor",
"cancel-keep-my-profile": "Cancel, keep my profile", "cancel-keep-my-profile": "Cancel, keep my profile",
"cancel-keep-organization": "Cancel, keep organization", "cancel-keep-organization": "Cancel, keep organization",
"cancel-keep-team": "Cancel, keep team", "cancel-keep-team": "Cancel, keep team",
"cannot-reset-your-password-directly": "Bummer. We unfortunately cannot reset your password directly. Please send us a mail and confirm your identity", "cannot-reset-your-password-directly": "Bummer. We unfortunately cannot reset your password directly. Please send us a mail and confirm your identity",
"card-added": "Card added", "card-added": "Card added",
"card-deleted": "Card deleted", "card-deleted": "Card deleted",
"card-updated": "Card updated", "card-updated": "Card updated",
"cards": "Cards", "cards": "Cards",
"change-your-password-here": "Change your password here", "change-your-password-here": "Change your password here",
"changing-your-password": "Changing your password", "changing-your-password": "Changing your password",
"city": "City", "city": "City",
"click-to-copy-token-to-clipboard": "Click to copy the token to your clipboard", "click-to-copy-the-link-into-your-clipboard": "Click to copy the link into your clipboard",
"close": "Close", "click-to-copy-token-to-clipboard": "Click to copy the token to your clipboard",
"code": "Code", "close": "Close",
"configure-the-tracks-and-minimum-lap-times": "configure the tracks & minimum lap times", "code": "Code",
"confirm": "Confirm", "configure-the-tracks-and-minimum-lap-times": "configure the tracks & minimum lap times",
"confirm-delete": "Confirm Delete", "confirm": "Confirm",
"confirm-delete-donor-with-all-donations": "Confirm, delete donor with all donations", "confirm-delete": "Confirm Delete",
"confirm-delete-my-user-profile": "Confirm, delete my user profile", "confirm-delete-donor-with-all-donations": "Confirm, delete donor with all donations",
"confirm-delete-organization-and-associated-teams-runners": "Confirm, delete organization and associated teams+runners.", "confirm-delete-my-user-profile": "Confirm, delete my user profile",
"confirm-delete-team-and-associated-runners": "Confirm, delete team and associated runners.", "confirm-delete-organization-and-associated-teams-runners": "Confirm, delete organization and associated teams+runners.",
"confirm-deletion": "Confirm Deletion", "confirm-delete-team-and-associated-runners": "Confirm, delete team and associated runners.",
"confirm-the-new-password": "Confirm the new password", "confirm-deletion": "Confirm Deletion",
"contact": "Contact", "confirm-the-new-password": "Confirm the new password",
"contact-deleted": "Contact deleted", "contact": "Contact",
"contact-information": "Contact Information", "contact-deleted": "Contact deleted",
"contact-is-being-updated": "Contact is being updated...", "contact-information": "Contact Information",
"contact-is-not-a-member-in-any-group": "Contact is not a member in any group", "contact-is-being-updated": "Contact is being updated...",
"contacts": "Contacts", "contact-is-not-a-member-in-any-group": "Contact is not a member in any group",
"contacts-are-being-loaded": "contacts are being loaded...", "contacts": "Contacts",
"copied-token-to-clipboard": "Copied token to clipboard", "contacts-are-being-loaded": "contacts are being loaded...",
"count_organizations": "# Organizations", "copied-link-to-clipboard": "Copied link to clipboard",
"count_teams": "# Teams", "copied-token-to-clipboard": "Copied token to clipboard",
"create": "Create", "count_organizations": "# Organizations",
"create-a-new": "Create a new", "count_teams": "# Teams",
"create-a-new-card": "Create a new card", "create": "Create",
"create-a-new-contact": "Create a new contact", "create-a-new": "Create a new",
"create-a-new-distance-donation": "Create a new distance donation", "create-a-new-card": "Create a new card",
"create-a-new-donor": "Create a new donor", "create-a-new-contact": "Create a new contact",
"create-a-new-fixed-donation": "Create a new fixed donation", "create-a-new-distance-donation": "Create a new distance donation",
"create-a-new-organization": "Create a new Organization", "create-a-new-donor": "Create a new donor",
"create-a-new-runner": "Create a new Runner", "create-a-new-fixed-donation": "Create a new fixed donation",
"create-a-new-scan-fixed-only": "Create a new scan (fixed only)", "create-a-new-organization": "Create a new Organization",
"create-a-new-scanstation": "Create a new station", "create-a-new-runner": "Create a new Runner",
"create-a-new-team": "Create a new team", "create-a-new-scan-fixed-only": "Create a new scan (fixed only)",
"create-a-new-track": "Create a new Track", "create-a-new-scanstation": "Create a new station",
"create-a-new-user": "Create a new User", "create-a-new-team": "Create a new team",
"create-a-new-user-group": "Create a new user group", "create-a-new-track": "Create a new Track",
"create-bulk-blanco-cards": "Create bulk blanco cards", "create-a-new-user": "Create a new User",
"create-bulk-cards": "Add blanco cards", "create-a-new-user-group": "Create a new user group",
"create-organization": "Create Organization", "create-bulk-blanco-cards": "Create bulk blanco cards",
"create-team": "Create Team", "create-bulk-cards": "Add blanco cards",
"create-track": "Create Track", "create-organization": "Create Organization",
"create-user": "Create User", "create-team": "Create Team",
"created-blanco-cards": "Created blanco cards", "create-track": "Create Track",
"creating-blanco-cards": "Creating blanco cards", "create-user": "Create User",
"credits": "Credits", "created-blanco-cards": "Created blanco cards",
"csv_import__class": "Class", "creating-blanco-cards": "Creating blanco cards",
"csv_import__firstname": "Firstname", "credits": "Credits",
"csv_import__lastname": "Lastname", "csv_import__class": "Class",
"csv_import__middlename": "Middlename", "csv_import__firstname": "Firstname",
"csv_import__team": "Team", "csv_import__lastname": "Lastname",
"danger-zone": "Danger zone", "csv_import__middlename": "Middlename",
"dashboard-greeting": "Hello", "csv_import__team": "Team",
"dashboard-title": "Dashboard", "danger-zone": "Danger zone",
"datatable": { "dashboard-greeting": "Hello",
"search": "🔍 Search...", "dashboard-title": "Dashboard",
"sort_column_ascending": "Sort column ascending", "datatable": {
"sort_column_descending": "Sort column descending", "search": "🔍 Search...",
"previous": "Previous", "sort_column_ascending": "Sort column ascending",
"next": "Next", "sort_column_descending": "Sort column descending",
"page": "Page", "previous": "Previous",
"showing": "Showing", "next": "Next",
"records": "Records", "page": "Page",
"of": "of", "showing": "Showing",
"to": "to", "records": "Records",
"loading": "Loading...", "of": "of",
"no_matching_records_found": "No matching records found", "to": "to",
"an_error_happened_while_fetching_the_data": "An error happened while fetching the data" "loading": "Loading...",
}, "no_matching_records_found": "No matching records found",
"delete": "Delete", "an_error_happened_while_fetching_the_data": "An error happened while fetching the data"
"delete-contact": "Delete Contact", },
"delete-donation": "Delete Donation", "delete": "Delete",
"delete-donor": "Delete donor", "delete-contact": "Delete Contact",
"delete-group": "Delete Group", "delete-donation": "Delete Donation",
"delete-organization": "Delete Organization", "delete-donor": "Delete donor",
"delete-profile": "Delete Profile", "delete-group": "Delete Group",
"delete-runner": "Delete Runner", "delete-organization": "Delete Organization",
"delete-scan": "Delete scan", "delete-profile": "Delete Profile",
"delete-station": "Delete station", "delete-runner": "Delete Runner",
"delete-team": "Delete Team", "delete-scan": "Delete scan",
"delete-user": "Delete User", "delete-station": "Delete station",
"deleted-scan": "Deleted scan", "delete-team": "Delete Team",
"dependency_name": "Name", "delete-user": "Delete User",
"description": "description", "deleted-scan": "Deleted scan",
"description-optional": "Description (optional)", "dependency_name": "Name",
"deselect-all": "deselect all", "description": "description",
"details": "Details", "description-optional": "Description (optional)",
"disabled": "disabled", "deselect-all": "deselect all",
"distance": "Distance", "details": "Details",
"distance-donation": "distance donation", "disabled": "disabled",
"distance-in-km": "Distance in km", "distance": "Distance",
"distance-track": "Distance (+Track)", "distance-donation": "distance donation",
"do-you-really-want-to-delete-your-profile": "Do you really want to delete your profile?", "distance-in-km": "Distance in km",
"do-you-want-to-delete-the-organization-delete_org-name": "Do you want to delete the organization {orgname}?", "distance-track": "Distance (+Track)",
"do-you-want-to-delete-the-team-delete_team-name": "Do you want to delete the team {teamname}?", "do-you-really-want-to-delete-your-profile": "Do you really want to delete your profile?",
"do-you-want-to-delete-this-donor-with-all-related-donations": "Do you want to delete this donor with all related donations", "do-you-want-to-delete-the-organization-delete_org-name": "Do you want to delete the organization {orgname}?",
"documentation": "Documentation", "do-you-want-to-delete-the-team-delete_team-name": "Do you want to delete the team {teamname}?",
"donation-amount": "Donation amount", "do-you-want-to-delete-this-donor-with-all-related-donations": "Do you want to delete this donor with all related donations",
"donation-amount-must-be-greater-that-0-00eur": "Donation amount must be greater that 0.00€", "documentation": "Documentation",
"donations": "Donations", "donation-amount": "Donation amount",
"donor": "Donor", "donation-amount-must-be-greater-that-0-00eur": "Donation amount must be greater that 0.00€",
"donor-added": "Donor added", "donations": "Donations",
"donor-deleted": "donor deleted", "donor": "Donor",
"donor-has-no-associated-donations": "Donor has no associated donations.", "donor-added": "Donor added",
"donor-is-being-added": "Donor is being added...", "donor-deleted": "donor deleted",
"donor-is-being-updated": "Donor is being updated", "donor-has-no-associated-donations": "Donor has no associated donations.",
"donors": "Donors", "donor-is-being-added": "Donor is being added...",
"donors-are-being-loaded": "donors are being loaded", "donor-is-being-updated": "Donor is being updated",
"dont-have-your-email-connected": "Don't have your email connected?", "donors": "Donors",
"dont-panic-were-resetting-it": "Don't panic, we're resetting it ✌", "donors-are-being-loaded": "donors are being loaded",
"e-mail-adress": "E-Mail Adress", "dont-have-your-email-connected": "Don't have your email connected?",
"edit": "Edit", "dont-panic-were-resetting-it": "Don't panic, we're resetting it ✌",
"edit-a-card": "Edit a card", "e-mail-adress": "E-Mail Adress",
"edit-permissions": "edit permissions", "edit": "Edit",
"email_address_or_username": "Email / username", "edit-a-card": "Edit a card",
"enabled": "enabled", "edit-permissions": "edit permissions",
"enabled_large": "Enabled", "email_address_or_username": "Email / username",
"english": "English", "enabled": "enabled",
"error-during-import": "Error during import", "enabled_large": "Enabled",
"error-whyile-copying-to-clipboard": "Error while copying to clipboard", "english": "English",
"error_on_login": "Error on login", "error-during-import": "Error during import",
"erteilte": "Directly granted", "error-whyile-copying-to-clipboard": "Error while copying to clipboard",
"everything-concerning-your-profile": "Everything concerning your profile", "error_on_login": "Error on login",
"everything-is-more-fun-together": "everything is more fun together 🏃‍♂️🏃‍♀️🏃‍♂️", "erteilte": "Directly granted",
"faq": "FAQ", "everything-concerning-your-profile": "Everything concerning your profile",
"filter-by-organization-team": "Filter by Organization/ Team", "everything-is-more-fun-together": "everything is more fun together 🏃‍♂️🏃‍♀️🏃‍♂️",
"first-name": "First name", "faq": "FAQ",
"first-name-is-required": "First Name is required", "filter-by-organization-team": "Filter by Organization/ Team",
"first-scan-of-the-day": "First scan of the day.", "first-name": "First name",
"fixed-donation": "fixed donation", "first-name-is-required": "First Name is required",
"forgot_password": "Forgot your password?", "first-scan-of-the-day": "First scan of the day.",
"geerbte": "inherited", "fixed-donation": "fixed donation",
"general-stats": "General Stats", "forgot_password": "Forgot your password?",
"general_promise_error": "😢 Error", "geerbte": "inherited",
"generate-runnercards": "Generate Runnercards", "general-stats": "General Stats",
"generate-sponsoring-contract": "generate sponsoring contract", "general_promise_error": "😢 Error",
"generate-sponsoring-contracts": "generate sponsoring contracts", "generate-runnercards": "Generate Runnercards",
"generating-pdf": "generating PDF...", "generate-sponsoring-contract": "generate sponsoring contract",
"generating-pdfs": "generating PDFs...", "generate-sponsoring-contracts": "generate sponsoring contracts",
"generic-ui-logic-error": "Something went wrong in the UI logic", "generating-pdf": "generating PDF...",
"german": "German", "generating-pdfs": "generating PDFs...",
"go-to-login": "Go To Login", "generic-ui-logic-error": "Something went wrong in the UI logic",
"goback": "Go Home", "german": "German",
"granted": "granted", "go-to-login": "Go To Login",
"group": "Group", "goback": "Go Home",
"group-added": "Group added", "granted": "granted",
"group-is-being-added": "Group is being added...", "group": "Group",
"group-name-is-required": "Group name is required", "group-added": "Group added",
"group-updated": "group updated", "group-is-being-added": "Group is being added...",
"groups": "Groups", "group-name-is-required": "Group name is required",
"groups-are-being-loaded": "Groups are being loaded", "group-updated": "group updated",
"home": "Home", "groups": "Groups",
"icon-image-credits": "We also want to thank these projects for illustrations and icons:", "groups-are-being-loaded": "Groups are being loaded",
"if-you-want-to-create-multiple-blanco-cards-try-the-add-bulk-button": "If you want to create multiple blanco cards: Try the 'Add blanco cards' button.", "home": "Home",
"import-finished": "Import finished", "icon-image-credits": "We also want to thank these projects for illustrations and icons:",
"import-runners": "Import runners", "if-you-want-to-create-multiple-blanco-cards-try-the-add-bulk-button": "If you want to create multiple blanco cards: Try the 'Add blanco cards' button.",
"import__target-organization": "Target Organization", "import-finished": "Import finished",
"imprint": "Imprint", "import-runners": "Import runners",
"imprint-loading": "Imprint loading...", "import__target-organization": "Target Organization",
"inactive": "Inactive", "imprint": "Imprint",
"installed-version": "Installed version", "imprint-loading": "Imprint loading...",
"internal-error": "Internal Error", "inactive": "Inactive",
"invalid": "Invalid", "installed-version": "Installed version",
"invalid-mail-reset": "the provided email is invalid", "internal-error": "Internal Error",
"just-enter-how-many-you-want-and-the-system-will-create-them": "Just enter how many you want and the system will create them", "invalid": "Invalid",
"laeufer-hinzufuegen": "Add runner", "invalid-mail-reset": "the provided email is invalid",
"laeufer-importieren": "Läufer importieren", "just-enter-how-many-you-want-and-the-system-will-create-them": "Just enter how many you want and the system will create them",
"laptime": "Laptime", "laeufer-hinzufuegen": "Add runner",
"last-name": "Last name", "laeufer-importieren": "Läufer importieren",
"last-name-is-required": "Last Name is required", "laptime": "Laptime",
"lfk-is-os": "The \"Lauf für Kaya!\" Frontend is (like all other projects for the \"LfK!\" Also) an open source project.", "last-name": "Last name",
"license": "License", "last-name-is-required": "Last Name is required",
"licenses-are-being-loaded": "Licenses are being loaded...", "lfk-is-os": "The \"Lauf für Kaya!\" Frontend is (like all other projects for the \"LfK!\" Also) an open source project.",
"loading-cards": "Loading cards", "license": "License",
"loading-contact-details": "Loading contact details...", "licenses-are-being-loaded": "Licenses are being loaded...",
"loading-donation-details": "Loading donation details", "loading-cards": "Loading cards",
"loading-donor-details": "Loading donor details", "loading-contact-details": "Loading contact details...",
"loading-group-detail": "Loading group detail...", "loading-donation-details": "Loading donation details",
"loading-profile-data": "Loading profile data", "loading-donor-details": "Loading donor details",
"loading-runners": "loading runners...", "loading-group-detail": "Loading group detail...",
"loading-station-details": "Loading station details", "loading-profile-data": "Loading profile data",
"log_in": "Log in", "loading-runners": "loading runners...",
"log_in_to_your_account": "Log in to your account", "loading-station-details": "Loading station details",
"login_is_checked": "Login is being checked...", "log_in": "Log in",
"logout": "Logout", "log_in_to_your_account": "Log in to your account",
"mail-validation-in-progress": "mail validation in progress...", "login_is_checked": "Login is being checked...",
"manage-admin-users": "manage admin users", "logout": "Logout",
"middle-name": "Middle name", "mail-validation-in-progress": "mail validation in progress...",
"minimum-lap-time-in-s": "minimum lap time in s", "manage-admin-users": "manage admin users",
"minimum-lap-time-must-be-a-positive-number-or-0": "minimum lap time must be a positive number or 0", "middle-name": "Middle name",
"name": "Name", "minimum-lap-time-in-s": "minimum lap time in s",
"name-is-required": "Name is required", "minimum-lap-time-must-be-a-positive-number-or-0": "minimum lap time must be a positive number or 0",
"new-password": "New password", "must-be-at-least-10-characters-long": "Must be at least 10 characters long!",
"no-contact-found": "No contacts found", "must-contain-a-lowercase-letter": "Must contain a lowercase letter!",
"no-contact-selected": "No contact selected", "must-contain-a-number": "Must contain a number!",
"no-contact-specified": "no contact specified", "must-contain-a-uppercase-letter": "Must contain a uppercase letter!",
"no-donors-found": "No donors found", "name": "Name",
"no-license-text-could-be-found": "No license text could be found 😢", "name-is-required": "Name is required",
"no-organization-or-team-found": "No organization or team found", "new-password": "New password",
"no-organization-specified": "no organization specified", "no-contact-found": "No contacts found",
"no-organizations-found": "No organizations found", "no-contact-selected": "No contact selected",
"no-runners-found": "No runners found", "no-contact-specified": "no contact specified",
"no-tracks-added-yet": "there are no tracks added yet.", "no-donors-found": "No donors found",
"non-blanko": "Non/Blanko", "no-license-text-could-be-found": "No license text could be found 😢",
"organization": "Organization", "no-organization-or-team-found": "No organization or team found",
"organization-added": "Organization added", "no-organization-specified": "no organization specified",
"organization-deleted": "Organization deleted", "no-organizations-found": "No organizations found",
"organization-detail-is-being-loaded": "organization detail is being loaded...", "no-runners-found": "No runners found",
"organization-is-being-added": "Organization is being added...", "no-tracks-added-yet": "there are no tracks added yet.",
"organization-name-is-required": "Organization name is required", "non-blanko": "Non/Blanko",
"organizations": "Organizations", "organization": "Organization",
"organizations-are-being-loaded": "organizations are being loaded...", "organization-added": "Organization added",
"orgs": "Organizations", "organization-deleted": "Organization deleted",
"oss_credit_description": "We use a lot of open source software on these projects, and would like to thank the following projects and contributors who help make open source great!", "organization-detail-is-being-loaded": "organization detail is being loaded...",
"password": "Password", "organization-is-being-added": "Organization is being added...",
"password-changed": "Password changed!", "organization-name-is-required": "Organization name is required",
"password-is-required": "Password is required", "organizations": "Organizations",
"password-reset-failed": "Password reset failed!", "organizations-are-being-loaded": "organizations are being loaded...",
"password-reset-in-progress": "Password Reset in Progress...", "orgs": "Organizations",
"password-reset-mail-sent": "Password reset mail was sent to \"{usersEmail}\".", "oss_credit_description": "We use a lot of open source software on these projects, and would like to thank the following projects and contributors who help make open source great!",
"password-reset-successful": "Password Reset successful!", "password": "Password",
"passwords-dont-match": "Passwords don't match", "password-changed": "Password changed!",
"pdf-generation-failed": "PDF generation failed!", "password-is-required": "Password is required",
"pdf-successfully-generated": "PDF successfully generated!", "password-reset-failed": "Password reset failed!",
"pdfs-successfully-generated": "PDFs successfully generated!", "password-reset-in-progress": "Password Reset in Progress...",
"per-kilometer": "per Kilometer", "password-reset-mail-sent": "Password reset mail was sent to \"{usersEmail}\".",
"permissions": "Permissions", "password-reset-successful": "Password Reset successful!",
"permissions-updated": "Permissions updated!", "passwords-dont-match": "Passwords don't match!",
"phone": "Phone", "pdf-generation-failed": "PDF generation failed!",
"please-copy-the-token-and-store-it-somewhere-save": "Please copy the token and store it somewhere safe.", "pdf-successfully-generated": "PDF successfully generated!",
"please-provide-a-password": "Please provide a password...", "pdfs-successfully-generated": "PDFs successfully generated!",
"please-provide-the-nessecary-information-to-add-a-new-donor": "Please provide the nessecary information to add a new donor", "per-kilometer": "per Kilometer",
"please-provide-the-nessecary-information-to-create-a-new-donation": "Please provide the nessecary information to create a new donation", "permissions": "Permissions",
"please-provide-the-nessecary-information-to-create-a-new-scan": "Please provide the nessecary information to create a new scan.", "permissions-updated": "Permissions updated!",
"please-provide-the-required-csv-xlsx-file": "Please provide the required csv/ xlsx file", "phone": "Phone",
"please-provide-the-required-information-for-creating-a-new-user-group": "Please provide the required information for creating a new user group.", "please-copy-the-token-and-store-it-somewhere-save": "Please copy the token and store it somewhere safe.",
"please-provide-the-required-information-to-add-a-new-contact": "Please provide the required information to add a new contact.", "please-provide-a-password": "Please provide a password...",
"please-provide-the-required-information-to-add-a-new-organization": "Please provide the required information to add a new organization.", "please-provide-the-nessecary-information-to-add-a-new-donor": "Please provide the nessecary information to add a new donor",
"please-provide-the-required-information-to-add-a-new-runner": "Please provide the required information to add a new runner.", "please-provide-the-nessecary-information-to-create-a-new-donation": "Please provide the nessecary information to create a new donation",
"please-provide-the-required-information-to-add-a-new-team": "Please provide the required information to add a new team.", "please-provide-the-nessecary-information-to-create-a-new-scan": "Please provide the nessecary information to create a new scan.",
"please-provide-the-required-information-to-add-a-new-track": "Please provide the required information to add a new track.", "please-provide-the-required-csv-xlsx-file": "Please provide the required csv/ xlsx file",
"please-provide-the-required-information-to-add-a-new-user": "Please provide the required information to add a new user.", "please-provide-the-required-information-for-creating-a-new-user-group": "Please provide the required information for creating a new user group.",
"please-provide-the-required-information-to-create-a-new-scanstation": "Please provide the required information to create a new scanstation", "please-provide-the-required-information-to-add-a-new-contact": "Please provide the required information to add a new contact.",
"please-request-a-new-reset-mail": "Please request a new reset mail...", "please-provide-the-required-information-to-add-a-new-organization": "Please provide the required information to add a new organization.",
"privacy": "Privacy", "please-provide-the-required-information-to-add-a-new-runner": "Please provide the required information to add a new runner.",
"privacy-loading": "Privacy loading...", "please-provide-the-required-information-to-add-a-new-team": "Please provide the required information to add a new team.",
"profile": "Profile", "please-provide-the-required-information-to-add-a-new-track": "Please provide the required information to add a new track.",
"profile-picture": "Profile Picture", "please-provide-the-required-information-to-add-a-new-user": "Please provide the required information to add a new user.",
"profile-updated": "Profile updated!", "please-provide-the-required-information-to-create-a-new-scanstation": "Please provide the required information to create a new scanstation",
"read-license": "Read License", "please-request-a-new-reset-mail": "Please request a new reset mail...",
"receipt-needed": "Receipt needed", "privacy": "Privacy",
"repo_link": "Link", "privacy-loading": "Privacy loading...",
"request-a-new-reset-mail": "Request a new reset mail", "profile": "Profile",
"reset-my-password": "Reset my password", "profile-picture": "Profile Picture",
"reset-password": "Reset your password", "profile-updated": "Profile updated!",
"runner": "Runner", "read-license": "Read License",
"runner-added": "Runner added", "receipt-needed": "Receipt needed",
"runner-import": "Runner Import", "repo_link": "Link",
"runner-is-being-added": "Runner is being added...", "request-a-new-reset-mail": "Request a new reset mail",
"runner-updated": "Runner updated!", "reset-my-password": "Reset my password",
"runnerimport_verify_runners_org": "Please confirm these runners for import into the organization \"{org_name}\"", "reset-password": "Reset your password",
"runners": "Runners", "runner": "Runner",
"runners-are-being-imported": "Runners are being imported...", "runner-added": "Runner added",
"runners-are-being-loaded": "runners are being loaded...", "runner-import": "Runner Import",
"save": "Save", "runner-is-being-added": "Runner is being added...",
"save-changes": "Save Changes", "runner-updated": "Runner updated!",
"scan-added": "Scan added", "runnerimport_verify_runners_org": "Please confirm these runners for import into the organization \"{org_name}\"",
"scan-is-being-updated": "Scan is being updated", "runners": "Runners",
"scan-with-fixed-distance": "Scan with fixed distance", "runners-are-being-imported": "Runners are being imported...",
"scans": "Scans", "runners-are-being-loaded": "runners are being loaded...",
"scans-are-being-loaded": "Scans are being loaded", "save": "Save",
"scanstation": "Scanstation", "save-changes": "Save Changes",
"scanstation-added": "Scanstation added", "scan-added": "Scan added",
"scanstation-is-being-added": "Adding scanstation...", "scan-is-being-updated": "Scan is being updated",
"scanstations": "Scanstations", "scan-with-fixed-distance": "Scan with fixed distance",
"scanstations-are-being-loaded": "Loading scanstations...", "scans": "Scans",
"search-for-an-organization-by-name-or-id": "Search for an organization (by name or id)", "scans-are-being-loaded": "Scans are being loaded",
"search-for-an-organization-or-team-by-name-or-id": "Search for an organization or team (by name or id)", "scanstation": "Scanstation",
"search-for-donor-name-or-id": "Search for donor (by name or id)", "scanstation-added": "Scanstation added",
"search-for-permission": "Search for permission", "scanstation-is-being-added": "Adding scanstation...",
"search-for-runner-by-name-or-id": "Search for runner (by name or id)", "scanstations": "Scanstations",
"select-all": "select all", "scanstations-are-being-loaded": "Loading scanstations...",
"select-language": "Select language", "search-for-an-organization-by-name-or-id": "Search for an organization (by name or id)",
"send-a-mail-to-lfk-odit-services": "send a mail to lfk@odit.services", "search-for-an-organization-or-team-by-name-or-id": "Search for an organization or team (by name or id)",
"set-the-user-active-inactive": "set the user active/ inactive", "search-for-donor-name-or-id": "Search for donor (by name or id)",
"settings": "Settings", "search-for-permission": "Search for permission",
"settings-for-your-profile": "Settings for your profile", "search-for-runner-by-name-or-id": "Search for runner (by name or id)",
"something-about-the-group": "Something about the group...", "select-all": "select all",
"stats-are-being-loaded": "stats are being loaded...", "select-language": "Select language",
"status": "Status", "selfservice-registration": "Selfservice registration",
"stuff-that-could-harm-your-profile": "Stuff that could harm your profile", "send-a-mail-to-lfk-odit-services": "send a mail to lfk@odit.services",
"successful-password-reset": "Successful password reset!", "set-the-user-active-inactive": "set the user active/ inactive",
"team": "Team", "settings": "Settings",
"team-detail-is-being-loaded": "team detail is being loaded...", "settings-for-your-profile": "Settings for your profile",
"team-name": "Team name", "something-about-the-group": "Something about the group...",
"team-name-is-required": "team name is required", "stats-are-being-loaded": "stats are being loaded...",
"teams": "Teams", "status": "Status",
"teams-are-being-loaded": "teams are being loaded...", "stuff-that-could-harm-your-profile": "Stuff that could harm your profile",
"the-provided-phone-number-is-invalid-less-than-br-greater-than-please-enter-a-valid-international-number": "the provided phone number is invalid.<br />please enter a valid international number...", "successful-password-reset": "Successful password reset!",
"the-scans-distance-must-be-greater-than-0m": "The scan's distance must be greater than 0m", "team": "Team",
"the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "The scanstation api token will only get displayed once - you won't be able to change or view it again!", "team-detail-is-being-loaded": "team detail is being loaded...",
"there-are-no-cards-yet": "There are no cards yet.", "team-name": "Team name",
"there-are-no-contacts-added-yet": "There are no contacts added yet.", "team-name-is-required": "team name is required",
"there-are-no-donations-yet": "There are no donations yet", "teams": "Teams",
"there-are-no-donors-yet": "There are no donors yet", "teams-are-being-loaded": "teams are being loaded...",
"there-are-no-groups-yet": "There are no groups yet", "the-provided-phone-number-is-invalid-less-than-br-greater-than-please-enter-a-valid-international-number": "the provided phone number is invalid.<br />please enter a valid international number...",
"there-are-no-organizations-added-yet": "There are no organizations added yet.", "the-scans-distance-must-be-greater-than-0m": "The scan's distance must be greater than 0m",
"there-are-no-runners-added-yet": "There are no runners added yet.", "the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "The scanstation api token will only get displayed once - you won't be able to change or view it again!",
"there-are-no-scans-yet": "There are no scans yet", "there-are-no-cards-yet": "There are no cards yet.",
"there-are-no-teams-added-yet": "There are no teams added yet.", "there-are-no-contacts-added-yet": "There are no contacts added yet.",
"there-are-no-users-added-yet": "There are no users added yet.", "there-are-no-donations-yet": "There are no donations yet",
"this-card-is": "This card is", "there-are-no-donors-yet": "There are no donors yet",
"this-might-take-a-moment": "This might take a moment 👀", "there-are-no-groups-yet": "There are no groups yet",
"this-scanstation-is": "This scanstation is", "there-are-no-organizations-added-yet": "There are no organizations added yet.",
"token": "Token", "there-are-no-runners-added-yet": "There are no runners added yet.",
"total-distance": "total distance", "there-are-no-scans-yet": "There are no scans yet",
"total-donation-amount": "total donation amount", "there-are-no-teams-added-yet": "There are no teams added yet.",
"total-donations": "total donations", "there-are-no-users-added-yet": "There are no users added yet.",
"total-scans": "total scans", "this-card-is": "This card is",
"track": "Track", "this-might-take-a-moment": "This might take a moment 👀",
"track-added": "Track added", "this-scanstation-is": "This scanstation is",
"track-data-is-being-loaded": "Track data is being loaded", "token": "Token",
"track-is-being-added": "Track is being added...", "total-distance": "total distance",
"track-length-in-m": "Track Length in m", "total-donation-amount": "total donation amount",
"track-length-must-be-greater-than-0": "Track length must be greater than 0", "total-donations": "total donations",
"track-name": "Track name", "total-scans": "total scans",
"track-name-must-not-be-empty": "Track name must not be empty", "track": "Track",
"tracks": "Tracks", "track-added": "Track added",
"update-card": "Update Card", "track-data-is-being-loaded": "Track data is being loaded",
"update-password": "Update password", "track-is-being-added": "Track is being added...",
"updated-contact": "Updated contact!", "track-length-in-m": "Track Length in m",
"updated-donor": "updated donor", "track-length-must-be-greater-than-0": "Track length must be greater than 0",
"updated-organization": "updated organization", "track-name": "Track name",
"updated-scan": "updated scan", "track-name-must-not-be-empty": "Track name must not be empty",
"updateing-group": "updateing group...", "tracks": "Tracks",
"updating-card": "Updating card", "update-card": "Update Card",
"updating-organization": "updating organization", "update-password": "Update password",
"updating-permissions": "updating permissions...", "updated-contact": "Updated contact!",
"updating-runner": "Updating runner...", "updated-donor": "updated donor",
"updating-user": "updating user...", "updated-organization": "updated organization",
"updating-your-profile": "Updating your profile...", "updated-scan": "updated scan",
"user-added": "User added", "updateing-group": "updateing group...",
"user-groups": "User Groups", "updating-card": "Updating card",
"user-is-being-added": "User is being added...", "updating-organization": "updating organization",
"user-updated": "User updated", "updating-permissions": "updating permissions...",
"username": "Username", "updating-runner": "Updating runner...",
"users": "Users", "updating-user": "updating user...",
"valid": "Valid", "updating-your-profile": "Updating your profile...",
"valid-city-is-required": "Valid city is required", "user-added": "User added",
"valid-email-is-required": "valid email is required", "user-groups": "User Groups",
"valid-international-phone-number-is-required": "valid international phone number is required...", "user-is-being-added": "User is being added...",
"valid-zipcode-postal-code-is-required": "Valid zipcode/ postal code is required", "user-updated": "User updated",
"verfuegbare": "availdable", "username": "Username",
"welcome_wavinghand": "Welcome 👋", "users": "Users",
"yes-i-copied-the-token": "Yes, I copied the token", "valid": "Valid",
"you-are-going-to-loose-all-permissions-and-access-to-the-runner-system": "You are going to loose all permissions and access to the runner system!", "valid-city-is-required": "Valid city is required",
"you-can-now-use-your-new-password-to-log-in-to-your-account": "You can now use your new password to log in to your account! 🎉", "valid-email-is-required": "valid email is required",
"you-can-provide-a-runner-but-you-dont-have-to": "You can provide a runner, but you don't have to.", "valid-international-phone-number-is-required": "valid international phone number is required...",
"you-dont-have-any-scanstations-yet": "You don't have any scanstations yet", "valid-zipcode-postal-code-is-required": "Valid zipcode/ postal code is required",
"you-have-to-provide-an-organization": "You have to provide an organization", "verfuegbare": "availdable",
"you-must-create-at-least-one-card-or-cancel": "You must create at least one card (or cancel).", "welcome_wavinghand": "Welcome 👋",
"zip-postal-code": "ZIP/ postal code", "yes-i-copied-the-token": "Yes, I copied the token",
"selfservice-registration": "Selfservice registration", "you-are-going-to-loose-all-permissions-and-access-to-the-runner-system": "You are going to loose all permissions and access to the runner system!",
"copied-link-to-clipboard": "Copied link to clipboard", "you-can-now-use-your-new-password-to-log-in-to-your-account": "You can now use your new password to log in to your account! 🎉",
"click-to-copy-the-link-into-your-clipboard": "Click to copy the link into your clipboard" "you-can-provide-a-runner-but-you-dont-have-to": "You can provide a runner, but you don't have to.",
} "you-dont-have-any-scanstations-yet": "You don't have any scanstations yet",
"you-have-to-provide-an-organization": "You have to provide an organization",
"you-have-to-save-your-changes-to-generate-a-link": "You have to save your changes to generate a link.",
"you-must-create-at-least-one-card-or-cancel": "You must create at least one card (or cancel).",
"zip-postal-code": "ZIP/ postal code"
}