Compare commits

..

36 Commits

Author SHA1 Message Date
983ce56048 Merge branch 'dev' into feature/94-runnercard_mgnt
# Conflicts:
#	src/locales/de.json
#	src/locales/en.json
2021-03-25 18:38:31 +01:00
de2fe0e9f1 Sorted translations
ref #94
2021-03-25 18:36:51 +01:00
c3c95bf291 🚀RELEASE v0.8.6
All checks were successful
continuous-integration/drone/push Build is passing
2021-03-25 18:32:22 +01:00
d2050b5948 Merge pull request 'Know Production Bugs 🐞' (#109) from bugfix/107-prod_issues into dev
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #109
2021-03-25 17:30:27 +00:00
6b92405bae Removed middlename search from all files that had it
ref #107
2021-03-25 18:19:44 +01:00
49e87ccb15 Now disabled search by middlename as a quick workaround 🐞
ref #107
2021-03-25 18:16:12 +01:00
50fffef13b Fixed conflicting css
ref #107
2021-03-25 18:06:28 +01:00
82b1811971 Sorted translations 👀
ref #107
2021-03-25 18:00:11 +01:00
aeadef60bb Fixed missing translations for scanstations🌍
ref #107
2021-03-25 17:59:50 +01:00
a1ab65a0e9 Sorted translations🌍
ref #107
2021-03-25 17:49:13 +01:00
17e0805fe6 Errors now toast errors
ref #107
2021-03-25 17:48:54 +01:00
ddd9c396b6 Fixed runner import getting triggered with invalid information
ref #107
2021-03-25 17:46:14 +01:00
ef49e507c1 Fixed outsideclick not clearing import modal🛠
ref #107
2021-03-25 17:34:25 +01:00
fbe74a5d80 Commented out the buggy runner search to prevent bad UX
ref #107
2021-03-25 17:31:53 +01:00
076893981f Fixed mail login bug🐞📧
ref #107
2021-03-25 17:27:38 +01:00
fac059f02c Now w/working editing
ref #94
2021-03-24 16:58:06 +01:00
0313f8cc49 Added runnercard detail/edit modal
ref #94
2021-03-24 16:43:05 +01:00
7ad6b73574 Implemented bulk creation
ref #94
2021-03-23 19:55:55 +01:00
3cd0468b19 Bumped lfk client lib version
ref #94
2021-03-23 18:57:13 +01:00
f46ccb610e Added bulk creation modal to cards view
ref #94
2021-03-23 18:41:00 +01:00
8a32569a3b Added bulk card creation modal
ref #94
2021-03-23 18:35:21 +01:00
535b23ae91 Implemented Add card modal
ref #94
2021-03-23 17:58:13 +01:00
4715978f81 Added message for missing runner/blanco card)
ref #94
2021-03-23 17:39:14 +01:00
a516aa7775 Formatting
ref #94
2021-03-23 17:34:25 +01:00
77e9c205f9 Now importing runner overview
ref #94
2021-03-23 17:34:01 +01:00
e852305400 Now routing the cards page
ref #94
2021-03-23 17:31:11 +01:00
c6a15264b3 Added basic card overview
ref #94
2021-03-23 17:29:21 +01:00
2d0beaaaad Added CardsEmptyState + Emtystate graphic
ref #94
2021-03-23 17:19:10 +01:00
5c5ef95d2b Added basic cards page
ref #94
2021-03-23 17:13:31 +01:00
e838e6f321 🚀RELEASE v0.8.5
All checks were successful
continuous-integration/drone/push Build is passing
2021-03-20 18:47:28 +01:00
ca983c72d4 Merge branch 'dev' of git.odit.services:lfk/frontend into dev 2021-03-20 18:47:08 +01:00
91dd5256e9 Fixed dupliacate mutation 🐞 2021-03-20 18:47:06 +01:00
3d4dc2d72b 🚀RELEASE v0.8.4
All checks were successful
continuous-integration/drone/push Build is passing
2021-03-20 18:31:46 +01:00
ba3471068a CONFIG: add 'demo' as default username/password 2021-03-20 18:31:31 +01:00
5a7b2cf886 Merge branch 'dev' of https://git.odit.services/lfk/frontend into dev 2021-03-20 18:27:18 +01:00
cc926e84fb CONFIG: default_username + default_password 2021-03-20 18:27:15 +01:00
25 changed files with 1705 additions and 810 deletions

View File

@@ -2,11 +2,44 @@
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.8.6](https://git.odit.services/lfk/frontend/compare/0.8.5...0.8.6)
- Merge pull request 'Know Production Bugs 🐞' (#109) from bugfix/107-prod_issues into dev [`d2050b5`](https://git.odit.services/lfk/frontend/commit/d2050b5948890a6077cbb41d82d1a6a1d1106652)
- Errors now toast errors❌ [`17e0805`](https://git.odit.services/lfk/frontend/commit/17e0805fe64f6d181f55b81afa502ee6443ebabe)
- Sorted translations 👀 [`82b1811`](https://git.odit.services/lfk/frontend/commit/82b1811971b974b686e7618b8a381e1589c168f6)
- Fixed missing translations for scanstations🌍 [`aeadef6`](https://git.odit.services/lfk/frontend/commit/aeadef60bbe71da09bb569d20ca7377645beba7f)
- Sorted translations🌍 [`a1ab65a`](https://git.odit.services/lfk/frontend/commit/a1ab65a0e975c02c01c603bf6d95a79ada1caa0b)
- Fixed runner import getting triggered with invalid information [`ddd9c39`](https://git.odit.services/lfk/frontend/commit/ddd9c396b6bfd39a7b1627d4975151943b367ebf)
- Removed middlename search from all files that had it [`6b92405`](https://git.odit.services/lfk/frontend/commit/6b92405bae21e78d694601cbc0b33eed56ef4533)
- Fixed mail login bug🐞📧 [`0768939`](https://git.odit.services/lfk/frontend/commit/076893981ff4f7f17330746c561acc570339adac)
- Now disabled search by middlename as a quick workaround 🐞 [`49e87cc`](https://git.odit.services/lfk/frontend/commit/49e87ccb15a7ed5edea22a3c3e235f7bee07d3f4)
- Fixed conflicting css [`50fffef`](https://git.odit.services/lfk/frontend/commit/50fffef13b8fce885964d8ac277b4ca24d944b2b)
- Commented out the buggy runner search to prevent bad UX [`fbe74a5`](https://git.odit.services/lfk/frontend/commit/fbe74a5d8090553a35576a17c97019939cf4f386)
- Fixed outsideclick not clearing import modal🛠 [`ef49e50`](https://git.odit.services/lfk/frontend/commit/ef49e507c175510eeb466d33f222755fac8a2a0b)
#### [0.8.5](https://git.odit.services/lfk/frontend/compare/0.8.4...0.8.5)
> 20 March 2021
- 🚀RELEASE v0.8.5 [`e838e6f`](https://git.odit.services/lfk/frontend/commit/e838e6f321bef1565a7e4316890a3c600b242e5a)
- Fixed dupliacate mutation 🐞 [`91dd525`](https://git.odit.services/lfk/frontend/commit/91dd5256e9545f62e4342ae5477c36262d6e3401)
#### [0.8.4](https://git.odit.services/lfk/frontend/compare/0.8.3...0.8.4)
> 20 March 2021
- CONFIG: default_username + default_password [`cc926e8`](https://git.odit.services/lfk/frontend/commit/cc926e84fb8bd9d6c9fd37349e25eb802e1bb324)
- 🚀RELEASE v0.8.4 [`3d4dc2d`](https://git.odit.services/lfk/frontend/commit/3d4dc2d72b129f0134ae9f230810c3301dbd5caa)
- CONFIG: add 'demo' as default username/password [`ba34710`](https://git.odit.services/lfk/frontend/commit/ba3471068ab00e2d5dbe21d6d763094e662f8347)
#### [0.8.3](https://git.odit.services/lfk/frontend/compare/0.8.2...0.8.3) #### [0.8.3](https://git.odit.services/lfk/frontend/compare/0.8.2...0.8.3)
> 20 March 2021
- Sorted translation 🌍 [`d6f6d10`](https://git.odit.services/lfk/frontend/commit/d6f6d10cb6b639a1f988e0da4811355750b0f027) - Sorted translation 🌍 [`d6f6d10`](https://git.odit.services/lfk/frontend/commit/d6f6d10cb6b639a1f988e0da4811355750b0f027)
- Smaller bugfixes [`8e04377`](https://git.odit.services/lfk/frontend/commit/8e0437728bd04223a23cdf1879c6c739ca8ebef7) - Smaller bugfixes [`8e04377`](https://git.odit.services/lfk/frontend/commit/8e0437728bd04223a23cdf1879c6c739ca8ebef7)
- More small fixes [`1249904`](https://git.odit.services/lfk/frontend/commit/12499045824c13a3ee35c6cc8c3c3a3130dbec12) - More small fixes [`1249904`](https://git.odit.services/lfk/frontend/commit/12499045824c13a3ee35c6cc8c3c3a3130dbec12)
- 🚀RELEASE v0.8.3 [`fff16e6`](https://git.odit.services/lfk/frontend/commit/fff16e6650cce1231a8d0db43531bf8e3e01f84a)
#### [0.8.2](https://git.odit.services/lfk/frontend/compare/0.8.1...0.8.2) #### [0.8.2](https://git.odit.services/lfk/frontend/compare/0.8.1...0.8.2)

View File

@@ -1,7 +0,0 @@
const config = {
baseurl: 'https://dev.lauf-fuer-kaya.de',
documentserver_key: 'NqZSYTy5AFQ7MppbLW5moqpTk7u7YrNUHKYhKYuThnnya2WpCOIU694hIZT1FzYe',
fallback_username: 'admin',
fallback_password: '72fpTzsev4xUu78QPs2FCbwZ3',
prefersHashRouting: true
};

View File

@@ -14,7 +14,7 @@
</head> </head>
<body> <body>
<span style="display: none;visibility: hidden;" id="buildinfo">RELEASE_INFO-0.8.3-RELEASE_INFO</span> <span style="display: none;visibility: hidden;" id="buildinfo">RELEASE_INFO-0.8.6-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.8.3", "version": "0.8.6",
"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,7 @@
}, },
"license": "CC-BY-NC-SA-4.0", "license": "CC-BY-NC-SA-4.0",
"dependencies": { "dependencies": {
"@odit/lfk-client-js": "0.6.4", "@odit/lfk-client-js": "0.7.0",
"csvtojson": "^2.0.10", "csvtojson": "^2.0.10",
"gridjs": "3.3.0", "gridjs": "3.3.0",
"localforage": "1.9.0", "localforage": "1.9.0",

View File

@@ -1,6 +1,8 @@
const config = { const config = {
baseurl: 'http://localhost:4010', baseurl: 'http://localhost:4010',
documentserver_key: 'NqZSYTy5AFQ7MppbLW5moqpTk7u7YrNUHKYhKYuThnnya2WpCOIU694hIZT1FzYe' documentserver_key: 'NqZSYTy5AFQ7MppbLW5moqpTk7u7YrNUHKYhKYuThnnya2WpCOIU694hIZT1FzYe',
// optional // optional
default_username: 'demo',
default_password: 'demo',
prefersHashRouting: true prefersHashRouting: true
}; };

View File

@@ -1 +0,0 @@
Nostrud tempor dolor aute ea excepteur aute mollit elit eiusmod exercitation. Magna laborum pariatur adipisicing pariatur cupidatat exercitation duis aliquip pariatur sint exercitation deserunt labore. Consectetur id laboris dolore nostrud do velit ipsum. Eu laboris velit do commodo ad ea sint ex cillum. Cillum ipsum qui eiusmod laborum mollit sunt dolore incididunt. Cillum sunt culpa veniam voluptate et qui ut magna anim occaecat ut mollit dolor. Duis irure proident eu incididunt dolore sunt nisi aute dolore amet eu fugiat laboris quis.

View File

@@ -69,11 +69,11 @@
import Donations from "./components/donations/Donations.svelte"; import Donations from "./components/donations/Donations.svelte";
import DonationDetail from "./components/donations/DonationDetail.svelte"; import DonationDetail from "./components/donations/DonationDetail.svelte";
import GroupDetail from "./components/groups/GroupDetail.svelte"; import GroupDetail from "./components/groups/GroupDetail.svelte";
import ScanStationsOverview from "./components/scanstations/ScanStationsOverview.svelte";
import ScanStations from "./components/scanstations/ScanStations.svelte"; import ScanStations from "./components/scanstations/ScanStations.svelte";
import ScanStationDetail from "./components/scanstations/ScanStationDetail.svelte"; import ScanStationDetail from "./components/scanstations/ScanStationDetail.svelte";
import Scans from "./components/scans/Scans.svelte"; import Scans from "./components/scans/Scans.svelte";
import ScanDetail from "./components/scans/ScanDetail.svelte"; import ScanDetail from "./components/scans/ScanDetail.svelte";
import Cards from "./components/cards/Cards.svelte";
store.init(); store.init();
registerSW(); registerSW();
</script> </script>
@@ -185,6 +185,14 @@ import ScanDetail from "./components/scans/ScanDetail.svelte";
<DonationDetail {params} /> <DonationDetail {params} />
</Route> </Route>
</Route> </Route>
<Route path="/cards/*">
<Route path="/">
<Cards />
</Route>
<!-- <Route path="/:scanid" let:params>
<ScanDetail {params} />
</Route> -->
</Route>
<Route path="/scans/*"> <Route path="/scans/*">
<Route path="/"> <Route path="/">
<Scans /> <Scans />

View File

@@ -5,10 +5,11 @@
store.init(); store.init();
import { OpenAPI, AuthService } from "@odit/lfk-client-js"; import { OpenAPI, AuthService } from "@odit/lfk-client-js";
import Footer from "../general/Footer.svelte"; import Footer from "../general/Footer.svelte";
import isEmail from "validator/es/lib/isEmail";
import Toastify from "toastify-js"; import Toastify from "toastify-js";
// ------ // ------
let username = "demo"; let username = config.default_username || "";
let password = "demo"; let password = config.default_password || "";
let is_blocked_by_autologin = false; let is_blocked_by_autologin = false;
let last_loginclick_processed = true; let last_loginclick_processed = true;
@@ -36,10 +37,19 @@
text: $_("login_is_checked"), text: $_("login_is_checked"),
duration: 500, duration: 500,
}).showToast(); }).showToast();
AuthService.authControllerLogin({ let postdata = {};
username, if (isEmail(username)) {
password, postdata = {
}) email: username,
password,
};
} else {
postdata = {
username,
password,
};
}
AuthService.authControllerLogin(postdata)
.then(async (result) => { .then(async (result) => {
await localForage.setItem("logindata", result); await localForage.setItem("logindata", result);
OpenAPI.TOKEN = result.access_token; OpenAPI.TOKEN = result.access_token;

View File

@@ -0,0 +1,158 @@
<script>
import { _ } from "svelte-i18n";
import { clickOutside } from "../base/outsideclick";
import { focusTrap } from "svelte-focus-trap";
import { RunnerCardService } from "@odit/lfk-client-js";
import Toastify from "toastify-js";
export let bulk_modal_open;
export let current_cards;
function focus(el) {
el.focus();
}
$: card_count = 0;
$: is_card_count_valid = card_count > 0;
$: processed_last_submit = true;
$: createbtnenabled = is_card_count_valid;
(() => {
document.onkeydown = (e) => {
e = e || window.event;
if (e.key === "Escape") {
bulk_modal_open = false;
}
if (e.keyCode === 13) {
if (createbtnenabled === true) {
createbtnenabled = false;
submit();
}
}
};
})();
function submit() {
if (processed_last_submit === true) {
processed_last_submit = false;
const toast = Toastify({
text: $_("creating-blanco-cards"),
duration: -1,
}).showToast();
RunnerCardService.runnerCardControllerPostBlancoBulk(card_count)
.then((result) => {
bulk_modal_open = false;
//
Toastify({
text: $_("created-blanco-cards"),
duration: 500,
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
}).showToast();
})
.catch((err) => {
//
})
.finally(() => {
processed_last_submit = true;
//
toast.hideToast();
});
}
}
</script>
{#if bulk_modal_open}
<div
class="fixed z-10 inset-0 overflow-y-auto"
use:focusTrap
use:clickOutside
on:click_outside={() => {
bulk_modal_open = false;
}}>
<div
class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
<div
class="absolute inset-0 bg-gray-500 opacity-75"
data-id="modal_backdrop" />
</div>
<span
class="hidden sm:inline-block sm:align-middle sm:h-screen"
aria-hidden="true">&#8203;</span>
<div
class="inline-block align-bottom bg-white rounded-lg text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
role="dialog"
aria-modal="true"
aria-labelledby="modal-headline">
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
<div class="sm:flex sm:items-start">
<div
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10">
<svg
class="h-6 w-6 text-blue-600"
fill="currentColor"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width="24"
height="24"><path fill="none" d="M0 0h24v24H0z" />
<path
fill="currentColor"
d="M2 4h2v16H2V4zm4 0h1v16H6V4zm2 0h2v16H8V4zm3 0h2v16h-2V4zm3 0h2v16h-2V4zm3 0h1v16h-1V4zm2 0h3v16h-3V4z" /></svg>
</div>
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
<h3 class="text-lg leading-6 font-medium text-gray-900">
{$_('create-bulk-blanco-cards')}
</h3>
<div class="mt-2 mb-6">
<p class="text-sm text-gray-500">
{$_('just-enter-how-many-you-want-and-the-system-will-create-them')}
</p>
</div>
<div class="grid grid-cols-6 gap-6">
<div class="col-span-6">
<label
for="amount"
class="block text-sm font-medium text-gray-700">{$_('amount')}</label>
<div class="mt-1 flex rounded-md shadow-sm">
<input
autocomplete="off"
class:border-red-500={!is_card_count_valid}
class:focus:border-red-500={!is_card_count_valid}
class:focus:ring-red-500={!is_card_count_valid}
bind:value={card_count}
type="number"
step="1"
name="amount"
class="focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full rounded-none rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 p-2"
placeholder="400" />
<span
class="inline-flex items-center px-3 rounded-r-md border border-gray-300 bg-gray-50 text-gray-500 text-sm">{$_('cards')}</span>
</div>
{#if !is_card_count_valid}
<span
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
{$_('you-must-create-at-least-one-card-or-cancel')}
</span>
{/if}
</div>
</div>
</div>
</div>
</div>
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
<button
disabled={!createbtnenabled}
class:opacity-50={!createbtnenabled}
on:click={submit}
type="button"
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">
{$_('create')}
</button>
<button
on:click={() => {
bulk_modal_open = false;
}}
type="button"
class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">
{$_('cancel')}
</button>
</div>
</div>
</div>
</div>
{/if}

View File

@@ -0,0 +1,170 @@
<script>
import { _ } from "svelte-i18n";
import { clickOutside } from "../base/outsideclick";
import { focusTrap } from "svelte-focus-trap";
import {
RunnerCardService,
RunnerService,
ScanService,
} from "@odit/lfk-client-js";
import Select from "svelte-select";
import Toastify from "toastify-js";
export let modal_open;
export let current_cards;
const getRunnerLabel = (option) =>
option.firstname + " " + (option.middlename || "") + " " + option.lastname;
const filterRunners = (label, filterText, option) =>
label.toLowerCase().includes(filterText.toLowerCase()) ||
option.value.toString().startsWith(filterText.toLowerCase());
function focus(el) {
el.focus();
}
$: runner = 0;
$: runners = [];
$: enabled = true;
$: processed_last_submit = true;
RunnerService.runnerControllerGetAll().then((val) => {
runners = val.map((r) => {
return { label: getRunnerLabel(r), value: r };
});
});
$: createbtnenabled = true;
(() => {
document.onkeydown = (e) => {
e = e || window.event;
if (e.key === "Escape") {
modal_open = false;
}
if (e.keyCode === 13) {
if (createbtnenabled === true) {
createbtnenabled = false;
submit();
}
}
};
})();
function submit() {
if (processed_last_submit === true) {
processed_last_submit = false;
const toast = Toastify({
text: $_("adding-card"),
duration: -1,
}).showToast();
let postdata = {
runner,
enabled,
};
RunnerCardService.runnerCardControllerPost(postdata)
.then((result) => {
runner = 0;
modal_open = false;
//
Toastify({
text: $_("card-added"),
duration: 500,
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
}).showToast();
current_cards.push(result);
current_cards = current_cards;
})
.catch((err) => {
//
})
.finally(() => {
processed_last_submit = true;
//
toast.hideToast();
});
}
}
</script>
{#if modal_open}
<div
class="fixed z-10 inset-0 overflow-y-auto"
use:focusTrap
use:clickOutside
on:click_outside={() => {
modal_open = false;
}}>
<div
class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
<div
class="absolute inset-0 bg-gray-500 opacity-75"
data-id="modal_backdrop" />
</div>
<span
class="hidden sm:inline-block sm:align-middle sm:h-screen"
aria-hidden="true">&#8203;</span>
<div
class="inline-block align-bottom bg-white rounded-lg text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
role="dialog"
aria-modal="true"
aria-labelledby="modal-headline">
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
<div class="sm:flex sm:items-start">
<div
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10">
<svg
class="h-6 w-6 text-blue-600"
fill="currentColor"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width="24"
height="24"><path fill="none" d="M0 0h24v24H0z" />
<path
fill="currentColor"
d="M2 4h2v16H2V4zm4 0h1v16H6V4zm2 0h2v16H8V4zm3 0h2v16h-2V4zm3 0h2v16h-2V4zm3 0h1v16h-1V4zm2 0h3v16h-3V4z" /></svg>
</div>
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
<h3 class="text-lg leading-6 font-medium text-gray-900">
{$_('create-a-new-card')}
</h3>
<div class="mt-2 mb-6">
<p class="text-sm text-gray-500">
{$_('you-can-provide-a-runner-but-you-dont-have-to')}
{$_('if-you-want-to-create-multiple-blanco-cards-try-the-add-bulk-button')}
</p>
</div>
<div class="grid grid-cols-6 gap-6">
<div class="col-span-6">
<label
for="donor"
class="block text-sm font-medium text-gray-700">{$_('runner')}</label>
<Select
containerClasses="rounded-l-md 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"
itemFilter={(label, filterText, option) => filterRunners(label, filterText, option)}
items={runners}
showChevron={true}
placeholder={$_('search-for-runner-by-name-or-id')}
noOptionsMessage={$_('no-runners-found')}
on:select={(selectedValue) => (runner = selectedValue.detail.value.id)}
on:clear={() => (runner = null)} />
</div>
</div>
</div>
</div>
</div>
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
<button
disabled={!createbtnenabled}
class:opacity-50={!createbtnenabled}
on:click={submit}
type="button"
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">
{$_('create')}
</button>
<button
on:click={() => {
modal_open = false;
}}
type="button"
class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">
{$_('cancel')}
</button>
</div>
</div>
</div>
</div>
{/if}

View File

@@ -0,0 +1,197 @@
<script>
import { _ } from "svelte-i18n";
import { clickOutside } from "../base/outsideclick";
import { focusTrap } from "svelte-focus-trap";
import { RunnerCardService, RunnerService } from "@odit/lfk-client-js";
import Select from "svelte-select";
import Toastify from "toastify-js";
export let edit_modal_open;
export let current_cards;
export let edit_card_id;
const getRunnerLabel = (option) =>
option.firstname + " " + (option.middlename || "") + " " + option.lastname;
const filterRunners = (label, filterText, option) =>
label.toLowerCase().includes(filterText.toLowerCase()) ||
option.value.toString().startsWith(filterText.toLowerCase());
function focus(el) {
el.focus();
}
$: runner = {};
$: runners = [];
$: editable = {};
$: original_data = {};
$: enabled = true;
$: processed_last_submit = true;
RunnerService.runnerControllerGetAll().then((val) => {
runners = val.map((r) => {
return { label: getRunnerLabel(r), value: r };
});
});
RunnerCardService.runnerCardControllerGetOne(edit_card_id).then((val) => {
runner = Object.assign(
{ runner },
{ label: getRunnerLabel(val.runner), value: val.runner }
);
val.runner = val.runner?.id;
editable = Object.assign(editable, val);
original_data = Object.assign(original_data, val);
});
$: createbtnenabled = !(
JSON.stringify(editable) === JSON.stringify(original_data)
);
(() => {
document.onkeydown = (e) => {
e = e || window.event;
if (e.key === "Escape") {
edit_modal_open = false;
}
if (e.keyCode === 13) {
if (createbtnenabled === true) {
createbtnenabled = false;
submit();
}
}
};
})();
function submit() {
if (processed_last_submit === true) {
processed_last_submit = false;
const toast = Toastify({
text: $_("updating-card"),
duration: -1,
}).showToast();
RunnerCardService.runnerCardControllerPut(original_data.id, editable)
.then((result) => {
runner = {};
editable = {};
original_data = {};
edit_modal_open = false;
//
Toastify({
text: $_("card-updated"),
duration: 500,
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
}).showToast();
current_cards[
current_cards.findIndex((c) => c.id === edit_card_id)
] = result;
current_cards = current_cards;
})
.catch((err) => {
//
})
.finally(() => {
processed_last_submit = true;
//
toast.hideToast();
});
}
}
</script>
{#if edit_modal_open}
<div
class="fixed z-10 inset-0 overflow-y-auto"
use:focusTrap
use:clickOutside
on:click_outside={() => {
edit_modal_open = false;
}}>
<div
class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
<div
class="absolute inset-0 bg-gray-500 opacity-75"
data-id="modal_backdrop" />
</div>
<span
class="hidden sm:inline-block sm:align-middle sm:h-screen"
aria-hidden="true">&#8203;</span>
<div
class="inline-block align-bottom bg-white rounded-lg text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
role="dialog"
aria-modal="true"
aria-labelledby="modal-headline">
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
<div class="sm:flex sm:items-start">
<div
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10">
<svg
class="h-6 w-6 text-blue-600"
fill="currentColor"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width="24"
height="24"><path fill="none" d="M0 0h24v24H0z" />
<path
fill="currentColor"
d="M2 4h2v16H2V4zm4 0h1v16H6V4zm2 0h2v16H8V4zm3 0h2v16h-2V4zm3 0h2v16h-2V4zm3 0h1v16h-1V4zm2 0h3v16h-3V4z" /></svg>
</div>
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
<h3 class="text-lg leading-6 font-medium text-gray-900">
{$_('edit-a-card')}
</h3>
<div class="mt-2 mb-6">
<p class="text-sm text-gray-500">
{$_('you-can-provide-a-runner-but-you-dont-have-to')}
</p>
</div>
<div class="grid grid-cols-6 gap-6">
<div class="col-span-6">
<label
for="runner"
class="block text-sm font-medium text-gray-700">{$_('runner')}</label>
<Select
containerClasses="rounded-l-md 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"
itemFilter={(label, filterText, option) => filterRunners(label, filterText, option)}
items={runners}
showChevron={true}
placeholder={$_('search-for-runner-by-name-or-id')}
noOptionsMessage={$_('no-runners-found')}
bind:selectedValue={runner}
on:select={(selectedValue) => (editable.runner = selectedValue.detail.value.id)}
on:clear={() => (editable.runner = null)} />
</div>
<div class="col-span-6">
<p class="text-gray-500">
<input
id="enabled"
on:change={() => {
editable.enabled = !editable.enabled;
}}
name="enabled"
type="checkbox"
checked={editable.enabled}
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" />
{$_('this-card-is')}
{#if editable.enabled}
{$_('enabled')}
{:else}{$_('disabled')}{/if}
</p>
</div>
</div>
</div>
</div>
</div>
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
<button
disabled={!createbtnenabled}
class:opacity-50={!createbtnenabled}
on:click={submit}
type="button"
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">
{$_('save-changes')}
</button>
<button
on:click={() => {
edit_modal_open = false;
}}
type="button"
class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">
{$_('cancel')}
</button>
</div>
</div>
</div>
</div>
{/if}

View File

@@ -0,0 +1,46 @@
<script>
import { _ } from "svelte-i18n";
import store from "../../store";
import AddCardBulkModal from "./AddCardBulkModal.svelte";
import AddCardModal from "./AddCardModal.svelte";
import CardDetailModal from "./CardDetailModal.svelte";
import CardsOverview from "./CardsOverview.svelte";
$: current_cards = [];
export let modal_open = false;
export let bulk_modal_open = false;
export let edit_modal_open = true;
export let edit_card_id = 1;
</script>
<section class="container p-5">
<span class="mb-1 text-3xl font-extrabold leading-tight">
{$_('cards')}
{#if store.state.jwtinfo.userdetails.permissions.includes('CARD:CREATE')}
<button
on:click={() => {
modal_open = true;
}}
type="button"
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">
{$_('add-card')}
</button>
<button
on:click={() => {
bulk_modal_open = true;
}}
type="button"
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">
{$_('create-bulk-cards')}
</button>
{/if}
</span>
<CardsOverview bind:current_cards />
</section>
{#if store.state.jwtinfo.userdetails.permissions.includes('CARD:CREATE')}
<AddCardModal bind:current_cards bind:modal_open />
<AddCardBulkModal bind:current_cards bind:bulk_modal_open />
{/if}
{#if store.state.jwtinfo.userdetails.permissions.includes('CARD:UPDATE')}
<CardDetailModal bind:current_cards bind:edit_modal_open bind:edit_card_id/>
{/if}

View File

@@ -0,0 +1,12 @@
<script>
import { _ } from "svelte-i18n";
import cards_empty from "./cards.svg";
</script>
<div class="text-center items-center justify-center">
<p class="mb-16 text-lg text-gray-500">
<img class="m-auto" style="height:15rem" src={cards_empty} alt="" />
<span class="font-bold">{$_('there-are-no-cards-yet')}</span><br />
<span>{$_('add-your-first-card')}</span>
</p>
</div>

View File

@@ -0,0 +1,171 @@
<script>
import { getLocaleFromNavigator, _ } from "svelte-i18n";
import { RunnerCardService } from "@odit/lfk-client-js";
import store from "../../store";
import Toastify from "toastify-js";
import CardsEmptyState from "./CardsEmptyState.svelte";
$: searchvalue = "";
$: active_deletes = [];
export let current_cards = [];
const cards_promise = RunnerCardService.runnerCardControllerGetAll().then(
(val) => {
current_cards = val;
}
);
function should_display_based_on_id(id) {
if (searchvalue.toString().slice(-1) === "*") {
return id.toString().startsWith(searchvalue.replace("*", ""));
}
return id.toString() === searchvalue;
}
</script>
{#if store.state.jwtinfo.userdetails.permissions.includes('CARD:GET')}
{#await cards_promise}
<div
class="bg-teal-lightest border-t-4 border-teal rounded-b text-teal-darkest px-4 py-3 shadow-md my-2"
role="alert">
<p class="font-bold">{$_('loading-cards')}</p>
<p class="text-sm">{$_('this-might-take-a-moment')}</p>
</div>
{:then}
{#if current_cards.length === 0}
<CardsEmptyState />
{:else}
<input
type="search"
bind:value={searchvalue}
placeholder={$_('datatable.search')}
aria-label={$_('datatable.search')}
class="gridjs-input gridjs-search-input mb-4" />
<div
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
<table class="divide-y divide-gray-200 w-full">
<thead class="bg-gray-50">
<tr>
<th
scope="col"
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
{$_('code')}
</th>
<th
scope="col"
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
{$_('runner')}
</th>
<th
scope="col"
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
{$_('status')}
</th>
<th scope="col" class="relative px-6 py-3">
<span class="sr-only">{$_('action')}</span>
</th>
</tr>
</thead>
<tbody class="divide-y divide-gray-200">
{#each current_cards as card}
{#if card.code
.toLowerCase()
.includes(
searchvalue.toLowerCase()
) || card.runner?.firstname
.toLowerCase()
.includes(
searchvalue.toLowerCase()
) || card.runner?.middlename
.toLowerCase()
.includes(
searchvalue.toLowerCase()
) || card.runner?.lastname
.toLowerCase()
.includes(
searchvalue.toLowerCase()
) || should_display_based_on_id(card.id)}
<tr data-rowid="card_{card.id}">
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center">{card.code}</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center">
{#if card.runner}
<a
href="../runners/{card.runner.id}"
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800">{card.runner.firstname}
{card.runner.middlename || ''}
{card.runner.lastname}</a>
{:else}{$_('non-blanko')}{/if}
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center">
{#if card.enabled}
<span
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">{$_('enabled_large')}</span>
{:else}
<span
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-red-100 text-red-800">{$_('disabled')}</span>
{/if}
</div>
</td>
{#if active_deletes[card.id] === true}
<td
class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
<button
on:click={() => {
active_deletes[card.id] = false;
}}
tabindex="0"
class="ml-4 text-indigo-600 hover:text-indigo-900 cursor-pointer">{$_('cancel-delete')}</button>
<button
on:click={() => {
RunnerCardService.runnerCardControllerRemove(card.id, false).then(
(resp) => {
current_cards = current_cards.filter(
(obj) => obj.id !== card.id
);
Toastify({
text: $_('card-deleted'),
duration: 500,
backgroundColor:
'linear-gradient(to right, #00b09b, #96c93d)',
}).showToast();
}
);
}}
tabindex="0"
class="ml-4 text-red-600 hover:text-red-900 cursor-pointer">{$_('confirm-delete')}</button>
</td>
{:else}
<td
class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
<a
href="./{card.id}"
class="text-indigo-600 hover:text-indigo-900">{$_('details')}</a>
{#if store.state.jwtinfo.userdetails.permissions.includes('CARD:DELETE')}
<button
on:click={() => {
active_deletes[card.id] = true;
}}
tabindex="0"
class="ml-4 text-red-600 hover:text-red-900 cursor-pointer">{$_('delete')}</button>
{/if}
</td>
{/if}
</tr>
{/if}
{/each}
</tbody>
</table>
</div>
{/if}
{:catch error}
<div class="text-white px-6 py-4 border-0 rounded relative mb-4 bg-red-500">
<span class="inline-block align-middle mr-8">
<b class="capitalize">{$_('general_promise_error')}</b>
{error}
</span>
</div>
{/await}
{/if}

View File

@@ -0,0 +1 @@
<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 653.9 247.6"><path d="M272 211l-53 12s-11-2-1-17l4-4 27-14v-2l-6-41-2-16 17-17 4-3 44 41v1l-19 33z" fill="#ffb7b7"/><path d="M253 198l-54 13a6 6 0 01-5-7 16 16 0 012-5 48 48 0 016-9l28-14-4-24-1-12-2-8-2-16 21-19 22 21 22 20-3 5-3 7-17 30-3 6z" fill="#ffb7b7"/><path d="M346 190s-20-1-28-15a24 24 0 01-3-14l-8-17-11-23-30-4-2 1-21 19-7 6-10 9-49 44a37 37 0 01-7 9 50 50 0 01-9 7c-10 5-24 9-44 7L10 248 0 176l89-29 131-86 89 23 41 58z" fill="#ffb7b7"/><path d="M648 0H275a5 5 0 00-5 5v221a5 5 0 005 6h373a5 5 0 006-6V5a5 5 0 00-6-5z" fill="#fff"/><path d="M648 0H275a5 5 0 00-5 5v221a5 5 0 005 6h373a5 5 0 006-6V5a5 5 0 00-6-5zm4 226a4 4 0 01-4 4H275a4 4 0 01-3-4V5a4 4 0 013-3h373a4 4 0 014 3z" fill="#3f3d56"/><path d="M312 30a9 9 0 119-9 9 9 0 01-9 9zm0-17a8 8 0 107 8 8 8 0 00-7-8z" fill="#6c63ff"/><path d="M297 21a8 8 0 016-8 8 8 0 100 16 8 8 0 01-6-8zM349 130a7 7 0 01-7-7v-20a7 7 0 0114 0v20a7 7 0 01-7 7zM368 130a7 7 0 01-7-7v-20a7 7 0 0114 0v20a7 7 0 01-7 7zM386 130a7 7 0 01-7-7v-20a7 7 0 0114 0v20a7 7 0 01-7 7zM415 130a7 7 0 01-7-7v-20a7 7 0 0114 0v20a7 7 0 01-7 7zM434 130a7 7 0 01-7-7v-20a7 7 0 0113 0v20a7 7 0 01-6 7zM452 130a7 7 0 01-7-7v-20a7 7 0 0114 0v20a7 7 0 01-7 7zM481 130a7 7 0 01-7-7v-20a7 7 0 0114 0v20a7 7 0 01-7 7zM499 130a7 7 0 01-7-7v-20a7 7 0 0114 0v20a7 7 0 01-7 7zM518 130a7 7 0 01-7-7v-20a7 7 0 0114 0v20a7 7 0 01-7 7zM546 130a7 7 0 01-7-7v-20a7 7 0 0114 0v20a7 7 0 01-7 7zM565 130a7 7 0 01-7-7v-20a7 7 0 0114 0v20a7 7 0 01-7 7zM583 130a7 7 0 01-7-7v-20a7 7 0 0114 0v20a7 7 0 01-7 7z" fill="#6c63ff"/><path d="M396 208h-99a5 5 0 110-10h99a5 5 0 010 10zM364 188h-35a5 5 0 110-10h35a5 5 0 110 10z" fill="#e6e6e6"/><path fill="#3f3d56" d="M271 46h381v2H271z"/><path opacity=".1" d="M228 203l-1-2 33-15 8-27-12-10 1-1 13 10-8 30-34 15zM196 199l-9 4-17 2a50 50 0 01-9 7l-16-1-26-1 88-74 18 4-29 59z"/><path d="M318 175l-8 1-47 4-29 1-38 18-9 4-70 8 95-81 11 2 20 5 22 5 18 1 24 1 20 1a13 13 0 0112 13c0 7-5 14-21 17z" fill="#ffb7b7"/><path d="M325 170s-7-2-9-9c-2-4-1-9 3-15l1 1c-3 6-4 10-3 14 2 5 9 7 9 7zM197 197l34-16v2l-33 16zM218 135l48-19v2l-41 16 35 6v2l-42-7z" opacity=".1"/></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -74,20 +74,12 @@
.toLowerCase() .toLowerCase()
.includes( .includes(
searchvalue.toLowerCase() searchvalue.toLowerCase()
) || donation.donor.middlename ) || donation.donor.lastname
.toLowerCase()
.includes(
searchvalue.toLowerCase()
) || donation.donor.lastname
.toLowerCase() .toLowerCase()
.includes( .includes(
searchvalue.toLowerCase() searchvalue.toLowerCase()
) || donation.runner?.firstname ) || donation.runner?.firstname
.toLowerCase() .toLowerCase()
.includes(
searchvalue.toLowerCase()
) || donation.runner?.middlename
.toLowerCase()
.includes( .includes(
searchvalue.toLowerCase() searchvalue.toLowerCase()
) || donation.runner?.lastname ) || donation.runner?.lastname

View File

@@ -88,11 +88,7 @@
.toLowerCase() .toLowerCase()
.includes( .includes(
searchvalue.toLowerCase() searchvalue.toLowerCase()
) || donor.middlename ) || donor.lastname
.toLowerCase()
.includes(
searchvalue.toLowerCase()
) || donor.lastname
.toLowerCase() .toLowerCase()
.includes( .includes(
searchvalue.toLowerCase() searchvalue.toLowerCase()

View File

@@ -6,13 +6,15 @@
let html = ""; let html = "";
async function load() { async function load() {
let md = await fetch("/imprint_" + getLocaleFromNavigator() + ".md"); let md = await fetch("/imprint_" + getLocaleFromNavigator() + ".md");
if((await md.text()).includes("<meta")){ let text = (await md.text()).toString();
if(text.includes("<meta")){
md.ok=false md.ok=false
} }
if (!md.ok) { if (!md.ok) {
md = await fetch("/imprint_en.md"); md = await fetch("/imprint_en.md");
text = await md.text();
} }
html = marked(await md.text()); html = marked(text);
} }
const promise = load(); const promise = load();
</script> </script>

View File

@@ -6,13 +6,15 @@
let html = ""; let html = "";
async function load() { async function load() {
let md = await fetch("/privacy_" + getLocaleFromNavigator() + ".md"); let md = await fetch("/privacy_" + getLocaleFromNavigator() + ".md");
if((await md.text()).includes("<meta")){ let text = (await md.text()).toString();
if(text.includes("<meta")){
md.ok=false md.ok=false
} }
if (!md.ok) { if (!md.ok) {
md = await fetch("/privacy_en.md"); md = await fetch("/privacy_en.md");
text = await md.text();
} }
html = marked(await md.text()); html = marked(text);
} }
const promise = load(); const promise = load();
</script> </script>

View File

@@ -19,6 +19,11 @@
export let current_runners; export let current_runners;
export let import_modal_open; export let import_modal_open;
$: searchvalue = ""; $: searchvalue = "";
$: importButtonEnabled =
recent_processed &&
(!(selected_org_or_team == "" || selected_org_or_team == null) ||
!(passed_org?.id == null || passed_org?.id == 0) ||
!(passed_team?.id == null || passed_team?.id == 0));
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
function cancelModal() { function cancelModal() {
json_output = []; json_output = [];
@@ -44,7 +49,10 @@
groups = groups.concat(orgs); groups = groups.concat(orgs);
RunnerTeamService.runnerTeamControllerGetAll().then((val) => { RunnerTeamService.runnerTeamControllerGetAll().then((val) => {
const teams = val.map((r) => { const teams = val.map((r) => {
return { label: `${r.parentGroup.name} > ${r.name}`, value: `TEAM_${r.id}` }; return {
label: `${r.parentGroup.name} > ${r.name}`,
value: `TEAM_${r.id}`,
};
}); });
groups = groups.concat(teams); groups = groups.concat(teams);
}); });
@@ -120,6 +128,13 @@
.catch((err) => { .catch((err) => {
toast.hideToast(); toast.hideToast();
recent_processed = true; recent_processed = true;
Toastify({
text: $_("error-during-import"),
duration: 500,
backgroundColor:
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
}).showToast();
cancelModal();
}); });
} }
if (opened_from === "TeamDetail") { if (opened_from === "TeamDetail") {
@@ -137,6 +152,13 @@
.catch((err) => { .catch((err) => {
toast.hideToast(); toast.hideToast();
recent_processed = true; recent_processed = true;
Toastify({
text: $_("error-during-import"),
duration: 500,
backgroundColor:
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
}).showToast();
cancelModal();
}); });
} }
if (opened_from === "RunnerOverview") { if (opened_from === "RunnerOverview") {
@@ -160,6 +182,13 @@
.catch((err) => { .catch((err) => {
toast.hideToast(); toast.hideToast();
recent_processed = true; recent_processed = true;
Toastify({
text: $_("error-during-import"),
duration: 500,
backgroundColor:
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
}).showToast();
cancelModal();
}); });
} }
if (selected_org_or_team.includes("TEAM_")) { if (selected_org_or_team.includes("TEAM_")) {
@@ -182,6 +211,13 @@
.catch((err) => { .catch((err) => {
toast.hideToast(); toast.hideToast();
recent_processed = true; recent_processed = true;
Toastify({
text: $_("error-during-import"),
duration: 500,
backgroundColor:
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
}).showToast();
cancelModal();
}); });
} }
} }
@@ -195,7 +231,7 @@
use:focusTrap use:focusTrap
use:clickOutside use:clickOutside
on:click_outside={() => { on:click_outside={() => {
import_modal_open = false; cancelModal();
}}> }}>
<div <div
class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0"> class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
@@ -349,6 +385,8 @@
</table> </table>
</div> </div>
<button <button
disabled={!importButtonEnabled}
class:opacity-50={!importButtonEnabled}
on:click={importAction} on:click={importAction}
type="button" type="button"
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm"> class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">

View File

@@ -178,7 +178,7 @@
generateSponsoringContract('de'); generateSponsoringContract('de');
}} }}
type="submit" type="submit"
class="block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900 inline-flex" class="block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900"
role="menuitem"> role="menuitem">
{$_('german')} {$_('german')}
</button> </button>
@@ -187,7 +187,7 @@
generateSponsoringContract('en'); generateSponsoringContract('en');
}} }}
type="submit" type="submit"
class="block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900 inline-flex" class="block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900"
role="menuitem"> role="menuitem">
{$_('english')} {$_('english')}
</button> </button>
@@ -249,11 +249,7 @@
.toLowerCase() .toLowerCase()
.includes( .includes(
searchvalue.toLowerCase() searchvalue.toLowerCase()
) || runner.middlename ) || runner.lastname
.toLowerCase()
.includes(
searchvalue.toLowerCase()
) || runner.lastname
.toLowerCase() .toLowerCase()
.includes( .includes(
searchvalue.toLowerCase() searchvalue.toLowerCase()

View File

@@ -81,10 +81,6 @@
.includes( .includes(
searchvalue.toLowerCase() searchvalue.toLowerCase()
) || scan.runner?.firstname ) || scan.runner?.firstname
.toLowerCase()
.includes(
searchvalue.toLowerCase()
) || scan.runner?.middlename
.toLowerCase() .toLowerCase()
.includes( .includes(
searchvalue.toLowerCase() searchvalue.toLowerCase()

View File

@@ -86,7 +86,7 @@
<div class="mt-2 mb-6"> <div class="mt-2 mb-6">
<label <label
for="token" for="token"
class="block text-sm font-medium text-gray-700">Token</label> class="block text-sm font-medium text-gray-700">{$_('token')}</label>
<div on:click={copy} class="inline-flex"> <div on:click={copy} class="inline-flex">
<p <p
name="token" name="token"

View File

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

View File

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