Restructure translation files
This commit is contained in:
@@ -31,7 +31,7 @@ function confirmPressed() {
|
||||
prepend-icon="mdi-close"
|
||||
color="orange"
|
||||
>
|
||||
{{ $t("dialog.cancel") }}
|
||||
{{ $t("misc.actions.cancel") }}
|
||||
</outlined-button>
|
||||
|
||||
<outlined-button
|
||||
@@ -39,7 +39,7 @@ function confirmPressed() {
|
||||
prepend-icon="mdi-check"
|
||||
color="red"
|
||||
>
|
||||
{{ $t("dialog.confirm") }}
|
||||
{{ $t("misc.actions.confirm") }}
|
||||
</outlined-button>
|
||||
</template>
|
||||
</action-dialog>
|
||||
|
||||
@@ -22,7 +22,7 @@ watch(() => route.path, () => {
|
||||
<v-spacer />
|
||||
|
||||
<v-col>
|
||||
{{ $t('youAreHere') }}
|
||||
{{ $t('misc.youAreHere') }}
|
||||
<v-breadcrumbs :items="routeItems">
|
||||
<template v-slot:title="{ item }">
|
||||
{{ item.title.charAt(0).toUpperCase() + item.title.slice(1) }}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
height="100%"
|
||||
:rounded="false"
|
||||
>
|
||||
{{ $t('allBands', 2) }}
|
||||
{{ $t('band.allBands', 2) }}
|
||||
</v-btn>
|
||||
|
||||
<v-divider vertical />
|
||||
@@ -26,7 +26,7 @@
|
||||
height="100%"
|
||||
:rounded="false"
|
||||
>
|
||||
{{ $t('allConcerts', 2) }}
|
||||
{{ $t('concert.allConcerts', 2) }}
|
||||
</v-btn>
|
||||
|
||||
<v-divider vertical />
|
||||
@@ -38,7 +38,7 @@
|
||||
height="100%"
|
||||
:rounded="false"
|
||||
>
|
||||
{{ $t('allLocations', 2) }}
|
||||
{{ $t('location.allLocations', 2) }}
|
||||
</v-btn>
|
||||
|
||||
<v-divider vertical />
|
||||
|
||||
@@ -52,12 +52,12 @@ defineProps({
|
||||
<template #append>
|
||||
<div>
|
||||
<div class="text-secondary font-weight-medium text-h6 pb-1">
|
||||
{{ $t('from') + ' ' + lowestTicketPrice(concerts) + ' €' }}
|
||||
{{ $t('misc.from') + ' ' + lowestTicketPrice(concerts) + ' €' }}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<v-btn variant="flat" color="secondary">
|
||||
{{ $t('more') }}
|
||||
{{ $t('misc.actions.more') }}
|
||||
</v-btn>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -71,16 +71,16 @@ defineProps({
|
||||
<template #append>
|
||||
<div>
|
||||
<div class="text-secondary font-weight-medium text-h6 pb-1">
|
||||
{{ $t('from') + ' ' + concert.price.toFixed(2) + ' €' }}
|
||||
{{ $t('misc.from') + ' ' + concert.price.toFixed(2) + ' €' }}
|
||||
</div>
|
||||
|
||||
<div v-if="concert.inStock == 0 && showButton" class="text-h6">
|
||||
{{ $t('soldOut') }}
|
||||
{{ $t('concert.concertSoldOut') }}
|
||||
</div>
|
||||
|
||||
<div v-else-if="showButton">
|
||||
<v-btn variant="flat" color="secondary">
|
||||
{{ $t('goToTheConcert') }}
|
||||
{{ $t('concert.goToTheConcert') }}
|
||||
</v-btn>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ defineProps({
|
||||
@click="router.push('locations/details/' + location.name.replaceAll(' ', '-').toLowerCase())"
|
||||
>
|
||||
<div>
|
||||
{{ nrOfConcerts }} {{ $t('concert', nrOfConcerts) }}
|
||||
{{ nrOfConcerts }} {{ $t('concert.concert', nrOfConcerts) }}
|
||||
</div>
|
||||
</card-view-top-image>
|
||||
</template>
|
||||
@@ -48,7 +48,7 @@ defineProps({
|
||||
>
|
||||
<template #content>
|
||||
<div class="text-caption">
|
||||
{{ $t('date') }}
|
||||
{{ $t('misc.date') }}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
@@ -56,7 +56,7 @@ defineProps({
|
||||
</div>
|
||||
|
||||
<div class="text-caption">
|
||||
{{ $t('location') }}
|
||||
{{ $t('location.location') }}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
@@ -64,7 +64,7 @@ defineProps({
|
||||
</div>
|
||||
|
||||
<div class="text-caption">
|
||||
{{ $t('price') }}
|
||||
{{ $t('misc.price') }}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
@@ -76,25 +76,25 @@ defineProps({
|
||||
<v-row>
|
||||
<v-col>
|
||||
<card-view-one-line
|
||||
:description-text="$t('seatGroup')"
|
||||
:description-text="$t('location.seat.seatGroup')"
|
||||
:value-text="seatGroup"
|
||||
/>
|
||||
|
||||
<div v-if="seatRow != 0">
|
||||
<card-view-one-line
|
||||
:description-text="$t('seatRow')"
|
||||
:description-text="$t('location.seat.seatRow')"
|
||||
:value-text="seatRow"
|
||||
/>
|
||||
|
||||
<card-view-one-line
|
||||
:description-text="$t('seat')"
|
||||
:description-text="$t('location.seat.seat')"
|
||||
:value-text="seatNr"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<v-div v-else>
|
||||
<card-view-one-line
|
||||
:value-text="$t('standingArea')"
|
||||
:value-text="$t('location.seat.standingArea')"
|
||||
/>
|
||||
</v-div>
|
||||
</v-col>
|
||||
|
||||
@@ -93,7 +93,7 @@ const seatGroupI = findSeatCategory("I")
|
||||
width="50"
|
||||
class="px-5 py-2 d-flex justify-center align-center"
|
||||
>
|
||||
{{ $t('stage') }}
|
||||
{{ $t('location.stage') }}
|
||||
</v-sheet>
|
||||
</v-col>
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ function handleSeatClick() {
|
||||
width="100%"
|
||||
class="d-flex justify-center align-center"
|
||||
>
|
||||
{{ $t('stage') }}
|
||||
{{ $t('location.stage') }}
|
||||
</v-sheet>
|
||||
</v-col>
|
||||
|
||||
@@ -62,7 +62,7 @@ function handleSeatClick() {
|
||||
|
||||
<v-row>
|
||||
<v-col class="text-center text-h6">
|
||||
{{ seatGroup.capacity - seatGroup.occupied }} {{ $t('standingPlaces') }}
|
||||
{{ seatGroup.capacity - seatGroup.occupied }} {{ $t('location.seat.standingPlace', 2) }}
|
||||
</v-col>
|
||||
</v-row>
|
||||
</v-sheet>
|
||||
|
||||
@@ -1,69 +1,129 @@
|
||||
{
|
||||
"allEvents": "Alle Events",
|
||||
"allLocations": "Alle Veranstaltungsorte",
|
||||
"topEvents": "Top Events",
|
||||
"topLocations": "Top Veranstaltungsorte",
|
||||
"tickets": "Ticket | Tickets",
|
||||
"concert": "Konzert | Konzerte",
|
||||
"resetPreferences": "Einstellungen zurücksetzen",
|
||||
"resetDatabase": "Datenbank zurücksetzen",
|
||||
"resetDatabaseConfirm": {
|
||||
"title": "Datenbank zurücksetzen?",
|
||||
"description": "Soll die Datenbank des Servers wirklich zurückgesetzt werden? Dies kann nicht rückgänig gemacht werden! Der Bearbeitungsfortschritt der Aufgaben wird nicht gelöscht."
|
||||
"location": {
|
||||
"allLocations": "Alle Veranstaltungsorte",
|
||||
"topLocations": "Top Veranstaltungsorte",
|
||||
"location": "Veranstaltungsort | Veranstaltungsorte",
|
||||
"noLocationsFound": "Keine Veranstaltungsorte gefunden",
|
||||
"city": "Stadt | Städte",
|
||||
"stage": "Bühne | Bühnen",
|
||||
"seat": {
|
||||
"seatRow": "Sitzreihe | Sitzreihen",
|
||||
"seat": "Sitz | Sitze",
|
||||
"seatGroup": "Sitzgruppe | Sitzgruppen",
|
||||
"standingPlace": "Stehplatz | Stehplätze",
|
||||
"seatPlan": "Saalplan | Saalpläne",
|
||||
"seatSelection": "Sitzauswahl",
|
||||
"standingArea": "Stehbereich"
|
||||
}
|
||||
},
|
||||
"concert": {
|
||||
"concert": "Konzert | Konzerte",
|
||||
"allConcerts": "Alle Konzerte",
|
||||
"upcomingConcerts": "Nächste Konzerte",
|
||||
"goToTheConcert": "Zum Konzert",
|
||||
"noConcertsFound": "Keine Konzerte gefunden",
|
||||
"selectedConcert": "Ausgewähltes Konzert",
|
||||
"concertSoldOut": "Ausverkauft"
|
||||
},
|
||||
"band": {
|
||||
"band": "Band | Bands",
|
||||
"allBands": "Alle Bands",
|
||||
"noBandFound": "Keine Band gefunden",
|
||||
"rating": "Bewertung | Bewertungen",
|
||||
"bandMember": "Band Mitglieder",
|
||||
"image": "Foto | Fotos",
|
||||
"genre": "Genre | Genres"
|
||||
},
|
||||
"ticket": {
|
||||
"tickets": "Ticket | Tickets"
|
||||
},
|
||||
"account": {
|
||||
"account": "Account | Accounts",
|
||||
"register": "Account erstellen",
|
||||
"masterData": "Stammdaten",
|
||||
"noAddresses": "Keine Adressen gefunden",
|
||||
"noPayments": "Keine Bezahlarten gefunden",
|
||||
"wrongIban": "Falsches IBAN Format, nur deutsche IBAN-Nummern erlaubt!",
|
||||
"emailIsNotValid": "Ungültige E-Mail Addresse",
|
||||
"emailRequired": "E-Mail-Adresse benötigt",
|
||||
"accountManagement": "Account verwalten",
|
||||
"accountManagementDescription": "Persönliche Daten, Adressen, Bezahlmethoden",
|
||||
"login": {
|
||||
"pleaseLoginToOrder": "Bitte anmelden zum bestellen",
|
||||
"backToLogin": "Zurück zum Login",
|
||||
"login": "Login"
|
||||
},
|
||||
"logout": {
|
||||
"logout": "Ausloggen",
|
||||
"logoutDescription": "Aktuellen Useraccount ausloggen"
|
||||
},
|
||||
"userData": {
|
||||
"username": "Username",
|
||||
"password": "Passwort",
|
||||
"address": "Adresse | Addressen",
|
||||
"payment": "Bezahlart | Bezahlarten",
|
||||
"email": "E-Mail-Adresse",
|
||||
"firstName": "Vorname",
|
||||
"lastName": "Nachname",
|
||||
"street": "Straße",
|
||||
"houseNumber": "Hausnummer",
|
||||
"postalCode": "Postleitzahl",
|
||||
"placeOfResidence": "Wohnort",
|
||||
"bankName": "Name der Bank",
|
||||
"iban": "IBAN"
|
||||
},
|
||||
"deleteAccount": {
|
||||
"deleteAccount": "Account löschen",
|
||||
"dialog": {
|
||||
"title": "Account löschen?",
|
||||
"description": "Soll der Account wirklich gelöscht werden? Dieser kann nicht mehr wiederhergestellt werden!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"order": {
|
||||
"orders": "Bestellung | Bestellungen",
|
||||
"oclock": "Uhr",
|
||||
"ordering": "Bestellabschluss",
|
||||
"orderSummary": "Bestellübersicht",
|
||||
"takeOrder": "Bestellung ausführen",
|
||||
"noOrders": "Keine Bestellungen gefunden",
|
||||
"orderedAt": "Bestellt am",
|
||||
"noOrdersText": "Bisher wurden keine Bestellungen von diesem Account getätigt. Gehe zum Warenkorb und bestelle!",
|
||||
"ordersDescription": "Übersicht aller getätigten Bestellungen"
|
||||
},
|
||||
"basket": {
|
||||
"addToBasket": "Zum Warenkorb hinzufügen",
|
||||
"emptyBasketTitle": "Keine Tickets im Warenkorb",
|
||||
"emptyBasketText": "Gehe zu unseren Konzerten und lege Tickets in den Warenkorb",
|
||||
"basket": "Warenkorb"
|
||||
},
|
||||
"preferences": {
|
||||
"pageSetup": "Seiteneinstellungen",
|
||||
"selectedTheme": "Ausgewähltes Theme",
|
||||
"language": "Sprache",
|
||||
"language": "Sprache | Sprachen",
|
||||
"serverState": "Server Status",
|
||||
"systemSetup": "Systemeinstellungen",
|
||||
"resetConfirm": "Soll die Datenbank wirklich zurückgesetzt werden?"
|
||||
"resetDatabase": {
|
||||
"resetDatabase": "Datenbank zurücksetzen",
|
||||
"dialog": {
|
||||
"title": "Datenbank zurücksetzen?",
|
||||
"description": "Soll die Datenbank des Servers wirklich zurückgesetzt werden? Dies kann nicht rückgänig gemacht werden! Der Bearbeitungsfortschritt der Aufgaben wird nicht gelöscht."
|
||||
}
|
||||
},
|
||||
"resetExerciseProgress": {
|
||||
"resetExerciseProgress": "Aufgabenfortschritt zurücksetzen",
|
||||
"dialog": {
|
||||
"title": "Übungsfortschritt zurücksetzen?",
|
||||
"description": "Soll der Bearbeitungsfortschritt der Übungen wirklich zurückgesetzt werden? Dies kann nicht rückgänig gemacht werden!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"product": {
|
||||
"product": "Produkt | Produkte",
|
||||
"productName": "Produkt Name",
|
||||
"brand": "Marke",
|
||||
"productPrice": "Einzelpreis",
|
||||
"category": "Kategorie",
|
||||
"description": "Beschreibung",
|
||||
"storedItemsAvailable": "{0} verfügbar",
|
||||
"soldOut": "Ausverkauft",
|
||||
"discount": "Rabatt",
|
||||
"inStock": "Warenbestand"
|
||||
"help": {
|
||||
"scoreBoard": {
|
||||
"exerciseGroupNr": "Aufgabengruppe {0}: ",
|
||||
"exerciseNr": "Aufgabe {0}"
|
||||
}
|
||||
},
|
||||
"offers": "Angebote",
|
||||
"category": "Kategorie | Kategorien",
|
||||
"sortBy": "Sortieren nach",
|
||||
"quantity": "Anzahl",
|
||||
"addToBasket": "Zum Warenkorb hinzufügen",
|
||||
"emptyBasketTitle": "Keine Artikel im Warenkorb",
|
||||
"emptyBasketText": "Gehe zu unseren Produkten und lege Artikel in den Warenkorb",
|
||||
"totalPrice": "Gesamtpreis",
|
||||
"orderNow": "Jetzt bestellen",
|
||||
"userInfo": {
|
||||
"firstName": "Vorname",
|
||||
"lastName": "Nachname",
|
||||
"street": "Straße",
|
||||
"houseNumber": "Hausnummer",
|
||||
"postalCode": "Postleitzahl",
|
||||
"city": "Stadt",
|
||||
"bankName": "Name der Bank",
|
||||
"iban": "IBAN"
|
||||
},
|
||||
"account": "Account | Accounts",
|
||||
"username": "Username",
|
||||
"password": "Passwort",
|
||||
"noAccountRegister": "Neuen Account erstellen!",
|
||||
"register": "Account erstellen",
|
||||
"backToLogin": "Zurück zum Login",
|
||||
"delete": "Account löschen",
|
||||
"managingAccount": "Account verwalten",
|
||||
"address": "Adresse | Addressen",
|
||||
"payment": "Bezahlart | Bezahlarten",
|
||||
"masterData": "Stammdaten",
|
||||
"noAddresses": "Keine Adressen gefunden",
|
||||
"noPayments": "Keine Bezahlarten gefunden",
|
||||
"newPayment": "New Payment",
|
||||
"email": "E-Mail-Adresse",
|
||||
"bannerMessages": {
|
||||
"loginSuccessful": "Login erfolgreich!",
|
||||
"wrongLogin": "Falscher Username oder falsches Passwort!",
|
||||
@@ -73,121 +133,39 @@
|
||||
"usernameInUse": "Der Accountname ist bereits vergeben!",
|
||||
"accountUpdated": "Account erfolgreich aktualisiert",
|
||||
"logoutSuccessful": "Logout erfolgreich",
|
||||
"categoryCreateSuccessful": "Kategorie hinzugefügt",
|
||||
"categoryDeleteSuccessful": "Kategorie gelöscht",
|
||||
"categoryCreateError": "Fehler beim Erstellen der Kategorie",
|
||||
"categoryDeleteError": "Fehler beim Löschen der Kategorie",
|
||||
"orderPlaceSuccessfull": "Bestellung erfolgreich aufgegeben",
|
||||
"productCreateSuccessful": "Produkt hinzugefügt",
|
||||
"productCreateError": "Fehler beim Erstellen des Produktes",
|
||||
"productDeleteSuccessful": "Produkt erfolgreich entfernt",
|
||||
"productDeleteError": "Fehler beim Entfernen des Produktes",
|
||||
"basketProductAdded": "Artikel zum Warenkorb hinzugefügt",
|
||||
"basketProductRemoved": "Artikel aus Warenkorb entfernt",
|
||||
"exerciseSolved01": "Aufgabe 0.1 gelöst!",
|
||||
"exerciseSolved02": "Aufgabe 0.2 gelöst!",
|
||||
"exerciseSolved11": "Aufgabe 1.1 gelöst!",
|
||||
"exerciseSolved12": "Aufgabe 1.2 gelöst!",
|
||||
"exerciseSolved13": "Aufgabe 1.3 gelöst!",
|
||||
"exerciseSolved21": "Aufgabe 2.1 gelöst!",
|
||||
"exerciseSolved22": "Aufgabe 2.2 gelöst!",
|
||||
"exerciseSolved23": "Aufgabe 2.3 gelöst!",
|
||||
"exerciseSolved31": "Aufgabe 3.1 gelöst!",
|
||||
"exerciseSolved32": "Aufgabe 3.2 gelöst!",
|
||||
"exerciseSolved33": "Aufgabe 3.3 gelöst!"
|
||||
"basketTicketAdded": "Ticket zum Warenkorb hinzugefügt",
|
||||
"basketTicketRemoved": "Ticket aus Warenkorb entfernt",
|
||||
"exerciseSolvedNr": "Aufgabe {0}.{1} gelöst!"
|
||||
},
|
||||
"oclock": "Uhr",
|
||||
"ordering": {
|
||||
"ordering": "Bestellabschluss",
|
||||
"takeOrder": "Bestellung ausführen"
|
||||
},
|
||||
"dialog": {
|
||||
"cancel": "Abbrechen",
|
||||
"confirm": "Bestätigen",
|
||||
"deleteAccount": {
|
||||
"title": "Account löschen?",
|
||||
"description": "Soll der Account wirklich gelöscht werden? Dieser kann nicht mehr wiederhergestellt werden!"
|
||||
"misc": {
|
||||
"sortBy": "Sortieren nach",
|
||||
"greeting": "Hallo {msg}",
|
||||
"from": "ab",
|
||||
"youAreHere": "Du bist hier:",
|
||||
"date": "Datum | Daten",
|
||||
"totalPrice": "Gesamtpreis",
|
||||
"price": "Preis | Preise",
|
||||
"quantity": "Anzahl",
|
||||
"loading": "Lade...",
|
||||
"onePageBack": "Zurück zur vorherigen Seite",
|
||||
"enterSomeKeywords": "Füge Schlagworte ein um nach Bands, Konzerten und Veranstaltungsorten zu suchen",
|
||||
"actions": {
|
||||
"add": "Hinzufügen",
|
||||
"remove": "Entfernen",
|
||||
"save": "Speichern",
|
||||
"filtering": "Filtern",
|
||||
"cancel": "Abbrechen",
|
||||
"more": "Mehr",
|
||||
"confirm": "Bestätigen"
|
||||
},
|
||||
"validation": {
|
||||
"required": "Darf nicht leer bleiben",
|
||||
"noDigitsAllowed": "Zahlen sind nicht erlaubt",
|
||||
"notEnoughChars": "Nicht wenige Zeichen",
|
||||
"tooMuchChars": "Zu viele Zeichen",
|
||||
"onlyDigitsAllowed": "Nur Zahlen erlaubt",
|
||||
"digitsAtStartNeeded": "Muss mit einer Zahl beginnen"
|
||||
}
|
||||
},
|
||||
"scoreBoard": {
|
||||
"exerciseGroup0": "Aufgabengruppe 0: Den Shop kennenlernen",
|
||||
"exerciseGroup1": "Aufgabengruppe 1: SQL Injections",
|
||||
"exerciseGroup2": "Aufgabengruppe 2: Broken Access Control",
|
||||
"exerciseGroup3": "Aufgabengruppe 3: Cross-Site Scripting (XSS)",
|
||||
"exercise": "Aufgabe {0}"
|
||||
},
|
||||
"serverState": "Server Status",
|
||||
"required": "Darf nicht leer bleiben",
|
||||
"noDigitsAllowed": "Zahlen sind nicht erlaubt",
|
||||
"notEnoughChars": "Nicht lang genug",
|
||||
"passwordToShort": "Passwort zu kurz",
|
||||
"onlyDigitsAllowed": "Nur Zahlen erlaubt",
|
||||
"noOrders": "Keine Bestellungen gefunden",
|
||||
"noOrdersText": "Bisher wurden keine Bestellungen von diesem Account getätigt. Gehe zum Warenkorb und bestelle!",
|
||||
"add": "Hinzufügen",
|
||||
"remove": "Entfernen",
|
||||
"emailIsNotValid": "Ungültige E-Mail Addresse",
|
||||
"emailRequired": "E-Mail-Adresse benötigt",
|
||||
"tooMuchChars": "Zu lang",
|
||||
"digitsAtStartNeeded": "Muss mit einer Zahl beginnen",
|
||||
"wrongIban": "Falsches IBAN Format, nur deutsche IBAN-Nummern erlaubt!",
|
||||
"save": "Speichern",
|
||||
"editProduct": "Produkt bearbeiten",
|
||||
"brand": "Marke | Marken",
|
||||
"concerts": {
|
||||
"location": "Veranstaltungsort"
|
||||
},
|
||||
"location": "Veranstaltungsort | Veranstaltungsorte",
|
||||
"band": "Band | Bands",
|
||||
"noConcertsFound": "Keine Konzerte gefunden",
|
||||
"from": "ab",
|
||||
"soldOut": "Ausverkauft",
|
||||
"city": "Stadt | Städte",
|
||||
"seatPlan": "Saalplan",
|
||||
"stage": "Bühne",
|
||||
"filtering": "Filtern",
|
||||
"bandMember": "Band Mitglieder",
|
||||
"rating": "Bewertung | Bewertungen",
|
||||
"image": "Foto | Fotos",
|
||||
"seatSelection": "Sitzauswahl",
|
||||
"loading": "Lade",
|
||||
"orderSummary": "Bestellübersicht",
|
||||
"basket": "Warenkorb",
|
||||
"event": "Event | Events",
|
||||
"hello": "Hallo",
|
||||
"accountManagement": "Account verwalten",
|
||||
"accountManagementDescription": "Persönliche Daten, Adressen, Bezahlmethoden",
|
||||
"orders": "Bestellung | Bestellungen",
|
||||
"ordersDescription": "Übersicht aller getätigten Bestellungen",
|
||||
"onePageBack": "Zurück zur vorherigen Seite",
|
||||
"orderedAt": "Bestellt am",
|
||||
"logout": "Ausloggen",
|
||||
"logoutDescription": "Aktuellen Useraccount ausloggen",
|
||||
"login": "Login",
|
||||
"seatRow": "Sitzreihe",
|
||||
"seat": "Sitz",
|
||||
"seatGroup": "Kategorie",
|
||||
"date": "Datum",
|
||||
"price": "Preis",
|
||||
"standingArea": "Stehbereich",
|
||||
"exerciseGroup": "Aufgabengruppe",
|
||||
"exercise": "Aufgabe",
|
||||
"resetProgress": "Aufgabenfortschritt zurücksetzen",
|
||||
"youAreHere": "Du bist hier:",
|
||||
"standingPlaces": "Stehplätze",
|
||||
"resetExerciseProgressConfirm": {
|
||||
"title": "Übungsfortschritt zurücksetzen?",
|
||||
"description": "Soll der Bearbeitungsfortschritt der Übungen wirklich zurückgesetzt werden? Dies kann nicht rückgänig gemacht werden!"
|
||||
},
|
||||
"goToTheConcert": "Zum Konzert",
|
||||
"selectedConcert": "Ausgewähltes Konzert",
|
||||
"enterSomeKeywords": "Füge Schlagworte ein um nach Bands, Events, Konzerten und Veranstaltungsorten zu suchen",
|
||||
"noBandFound": "Keine Band gefunden",
|
||||
"noLocationsFound": "Keine Veranstaltungsorte gefunden",
|
||||
"allBands": "Alle Bands",
|
||||
"allConcerts": "Alle Konzerte",
|
||||
"more": "Mehr",
|
||||
"upcomingConcerts": "Nächste Konzerte",
|
||||
"pleaseLogin": "Bitte anmelden",
|
||||
"genres": "Genres"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,193 +1,171 @@
|
||||
{
|
||||
"allEvents": "All Events",
|
||||
"allLocations": "All Locations",
|
||||
"topEvents": "Top Events",
|
||||
"topLocations": "Top Locations",
|
||||
"tickets": "Ticket | Tickets",
|
||||
"concert": "Concert | Concerts",
|
||||
"resetPreferences": "Reset preferences",
|
||||
"resetDatabase": "Reset database",
|
||||
"resetDatabaseConfirm": {
|
||||
"title": "Reset database?",
|
||||
"description": "Do you really want to reset the server database? This can't be undone! Progress will not be deleted."
|
||||
"location": {
|
||||
"allLocations": "All Locations",
|
||||
"topLocations": "Top Locations",
|
||||
"location": "Location | Locations",
|
||||
"noLocationsFound": "No Locations found",
|
||||
"city": "City | Cities",
|
||||
"stage": "Stage | Stages",
|
||||
"seat": {
|
||||
"seatRow": "Seat Row | Seat Rows",
|
||||
"seat": "Seat | Seats",
|
||||
"seatGroup": "Seat Group | Seat Groups",
|
||||
"standingPlace": "Standing place | Standing places",
|
||||
"seatPlan": "Seat plan | Seat plans",
|
||||
"seatSelection": "Seat selection",
|
||||
"standingArea": "Seat area"
|
||||
}
|
||||
},
|
||||
"concert": {
|
||||
"concert": "Concert | Concerts",
|
||||
"allConcerts": "All Concerts",
|
||||
"upcomingConcerts": "Upcoming Concerts",
|
||||
"goToTheConcert": "Go to concert",
|
||||
"noConcertsFound": "No Concerts found",
|
||||
"selectedConcert": "Selected Concert",
|
||||
"concertSoldOut": "Sold out"
|
||||
},
|
||||
"band": {
|
||||
"band": "Band | Bands",
|
||||
"allBands": "All Bands",
|
||||
"noBandFound": "No Band found",
|
||||
"rating": "Rating | Ratings",
|
||||
"bandMember": "Band Member",
|
||||
"image": "Photo | Photos",
|
||||
"genre": "Genre | Genres"
|
||||
},
|
||||
"ticket": {
|
||||
"tickets": "Ticket | Tickets"
|
||||
},
|
||||
"account": {
|
||||
"account": "Account | Accounts",
|
||||
"register": "Register",
|
||||
"masterData": "Master data",
|
||||
"noAddresses": "No addresses found",
|
||||
"noPayments": "No payments found",
|
||||
"wrongIban": "Wrong IBAN format, only German IBAN-numbers allowed!",
|
||||
"emailIsNotValid": "E-Mail not valid",
|
||||
"emailRequired": "E-Mail required",
|
||||
"accountManagement": "Manage Account",
|
||||
"accountManagementDescription": "Personal data, addresses, payments",
|
||||
"login": {
|
||||
"pleaseLoginToOrder": "Please login to order",
|
||||
"backToLogin": "Back to Login",
|
||||
"login": "Login"
|
||||
},
|
||||
"logout": {
|
||||
"logout": "Logout",
|
||||
"logoutDescription": "Logout current user account"
|
||||
},
|
||||
"userData": {
|
||||
"username": "Username",
|
||||
"password": "Password",
|
||||
"address": "Adress | Addresses",
|
||||
"payment": "Payment | Payments",
|
||||
"email": "E-Mail address",
|
||||
"firstName": "First name",
|
||||
"lastName": "Last name",
|
||||
"street": "Street",
|
||||
"houseNumber": "House number",
|
||||
"postalCode": "Postal code",
|
||||
"placeOfResidence": "Place of residence",
|
||||
"bankName": "Name of bank",
|
||||
"iban": "IBAN"
|
||||
},
|
||||
"deleteAccount": {
|
||||
"deleteAccount": "Delete Account",
|
||||
"dialog": {
|
||||
"title": "Delete Account?",
|
||||
"description": "Do you really want to delete this account? This is permanent!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"order": {
|
||||
"orders": "Order | Orders",
|
||||
"oclock": "o'clock",
|
||||
"ordering": "Finish order process",
|
||||
"orderSummary": "Order overview",
|
||||
"takeOrder": "Execute order",
|
||||
"noOrders": "No orders found",
|
||||
"orderedAt": "Ordered at",
|
||||
"noOrdersText": "Bisher wurden keine Bestellungen von diesem Account getätigt. Gehe zum Warenkorb und bestelle!",
|
||||
"ordersDescription": "Overview of all placed orders"
|
||||
},
|
||||
"basket": {
|
||||
"addToBasket": "Add to basket",
|
||||
"emptyBasketTitle": "No tickets in basket",
|
||||
"emptyBasketText": "Go to our concerts and place some ticket in the basket",
|
||||
"basket": "Basket"
|
||||
},
|
||||
"preferences": {
|
||||
"pageSetup": "Page setup",
|
||||
"selectedTheme": "Selected theme",
|
||||
"language": "Language",
|
||||
"systemSetup": "System setup",
|
||||
"resetConfirm": "Really reset the database?"
|
||||
},
|
||||
"product": {
|
||||
"product": "Product | Products",
|
||||
"productName": "Product name",
|
||||
"brand": "Brand",
|
||||
"productPrice": "Unit price",
|
||||
"category": "Category",
|
||||
"description": "Description",
|
||||
"storedItemsAvailable": "{0} items available",
|
||||
"soldOut": "Sold Out",
|
||||
"discount": "Discount",
|
||||
"inStock": "In Stock"
|
||||
},
|
||||
"offers": "Offers",
|
||||
"category": "Category | Categories",
|
||||
"sortBy": "Sort by",
|
||||
"quantity": "Quantity",
|
||||
"addToBasket": "Add to basket",
|
||||
"emptyBasketTitle": "The basket is empty...",
|
||||
"emptyBasketText": "Go to our products and add some of them to the basket",
|
||||
"totalPrice": "Total price",
|
||||
"orderNow": "Order now",
|
||||
"userInfo": {
|
||||
"firstName": "First Name",
|
||||
"lastName": "Family Name",
|
||||
"street": "Street",
|
||||
"houseNumber": "House Number",
|
||||
"postalCode": "Postal Code",
|
||||
"city": "City",
|
||||
"bankName": "Bank name",
|
||||
"iban": "IBAN"
|
||||
},
|
||||
"account": "Account | Accounts",
|
||||
"backToLogin": "Back to Login",
|
||||
"username": "Username",
|
||||
"password": "Password",
|
||||
"noAccountRegister": "Create new Account!",
|
||||
"register": "Create Account",
|
||||
"delete": "Delete Account",
|
||||
"managingAccount": "Managing Account",
|
||||
"address": "Address | Addresses",
|
||||
"payment": "Payment | Payments",
|
||||
"masterData": "Master data",
|
||||
"noAddresses": "No Addresses found",
|
||||
"noPayments": "No payments found",
|
||||
"newPayment": "New Payment",
|
||||
"email": "E-Mail address",
|
||||
"bannerMessages": {
|
||||
"loginSuccessful": "Login erfolgreich!",
|
||||
"wrongLogin": "Falscher Username oder falsches Passwort!",
|
||||
"error": "Some error occurred...",
|
||||
"databaseResetSuccessful": "Database reset successful!",
|
||||
"usernameInUse": "Username always in use!",
|
||||
"registerSuccessful": "Account successfully created!",
|
||||
"accountUpdated": "Account successfully updated",
|
||||
"logoutSuccessful": "Logout successful",
|
||||
"categoryCreateSuccessful": "Category created",
|
||||
"categoryDeleteSuccessful": "Category deleted",
|
||||
"categoryCreateError": "Error on creating category",
|
||||
"categoryDeleteError": "Error on deleting category",
|
||||
"orderPlaceSuccessfull": "Order successfully placed",
|
||||
"productCreateSuccessful": "Product created",
|
||||
"productCreateError": "Error on product creation",
|
||||
"productDeleteSuccessful": "Product successfully deleted",
|
||||
"productDeleteError": "Error on product delete",
|
||||
"basketProductAdded": "Add product to basket",
|
||||
"basketProductRemoved": "Product removed from basket",
|
||||
"exerciseSolved01": "Exercise 0.1 solved!",
|
||||
"exerciseSolved02": "Exercise 0.2 solved!",
|
||||
"exerciseSolved11": "Exercise 1.1 solved!",
|
||||
"exerciseSolved12": "Exercise 1.2 solved!",
|
||||
"exerciseSolved13": "Exercise 1.3 solved!",
|
||||
"exerciseSolved21": "Exercise 2.1 solved!",
|
||||
"exerciseSolved22": "Exercise 2.2 solved!",
|
||||
"exerciseSolved23": "Exercise 2.3 solved!",
|
||||
"exerciseSolved31": "Exercise 3.1 solved!",
|
||||
"exerciseSolved32": "Exercise 3.2 solved!",
|
||||
"exerciseSolved33": "Exercise 3.3 solved!"
|
||||
},
|
||||
"oclock": "o'clock",
|
||||
"ordering": {
|
||||
"ordering": "Finish order",
|
||||
"takeOrder": "Do order now"
|
||||
},
|
||||
"dialog": {
|
||||
"cancel": "Cancel",
|
||||
"confirm": "Bestätigen",
|
||||
"deleteAccount": {
|
||||
"title": "Delete account?",
|
||||
"description": "Do you really want to delete the account? This can't be undone!"
|
||||
"selectedTheme": "Selected Theme",
|
||||
"language": "Language | Languages",
|
||||
"serverState": "Server Status",
|
||||
"systemSetup": "System preferences",
|
||||
"resetDatabase": {
|
||||
"resetDatabase": "Reset database",
|
||||
"dialog": {
|
||||
"title": "Reset database?",
|
||||
"description": "Do you really want to reset the database? This is permanent! Exercise progress will not be affected"
|
||||
}
|
||||
},
|
||||
"resetExerciseProgress": {
|
||||
"resetExerciseProgress": "Reset exercise progress",
|
||||
"dialog": {
|
||||
"title": "Reset exercise progress?",
|
||||
"description": "Do you really want to reset the exercise progress? This is permanent!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scoreBoard": {
|
||||
"exerciseGroup0": "Exercise Group 0: Getting Started",
|
||||
"exerciseGroup1": "Exercise Group 1: SQL Injections",
|
||||
"exerciseGroup2": "Exercise Group 2: Broken Access Control",
|
||||
"exerciseGroup3": "Exercise Group 3: Cross-Site Scripting (XSS)",
|
||||
"exercise": "Exercise {0}"
|
||||
"help": {
|
||||
"scoreBoard": {
|
||||
"exerciseGroupNr": "Exercise Group {0}: ",
|
||||
"exerciseNr": "Exercise {0}"
|
||||
}
|
||||
},
|
||||
"serverState": "Server State:",
|
||||
"required": "Is required",
|
||||
"noDigitsAllowed": "Digits are not allowed",
|
||||
"notEnoughChars": "Too short",
|
||||
"passwordToShort": "Password too short",
|
||||
"onlyDigitsAllowed": "Only digits are allowed",
|
||||
"noOrders": "No orders found",
|
||||
"noOrdersText": "There are no orders with this account until now. Go to the basket page and order something!",
|
||||
"add": "Add",
|
||||
"remove": "Remove",
|
||||
"emailIsNotValid": "E-mail must be valid",
|
||||
"emailRequired": "E-Mail is required",
|
||||
"tooMuchChars": "Too long",
|
||||
"digitsAtStartNeeded": "Has to beginn with a number",
|
||||
"wrongIban": "Wrong IBAN format, only German IBANs are allowed!",
|
||||
"save": "Save",
|
||||
"editProduct": "Edit product",
|
||||
"brand": "Brand | Brands",
|
||||
"concerts": {
|
||||
"location": "Locations"
|
||||
"bannerMessages": {
|
||||
"loginSuccessful": "Login successfull!",
|
||||
"wrongLogin": "Wrong username or wrong password!",
|
||||
"error": "There is some error...",
|
||||
"databaseResetSuccessful": "Database successfully resetted!",
|
||||
"registerSuccessful": "Account successfully created!",
|
||||
"usernameInUse": "The username is already in use!",
|
||||
"accountUpdated": "Account successfully updated",
|
||||
"logoutSuccessful": "Logout successfull",
|
||||
"orderPlaceSuccessfull": "Order successfully placed",
|
||||
"basketTicketAdded": "Added ticket to basket",
|
||||
"basketTicketRemoved": "Removed ticket from basket",
|
||||
"exerciseSolvedNr": "Exercise {0}.{1} solved!"
|
||||
},
|
||||
"location": "Location | Locations",
|
||||
"band": "Band | Bands",
|
||||
"noConcertsFound": "No Concerts found",
|
||||
"from": "from",
|
||||
"soldOut": "Sold Out",
|
||||
"city": "City | Cities",
|
||||
"seatPlan": "Seat Plan",
|
||||
"stage": "Stage",
|
||||
"filtering": "Filtering",
|
||||
"bandMember": "Band members",
|
||||
"rating": "Rating | Ratings",
|
||||
"image": "Image | Images",
|
||||
"seatSelection": "Select seat",
|
||||
"loading": "Loading",
|
||||
"orderSummary": "Order Summary",
|
||||
"basket": "Basket",
|
||||
"event": "Event | Events",
|
||||
"hello": "Hello",
|
||||
"accountManagement": "Account Management",
|
||||
"accountManagementDescription": "Contact data, Addresses, Payment methods",
|
||||
"orders": "Order | Orders",
|
||||
"ordersDescription": "Overview about all orders",
|
||||
"onePageBack": "Back to previous page",
|
||||
"orderedAt": "Ordered at",
|
||||
"logout": "Logout",
|
||||
"logoutDescription": "Logout current account",
|
||||
"login": "Login",
|
||||
"seatRow": "Seat Row",
|
||||
"seat": "Seat",
|
||||
"seatGroup": "Category",
|
||||
"date": "Date",
|
||||
"price": "Price",
|
||||
"standingArea": "Standing Area",
|
||||
"exerciseGroup": "Exercise group",
|
||||
"exercise": "Exercise",
|
||||
"resetProgress": "Reset Exercise Progress",
|
||||
"youAreHere": "You are here:",
|
||||
"standingPlaces": "Standing capacity",
|
||||
"resetExerciseProgressConfirm": {
|
||||
"title": "Reset Exercise progress?",
|
||||
"description": "Do you really want to reset the exercise progress? This can't be undone!"
|
||||
},
|
||||
"goToTheConcert": "To the concert",
|
||||
"selectedConcert": "Selected Concert",
|
||||
"enterSomeKeywords": "Enter keywords to search for bands, events, concerts and locations",
|
||||
"noBandFound": "No band found",
|
||||
"noLocationsFound": "No location found",
|
||||
"allBands": "All Bands",
|
||||
"allConcerts": "All Concerts",
|
||||
"more": "More",
|
||||
"upcomingConcerts": "Upcoming Concerts",
|
||||
"pleaseLogin": "Please login",
|
||||
"genres": "Genres"
|
||||
"misc": {
|
||||
"sortBy": "Sort by",
|
||||
"greeting": "Hello {msg}",
|
||||
"from": "from",
|
||||
"youAreHere": "You are here:",
|
||||
"date": "Date | Dates",
|
||||
"totalPrice": "Total price",
|
||||
"price": "Price | Prices",
|
||||
"quantity": "Quantity",
|
||||
"loading": "Loading...",
|
||||
"onePageBack": "Back to previous page",
|
||||
"enterSomeKeywords": "Enter keywords to search for bands, concerts and locations",
|
||||
"actions": {
|
||||
"add": "Add",
|
||||
"remove": "Remove",
|
||||
"save": "Save",
|
||||
"filtering": "Filter",
|
||||
"cancel": "Cancel",
|
||||
"more": "More",
|
||||
"confirm": "Confirm"
|
||||
},
|
||||
"validation": {
|
||||
"required": "Must not remain empty",
|
||||
"noDigitsAllowed": "Numbers are not allowed",
|
||||
"notEnoughChars": "Not enough characters",
|
||||
"tooMuchChars": "Too much characters",
|
||||
"onlyDigitsAllowed": "Only numbers are allowed",
|
||||
"digitsAtStartNeeded": "Must start with a number"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,14 +11,14 @@ const passwordRules = [
|
||||
if (value) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('required')
|
||||
return feedbackStore.i18n.t('misc.validation.required')
|
||||
}
|
||||
},
|
||||
value => {
|
||||
if (value?.length >= 8) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('passwordToShort')
|
||||
return feedbackStore.i18n.t('misc.validation.notEnoughChars')
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -28,21 +28,21 @@ const stringRules = [
|
||||
if (value) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('required')
|
||||
return feedbackStore.i18n.t('misc.validation.required')
|
||||
}
|
||||
},
|
||||
value => {
|
||||
if (/[^0-9]/.test(value)) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('noDigitsAllowed')
|
||||
return feedbackStore.i18n.t('misc.validation.noDigitsAllowed')
|
||||
}
|
||||
},
|
||||
value => {
|
||||
if (value?.length >= 3) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('notEnoughChars')
|
||||
return feedbackStore.i18n.t('misc.validation.notEnoughChars')
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -56,7 +56,7 @@ const stringRules = [
|
||||
<v-row>
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('account.email')"
|
||||
:label="$t('account.userData.email')"
|
||||
v-model="accountStore.userAccount.email"
|
||||
disabled
|
||||
/>
|
||||
@@ -65,14 +65,14 @@ const stringRules = [
|
||||
<v-row>
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('account.username')"
|
||||
:label="$t('account.userData.username')"
|
||||
v-model="accountStore.userAccount.username"
|
||||
disabled
|
||||
/>
|
||||
</v-col>
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('account.password')"
|
||||
:label="$t('account.userData.password')"
|
||||
v-model="accountStore.userAccount.password"
|
||||
type="password"
|
||||
:rules="passwordRules"
|
||||
@@ -83,14 +83,14 @@ const stringRules = [
|
||||
<v-row>
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('userInfo.firstName')"
|
||||
:label="$t('account.userData.firstName')"
|
||||
v-model="accountStore.userAccount.firstName"
|
||||
:rules="stringRules"
|
||||
/>
|
||||
</v-col>
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('userInfo.lastName')"
|
||||
:label="$t('account.userData.lastName')"
|
||||
v-model="accountStore.userAccount.lastName"
|
||||
:rules="stringRules"
|
||||
/>
|
||||
|
||||
@@ -11,7 +11,7 @@ const accountStore = useAccountStore()
|
||||
|
||||
<template>
|
||||
<card-view
|
||||
:title="$t('account.managingAccount')"
|
||||
:title="$t('account.accountManagement')"
|
||||
icon="mdi-account-edit"
|
||||
>
|
||||
<v-row>
|
||||
@@ -22,7 +22,7 @@ const accountStore = useAccountStore()
|
||||
:loading="accountStore.fetchInProgress"
|
||||
@click="showConfirmDialog = true"
|
||||
>
|
||||
{{ $t("account.delete") }}
|
||||
{{ $t("account.deleteAccount.deleteAccount") }}
|
||||
</outlined-button>
|
||||
</v-col>
|
||||
|
||||
@@ -33,7 +33,7 @@ const accountStore = useAccountStore()
|
||||
:loading="accountStore.fetchInProgress"
|
||||
@click="accountStore.updateAccount()"
|
||||
>
|
||||
{{ $t("save") }}
|
||||
{{ $t("misc.actions.save") }}
|
||||
</outlined-button>
|
||||
</v-col>
|
||||
</v-row>
|
||||
@@ -41,8 +41,8 @@ const accountStore = useAccountStore()
|
||||
|
||||
<confirm-dialog
|
||||
v-model="showConfirmDialog"
|
||||
:title="$t('dialog.deleteAccount.title')"
|
||||
:description="$t('dialog.deleteAccount.description')"
|
||||
:title="$t('account.deleteAccount.dialog.title')"
|
||||
:description="$t('account.deleteAccount.dialog.description')"
|
||||
/>
|
||||
<!-- todo :onConfirm="deleteAccount" -->
|
||||
</template>
|
||||
@@ -11,7 +11,7 @@ const accountStore = useAccountStore()
|
||||
<template>
|
||||
<card-view
|
||||
icon="mdi-home"
|
||||
:title="$t('account.address')"
|
||||
:title="$t('account.userData.address')"
|
||||
>
|
||||
<v-expansion-panels v-if="accountStore.userAccount.addresses.length > 0">
|
||||
<v-expansion-panel
|
||||
@@ -26,7 +26,7 @@ const accountStore = useAccountStore()
|
||||
<v-row class="pt-5">
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('userInfo.street')"
|
||||
:label="$t('account.userData.street')"
|
||||
v-model="address.street"
|
||||
:rules="getStringRules()"
|
||||
clearable
|
||||
@@ -34,7 +34,7 @@ const accountStore = useAccountStore()
|
||||
</v-col>
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('userInfo.houseNumber')"
|
||||
:label="$t('account.userData.houseNumber')"
|
||||
v-model="address.houseNumber"
|
||||
:rules="getNumberStartRules()"
|
||||
clearable
|
||||
@@ -45,7 +45,7 @@ const accountStore = useAccountStore()
|
||||
<v-row>
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('userInfo.postalCode')"
|
||||
:label="$t('account.userData.postalCode')"
|
||||
v-model="address.postalCode"
|
||||
:rules="getPostalRules()"
|
||||
clearable
|
||||
@@ -53,7 +53,7 @@ const accountStore = useAccountStore()
|
||||
</v-col>
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('userInfo.city')"
|
||||
:label="$t('account.userData.placeOfResidence')"
|
||||
v-model="address.city"
|
||||
:rules="getStringRules()"
|
||||
clearable
|
||||
@@ -68,7 +68,7 @@ const accountStore = useAccountStore()
|
||||
color="red"
|
||||
prepend-icon="mdi-delete"
|
||||
>
|
||||
{{ $t('remove') }}
|
||||
{{ $t('misc.actions.remove') }}
|
||||
</outlined-button>
|
||||
</v-col>
|
||||
</v-row>
|
||||
@@ -88,7 +88,7 @@ const accountStore = useAccountStore()
|
||||
prepend-icon="mdi-plus"
|
||||
color="green"
|
||||
>
|
||||
{{ $t('add') }}
|
||||
{{ $t('misc.actions.add') }}
|
||||
</outlined-button>
|
||||
</template>
|
||||
</card-view>
|
||||
|
||||
@@ -14,7 +14,7 @@ const router = useRouter()
|
||||
<v-row>
|
||||
<v-col>
|
||||
<outlined-button prepend-icon="mdi-arrow-left" @click="router.back()" >
|
||||
{{ $t('onePageBack') }}
|
||||
{{ $t('misc.onePageBack') }}
|
||||
</outlined-button>
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -12,7 +12,7 @@ const accountStore = useAccountStore()
|
||||
<template>
|
||||
<card-view
|
||||
icon="mdi-currency-usd"
|
||||
:title="$t('account.payment')"
|
||||
:title="$t('account.userData.payment')"
|
||||
>
|
||||
<v-expansion-panels
|
||||
v-if="accountStore.userAccount.payments.length > 0"
|
||||
@@ -28,14 +28,14 @@ const accountStore = useAccountStore()
|
||||
<v-row class="pt-5">
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('userInfo.bankName')"
|
||||
:label="$t('account.userData.bankName')"
|
||||
v-model="payment.bankName"
|
||||
:rules="getStringRules()"
|
||||
/>
|
||||
</v-col>
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('userInfo.iban')"
|
||||
:label="$t('account.userData.iban')"
|
||||
v-model="payment.iban"
|
||||
:rules="getIbanRules()"
|
||||
/>
|
||||
@@ -49,7 +49,7 @@ const accountStore = useAccountStore()
|
||||
color="red"
|
||||
prepend-icon="mdi-delete"
|
||||
>
|
||||
{{ $t('remove') }}
|
||||
{{ $t('misc.actions.remove') }}
|
||||
</outlined-button>
|
||||
</v-col>
|
||||
</v-row>
|
||||
@@ -69,7 +69,7 @@ const accountStore = useAccountStore()
|
||||
prepend-icon="mdi-plus"
|
||||
color="green"
|
||||
>
|
||||
{{ $t('add') }}
|
||||
{{ $t('misc.actions.add') }}
|
||||
</outlined-button>
|
||||
</template>
|
||||
</card-view>
|
||||
|
||||
@@ -12,18 +12,18 @@ const router = useRouter()
|
||||
<v-row>
|
||||
<v-col>
|
||||
<card-view
|
||||
:title="$t('hello') + ' ' + accountStore.userAccount.firstName + ' ' + accountStore.userAccount.lastName"
|
||||
:title="$t('misc.greeting', { msg: accountStore.userAccount.username })"
|
||||
icon="mdi-hand-wave"
|
||||
>
|
||||
<v-container>
|
||||
<v-row>
|
||||
<v-col>
|
||||
<card-view
|
||||
:title="$t('orders', 2)"
|
||||
:title="$t('order.orders', 2)"
|
||||
icon="mdi-basket-check"
|
||||
@click="router.push('/account/orders')"
|
||||
>
|
||||
{{ $t('ordersDescription') }}
|
||||
{{ $t('order.ordersDescription') }}
|
||||
</card-view>
|
||||
</v-col>
|
||||
</v-row>
|
||||
@@ -31,11 +31,11 @@ const router = useRouter()
|
||||
<v-row>
|
||||
<v-col>
|
||||
<card-view
|
||||
:title="$t('accountManagement')"
|
||||
:title="$t('account.accountManagement')"
|
||||
icon="mdi-account"
|
||||
@click="router.push('/account/data')"
|
||||
>
|
||||
{{ $t('accountManagementDescription') }}
|
||||
{{ $t('account.accountManagementDescription') }}
|
||||
</card-view>
|
||||
</v-col>
|
||||
</v-row>
|
||||
@@ -43,11 +43,11 @@ const router = useRouter()
|
||||
<v-row>
|
||||
<v-col>
|
||||
<card-view
|
||||
:title="$t('logout')"
|
||||
:title="$t('account.logout.logout')"
|
||||
icon="mdi-logout"
|
||||
@click="accountStore.logout(); router.push('/account/login')"
|
||||
>
|
||||
{{ $t('logoutDescription') }}
|
||||
{{ $t('account.logout.logoutDescription') }}
|
||||
</card-view>
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -20,14 +20,14 @@ async function startLogin() {
|
||||
|
||||
<template>
|
||||
<card-view
|
||||
:title="$t('login')"
|
||||
:title="$t('account.login.login')"
|
||||
icon="mdi-login"
|
||||
max-width="600"
|
||||
>
|
||||
<v-row>
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('account.username')"
|
||||
:label="$t('account.userData.username')"
|
||||
prepend-icon="mdi-account"
|
||||
v-model="accountStore.loginData.username"
|
||||
clearable
|
||||
@@ -38,7 +38,7 @@ async function startLogin() {
|
||||
<v-row>
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('account.password')"
|
||||
:label="$t('account.userData.password')"
|
||||
prepend-icon="mdi-key"
|
||||
type="password"
|
||||
v-model="accountStore.loginData.password"
|
||||
@@ -53,7 +53,7 @@ async function startLogin() {
|
||||
prepend-icon="mdi-plus"
|
||||
:loading="accountStore.fetchInProgress"
|
||||
>
|
||||
{{ $t('account.noAccountRegister') }}
|
||||
{{ $t('account.register') }}
|
||||
</outlined-button>
|
||||
|
||||
<outlined-button
|
||||
@@ -61,7 +61,7 @@ async function startLogin() {
|
||||
@click="startLogin"
|
||||
:loading="accountStore.fetchInProgress"
|
||||
>
|
||||
{{ $t('login') }}
|
||||
{{ $t('account.login.login') }}
|
||||
</outlined-button>
|
||||
</template>
|
||||
</card-view>
|
||||
|
||||
@@ -27,7 +27,7 @@ async function registerAccount() {
|
||||
<v-row>
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('account.username')"
|
||||
:label="$t('account.userData.username')"
|
||||
prepend-icon="mdi-account"
|
||||
v-model="accountStore.registerData.username"
|
||||
clearable
|
||||
@@ -39,7 +39,7 @@ async function registerAccount() {
|
||||
<v-row>
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('account.password')"
|
||||
:label="$t('account.userData.password')"
|
||||
prepend-icon="mdi-key"
|
||||
type="password"
|
||||
v-model="accountStore.registerData.password"
|
||||
@@ -52,7 +52,7 @@ async function registerAccount() {
|
||||
<v-row>
|
||||
<v-col>
|
||||
<v-text-field
|
||||
:label="$t('account.email')"
|
||||
:label="$t('account.userData.email')"
|
||||
prepend-icon="mdi-mail"
|
||||
v-model="accountStore.registerData.email"
|
||||
:rules="getEmailRules()"
|
||||
@@ -67,7 +67,7 @@ async function registerAccount() {
|
||||
@click="showRegisterCard = false"
|
||||
:disabled="accountStore.fetchInProgress"
|
||||
>
|
||||
{{ $t('account.backToLogin') }}
|
||||
{{ $t('account.login.backToLogin') }}
|
||||
</outlined-button>
|
||||
|
||||
<outlined-button
|
||||
|
||||
@@ -15,7 +15,7 @@ accountStore.refreshOrders()
|
||||
<v-row>
|
||||
<v-col>
|
||||
<outlined-button prepend-icon="mdi-arrow-left" @click="router.back()" >
|
||||
{{ $t('onePageBack') }}
|
||||
{{ $t('misc.onePageBack') }}
|
||||
</outlined-button>
|
||||
</v-col>
|
||||
</v-row>
|
||||
@@ -35,8 +35,8 @@ accountStore.refreshOrders()
|
||||
<v-col>
|
||||
<v-empty-state
|
||||
icon="mdi-basket-off"
|
||||
:title="$t('noOrders')"
|
||||
:text="$t('noOrdersText')"
|
||||
:title="$t('order.noOrders')"
|
||||
:text="$t('order.noOrdersText')"
|
||||
/>
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -15,7 +15,7 @@ defineProps({
|
||||
|
||||
<template>
|
||||
<card-view
|
||||
:title="$t('orderedAt') + ' ' + moment(order.orderedAt).format('DD.MM.YY, HH:mm') + ' ' + $t('oclock')"
|
||||
:title="$t('order.orderedAt') + ' ' + moment(order.orderedAt).format('DD.MM.YY, HH:mm') + ' ' + $t('order.oclock')"
|
||||
variant="outlined"
|
||||
>
|
||||
<v-row>
|
||||
@@ -23,7 +23,7 @@ defineProps({
|
||||
<v-card variant="outlined" class="ml-5 pa-3">
|
||||
<div class="text-h6">
|
||||
<v-icon icon="mdi-home" />
|
||||
{{ $t('account.address', 1) }}
|
||||
{{ $t('account.userData.address', 1) }}
|
||||
</div>
|
||||
|
||||
<div class="pl-9">{{ order.address.street }} {{ order.address.houseNumber }}</div>
|
||||
@@ -35,7 +35,7 @@ defineProps({
|
||||
<v-card variant="outlined" class="mr-5 pa-3">
|
||||
<div class="text-h6">
|
||||
<v-icon icon="mdi-currency-usd" />
|
||||
{{ $t('account.payment', 1) }}
|
||||
{{ $t('account.userData.payment', 1) }}
|
||||
</div>
|
||||
<div class="pl-9">{{ order.payment.bankName }}</div>
|
||||
<div class="pl-9">{{ order.payment.iban }}</div>
|
||||
|
||||
@@ -34,18 +34,18 @@ concertStore.getConcerts()
|
||||
<v-row>
|
||||
<v-col>
|
||||
<card-view
|
||||
:title="$t('band', 2)"
|
||||
:title="$t('band.band', 2)"
|
||||
icon="mdi-guitar-electric"
|
||||
>
|
||||
<div class="text-h4 text-center">
|
||||
{{ bandStore.bands.length }} {{ $t('band', 2) }}
|
||||
{{ bandStore.bands.length }} {{ $t('band.band', 2) }}
|
||||
</div>
|
||||
|
||||
<template #actions>
|
||||
<outlined-button
|
||||
@click="router.push('/admin/bands')"
|
||||
>
|
||||
{{ $t('more') }}
|
||||
{{ $t('misc.actions.more') }}
|
||||
</outlined-button>
|
||||
</template>
|
||||
</card-view>
|
||||
@@ -53,22 +53,22 @@ concertStore.getConcerts()
|
||||
|
||||
<v-col>
|
||||
<card-view
|
||||
:title="$t('concert', 2)"
|
||||
:title="$t('concert.concert', 2)"
|
||||
icon="mdi-ticket"
|
||||
>
|
||||
<div class="text-h4 text-center">
|
||||
{{ concertStore.concerts.length }} {{ $t('concert', 2) }}
|
||||
{{ concertStore.concerts.length }} {{ $t('concert.concert', 2) }}
|
||||
</div>
|
||||
|
||||
<div class="text-disabled text-center">
|
||||
{{ soldOutConcerts }} {{ $t('soldOut') }}
|
||||
{{ soldOutConcerts }} {{ $t('concert.concertSoldOut') }}
|
||||
</div>
|
||||
|
||||
<template #actions>
|
||||
<outlined-button
|
||||
@click="router.push('/admin/concerts')"
|
||||
>
|
||||
{{ $t('more') }}
|
||||
{{ $t('misc.actions.more') }}
|
||||
</outlined-button>
|
||||
</template>
|
||||
</card-view>
|
||||
@@ -77,18 +77,18 @@ concertStore.getConcerts()
|
||||
|
||||
<v-col>
|
||||
<card-view
|
||||
:title="$t('location', 2)"
|
||||
:title="$t('location.location', 2)"
|
||||
icon="mdi-city"
|
||||
>
|
||||
<div class="text-h4 text-center">
|
||||
{{ locationStore.locations.length }} {{ $t('location', 2) }}
|
||||
{{ locationStore.locations.length }} {{ $t('location.location', 2) }}
|
||||
</div>
|
||||
|
||||
<template #actions>
|
||||
<outlined-button
|
||||
@click="router.push('/admin/locations')"
|
||||
>
|
||||
{{ $t('more') }}
|
||||
{{ $t('misc.actions.more') }}
|
||||
</outlined-button>
|
||||
</template>
|
||||
</card-view>
|
||||
@@ -100,7 +100,7 @@ concertStore.getConcerts()
|
||||
<v-row>
|
||||
<v-col>
|
||||
<card-view
|
||||
:title="$t('account', 2)"
|
||||
:title="$t('account.account', 2)"
|
||||
icon="mdi-account"
|
||||
>
|
||||
</card-view>
|
||||
@@ -108,37 +108,18 @@ concertStore.getConcerts()
|
||||
|
||||
<v-col>
|
||||
<card-view
|
||||
:title="$t('category', 2)"
|
||||
:title="$t('band.genre', 2)"
|
||||
icon="mdi-account"
|
||||
>
|
||||
<div class="text-h4 text-center">
|
||||
{{ bandStore.availableGenres.length }} {{ $t('genres', 2) }}
|
||||
{{ bandStore.availableGenres.length }} {{ $t('band.genre', 2) }}
|
||||
</div>
|
||||
|
||||
<template #actions>
|
||||
<outlined-button
|
||||
@click="router.push('/admin/genres')"
|
||||
>
|
||||
{{ $t('more') }}
|
||||
</outlined-button>
|
||||
</template>
|
||||
</card-view>
|
||||
</v-col>
|
||||
|
||||
<v-col>
|
||||
<card-view
|
||||
:title="$t('genres', 2)"
|
||||
icon="mdi-guitar-electric"
|
||||
>
|
||||
<div class="text-h4 text-center">
|
||||
{{ bandStore.availableGenres.length }} {{ $t('genres', 2) }}
|
||||
</div>
|
||||
|
||||
<template #actions>
|
||||
<outlined-button
|
||||
@click="router.push('/admin/genres')"
|
||||
>
|
||||
{{ $t('more') }}
|
||||
{{ $t('misc.actions.more') }}
|
||||
</outlined-button>
|
||||
</template>
|
||||
</card-view>
|
||||
|
||||
@@ -31,7 +31,7 @@ bandStore.getBand(String(router.currentRoute.value.params.name).replaceAll('-',
|
||||
<v-col cols="10">
|
||||
<v-row>
|
||||
<v-col>
|
||||
<section-divider :title="$t('concert', 2)" />
|
||||
<section-divider :title="$t('concert.concert', 2)" />
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -42,7 +42,7 @@ bandStore.getBand(String(router.currentRoute.value.params.name).replaceAll('-',
|
||||
|
||||
<v-row>
|
||||
<v-col>
|
||||
<section-divider :title="$t('bandMember')" />
|
||||
<section-divider :title="$t('band.bandMember')" />
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -53,7 +53,7 @@ bandStore.getBand(String(router.currentRoute.value.params.name).replaceAll('-',
|
||||
|
||||
<v-row>
|
||||
<v-col>
|
||||
<section-divider :title="$t('rating', 2)" />
|
||||
<section-divider :title="$t('band.rating', 2)" />
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -65,7 +65,7 @@ bandStore.getBand(String(router.currentRoute.value.params.name).replaceAll('-',
|
||||
|
||||
<v-row>
|
||||
<v-col>
|
||||
<section-divider :title="$t('image', 2)" />
|
||||
<section-divider :title="$t('band.image', 2)" />
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ defineProps({
|
||||
readonly
|
||||
/>
|
||||
|
||||
<div class="px-3 text-h6">{{ ratings.length }} {{ $t('rating', ratings.length) }}</div>
|
||||
<div class="px-3 text-h6">{{ ratings.length }} {{ $t('band.rating', ratings.length) }}</div>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ function itemProps(item: GenreModel) {
|
||||
|
||||
<template>
|
||||
<card-view
|
||||
:title="$t('filtering')"
|
||||
:title="$t('misc.actions.filtering')"
|
||||
icon="mdi-filter"
|
||||
>
|
||||
<v-row>
|
||||
@@ -24,7 +24,7 @@ function itemProps(item: GenreModel) {
|
||||
v-model="bandStore.filteredGenres"
|
||||
:items="bandStore.availableGenres"
|
||||
variant="outlined"
|
||||
:label="$t('genres')"
|
||||
:label="$t('band.genre', 2)"
|
||||
:item-props="itemProps"
|
||||
chips
|
||||
clearable
|
||||
@@ -38,7 +38,7 @@ function itemProps(item: GenreModel) {
|
||||
@click="bandStore.getBands"
|
||||
height="100%"
|
||||
>
|
||||
{{ $t('filtering') }}
|
||||
{{ $t('misc.actions.filtering') }}
|
||||
</outlined-button>
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -23,7 +23,7 @@ concertStore.getConcert(Number(router.currentRoute.value.params.id))
|
||||
<v-col cols="10">
|
||||
<v-row>
|
||||
<v-col>
|
||||
<section-divider :title="$t('selectedConcert')" />
|
||||
<section-divider :title="$t('concert.selectedConcert')" />
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -47,7 +47,7 @@ concertStore.getConcert(Number(router.currentRoute.value.params.id))
|
||||
</v-row>
|
||||
<v-row>
|
||||
<v-col>
|
||||
<section-divider :title="$t('seatSelection')" />
|
||||
<section-divider :title="$t('location.seat.seatSelection')" />
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -61,7 +61,7 @@ concertStore.getConcert(Number(router.currentRoute.value.params.id))
|
||||
/>
|
||||
|
||||
<div class="pt-5 text-h3">
|
||||
{{ $t('loading') }}...
|
||||
{{ $t('misc.loading') }}...
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
@@ -77,7 +77,7 @@ concertStore.getConcert(Number(router.currentRoute.value.params.id))
|
||||
|
||||
<v-row>
|
||||
<v-col>
|
||||
<section-divider :title="$t('orderSummary')" />
|
||||
<section-divider :title="$t('order.orderSummary')" />
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -108,7 +108,7 @@ concertStore.getConcert(Number(router.currentRoute.value.params.id))
|
||||
:disabled="basketStore.selectedSeats.length == 0"
|
||||
block
|
||||
>
|
||||
{{ $t('addToBasket') }}
|
||||
{{ $t('basket.addToBasket') }}
|
||||
</outlined-button>
|
||||
</v-row>
|
||||
</v-col>
|
||||
|
||||
@@ -20,7 +20,7 @@ function itemProps(item: CityModel) {
|
||||
|
||||
<template>
|
||||
<card-view
|
||||
:title="$t('filtering')"
|
||||
:title="$t('misc.actions.filtering')"
|
||||
icon="mdi-filter"
|
||||
>
|
||||
<v-row>
|
||||
@@ -29,7 +29,7 @@ function itemProps(item: CityModel) {
|
||||
v-model="concertStore.filteredCities"
|
||||
:items="locationStore.cities"
|
||||
variant="outlined"
|
||||
:label="$t('city', 2)"
|
||||
:label="$t('location.city', 2)"
|
||||
:item-props="itemProps"
|
||||
chips
|
||||
clearable
|
||||
@@ -43,7 +43,7 @@ function itemProps(item: CityModel) {
|
||||
@click="concertStore.getConcerts"
|
||||
height="100%"
|
||||
>
|
||||
{{ $t('filtering') }}
|
||||
{{ $t('misc.actions.filtering') }}
|
||||
</outlined-button>
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -57,7 +57,7 @@ bandStore.getBands()
|
||||
color="primary"
|
||||
@click="router.push('bands/details/' + band.name.replaceAll(' ', '-').toLowerCase())"
|
||||
>
|
||||
{{ $t('tickets', 2) }}
|
||||
{{ $t('ticket.tickets', 2) }}
|
||||
</outlined-button>
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
|
||||
@@ -25,7 +25,7 @@ locationStore.getTopLocations()
|
||||
<v-col cols="10">
|
||||
<v-row>
|
||||
<v-col>
|
||||
<section-divider :title="$t('upcomingConcerts')" />
|
||||
<section-divider :title="$t('concert.upcomingConcerts')" />
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -38,7 +38,7 @@ locationStore.getTopLocations()
|
||||
@click="router.push('/bands/details/' + concert.band.name.replaceAll(' ', '-').toLowerCase())"
|
||||
:loading="concertStore.fetchInProgress"
|
||||
>
|
||||
{{ $t("from") }} {{ (concert.price).toPrecision(4) }} €
|
||||
{{ $t("misc.from") }} {{ (concert.price).toPrecision(4) }} €
|
||||
<!-- ab € todo -->
|
||||
</card-with-top-image>
|
||||
</v-col>
|
||||
@@ -51,14 +51,14 @@ locationStore.getTopLocations()
|
||||
@click="router.push('/concerts')"
|
||||
block
|
||||
>
|
||||
{{ $t('allConcerts') }}
|
||||
{{ $t('concert.allConcerts') }}
|
||||
</outlined-button>
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
<v-row>
|
||||
<v-col>
|
||||
<section-divider :title="$t('topLocations')" />
|
||||
<section-divider :title="$t('location.topLocations')" />
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -83,7 +83,7 @@ locationStore.getTopLocations()
|
||||
@click="router.push('/locations')"
|
||||
block
|
||||
>
|
||||
{{ $t('allLocations') }}
|
||||
{{ $t('location.allLocations') }}
|
||||
</outlined-button>
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -36,7 +36,7 @@ locationStore.getLocationByName(String(router.currentRoute.value.params.name))
|
||||
<v-col cols="10">
|
||||
<v-row>
|
||||
<v-col>
|
||||
<section-divider :title="$t('concert', 2)" />
|
||||
<section-divider :title="$t('concert.concert', 2)" />
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -68,7 +68,7 @@ locationStore.getLocationByName(String(router.currentRoute.value.params.name))
|
||||
<v-col>
|
||||
<v-empty-state
|
||||
icon="mdi-magnify"
|
||||
:title="$t('noEventsFound')"
|
||||
:title="$t('concert.noConcertsFound')"
|
||||
/>
|
||||
</v-col>
|
||||
</v-row>
|
||||
@@ -76,7 +76,7 @@ locationStore.getLocationByName(String(router.currentRoute.value.params.name))
|
||||
|
||||
<v-row>
|
||||
<v-col>
|
||||
<section-divider :title="$t('seatPlan')" />
|
||||
<section-divider :title="$t('location.seat.seatPlan')" />
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
|
||||
@@ -14,10 +14,20 @@ const showOrderingDialog = ref()
|
||||
|
||||
<template>
|
||||
<v-container max-width="1000">
|
||||
<v-row v-if="accountStore.userAccount.id == null">
|
||||
<v-col>
|
||||
<v-alert
|
||||
color="info"
|
||||
closable
|
||||
>
|
||||
{{ $t('account.login.pleaseLoginToOrder') }}
|
||||
</v-alert>
|
||||
</v-col>
|
||||
</v-row>
|
||||
<v-row>
|
||||
<v-col>
|
||||
<card-view
|
||||
:title="$t('basket')"
|
||||
:title="$t('basket.basket')"
|
||||
v-model="showOrderingDialog"
|
||||
icon="mdi-cart"
|
||||
>
|
||||
@@ -28,13 +38,13 @@ const showOrderingDialog = ref()
|
||||
<!-- Display empty state if card is empty -->
|
||||
<v-empty-state v-else
|
||||
icon="mdi-basket-off"
|
||||
:title="$t('emptyBasketTitle')"
|
||||
:text="$t('emptyBasketText')"
|
||||
:title="$t('basket.emptyBasketTitle')"
|
||||
:text="$t('basket.emptyBasketText')"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<v-card-text class="text-right text-h5" v-if="basketStore.itemsInBasket.length > 0">
|
||||
{{ $t('totalPrice') }}: {{ (basketStore.getTotalPrice).toFixed(2) }} €
|
||||
{{ $t('misc.totalPrice') }}: {{ (basketStore.getTotalPrice).toFixed(2) }} €
|
||||
</v-card-text>
|
||||
|
||||
|
||||
@@ -46,7 +56,7 @@ const showOrderingDialog = ref()
|
||||
color="green"
|
||||
@click="showOrderingDialog = true"
|
||||
>
|
||||
{{ $t('orderNow') }}
|
||||
{{ $t('order.takeOrder') }}
|
||||
</outlined-button>
|
||||
</template>
|
||||
</card-view>
|
||||
|
||||
@@ -36,7 +36,7 @@ async function doOrder() {
|
||||
|
||||
<template>
|
||||
<action-dialog
|
||||
:title="$t('ordering.ordering')"
|
||||
:title="$t('order.ordering')"
|
||||
icon="mdi-basket-check"
|
||||
v-model="showDialog"
|
||||
max-width="800"
|
||||
@@ -44,7 +44,7 @@ async function doOrder() {
|
||||
>
|
||||
<v-list class="pa-0">
|
||||
<v-list-subheader>
|
||||
{{ $t('account.address', accountStore.userAccount.addresses.length) }}
|
||||
{{ $t('account.userData.address', accountStore.userAccount.addresses.length) }}
|
||||
</v-list-subheader>
|
||||
|
||||
<v-list-item>
|
||||
@@ -62,7 +62,7 @@ async function doOrder() {
|
||||
</v-list-item>
|
||||
|
||||
<v-list-subheader>
|
||||
{{ $t('account.payment', accountStore.userAccount.payments.length) }}
|
||||
{{ $t('account.userData.payment', accountStore.userAccount.payments.length) }}
|
||||
</v-list-subheader>
|
||||
|
||||
<v-list-item>
|
||||
@@ -86,7 +86,7 @@ async function doOrder() {
|
||||
color="orange"
|
||||
:disabled="orderingInProgress"
|
||||
>
|
||||
{{ $t('dialog.cancel') }}
|
||||
{{ $t('misc.actions.cancel') }}
|
||||
</outlined-button>
|
||||
|
||||
<outlined-button
|
||||
@@ -95,7 +95,7 @@ async function doOrder() {
|
||||
prepend-icon="mdi-send"
|
||||
color="green"
|
||||
>
|
||||
{{ $t('ordering.takeOrder') }}
|
||||
{{ $t('order.takeOrder') }}
|
||||
</outlined-button>
|
||||
</template>
|
||||
</action-dialog>
|
||||
|
||||
@@ -14,11 +14,11 @@ function removeFromBasket(basketItem: BasketItemModel) {
|
||||
<v-table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ $t('band') }}</th>
|
||||
<th>{{ $t('concert') }}</th>
|
||||
<th class="text-center">{{ $t('quantity') }}</th>
|
||||
<th class="text-right">{{ $t('product.productPrice') }}</th>
|
||||
<th class="text-right">{{ $t('totalPrice') }}</th>
|
||||
<th>{{ $t('band.band') }}</th>
|
||||
<th>{{ $t('concert.concert') }}</th>
|
||||
<th class="text-center">{{ $t('misc.quantity') }}</th>
|
||||
<th class="text-right">{{ $t('misc.price') }}</th>
|
||||
<th class="text-right">{{ $t('misc.totalPrice') }}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@@ -37,50 +37,52 @@ defineProps({
|
||||
</v-timeline>
|
||||
</card-view>
|
||||
|
||||
|
||||
<!-- todo: English -->
|
||||
<card-view
|
||||
v-else
|
||||
:title="$t('exerciseGroup') + ' ' + exerciseGroup.groupNr + ': ' + exerciseGroup.nameDe"
|
||||
:title="$t('help.scoreBoard.exerciseGroupNr', [exerciseGroup.groupNr]) + exerciseGroup.nameDe"
|
||||
:loading="loading"
|
||||
>
|
||||
<v-timeline
|
||||
direction="horizontal"
|
||||
side="start"
|
||||
class="pb-3"
|
||||
>
|
||||
<v-timeline-item
|
||||
v-for="exercise in exerciseGroup.exercises"
|
||||
:dot-color="exercise.solved ? 'green' : 'grey'"
|
||||
:icon="exercise.solved ? 'mdi-check' : 'mdi-pencil'"
|
||||
<template #borderless>
|
||||
<v-timeline
|
||||
direction="horizontal"
|
||||
side="start"
|
||||
class="pt-3"
|
||||
>
|
||||
<v-skeleton-loader
|
||||
type="text"
|
||||
:loading="loading"
|
||||
<v-timeline-item
|
||||
v-for="exercise in exerciseGroup.exercises"
|
||||
:dot-color="exercise.solved ? 'green' : 'grey'"
|
||||
:icon="exercise.solved ? 'mdi-check' : 'mdi-pencil'"
|
||||
>
|
||||
<div class="text-h6">
|
||||
{{ $t('exercise') }} {{ exercise.exerciseNr }}
|
||||
</div>
|
||||
</v-skeleton-loader>
|
||||
|
||||
|
||||
<template #opposite>
|
||||
<v-skeleton-loader
|
||||
type="text"
|
||||
:loading="loading"
|
||||
>
|
||||
<div class="text-center">
|
||||
type="text"
|
||||
:loading="loading"
|
||||
>
|
||||
<div class="text-h6">
|
||||
{{ exercise.nameDe }}
|
||||
{{ $t('help.scoreBoard.exerciseNr', [exercise.exerciseNr]) }}
|
||||
</div>
|
||||
</v-skeleton-loader>
|
||||
|
||||
<div>
|
||||
{{ exercise.descriptionDe }}
|
||||
|
||||
<template #opposite>
|
||||
<v-skeleton-loader
|
||||
type="text"
|
||||
:loading="loading"
|
||||
>
|
||||
<div class="text-center">
|
||||
<div class="text-h6">
|
||||
{{ exercise.nameDe }}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<!-- todo: English -->
|
||||
{{ exercise.descriptionDe }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</v-skeleton-loader>
|
||||
</template>
|
||||
|
||||
</v-timeline-item>
|
||||
</v-timeline>
|
||||
</v-skeleton-loader>
|
||||
</template>
|
||||
</v-timeline-item>
|
||||
</v-timeline>
|
||||
</template>
|
||||
</card-view>
|
||||
</template>
|
||||
@@ -63,7 +63,7 @@ async function resetExerciseProg() {
|
||||
>
|
||||
<v-row>
|
||||
<v-col>
|
||||
{{ $t('serverState') }}:
|
||||
{{ $t('preferences.serverState') }}:
|
||||
<span v-if="serverOnline == ServerStateEnum.ONLINE" class="text-green">
|
||||
<v-icon icon="mdi-check" />
|
||||
Online
|
||||
@@ -95,7 +95,7 @@ async function resetExerciseProg() {
|
||||
color="red"
|
||||
:disabled="serverOnline != ServerStateEnum.ONLINE"
|
||||
>
|
||||
{{ $t('resetDatabase') }}
|
||||
{{ $t('preferences.resetDatabase.resetDatabase') }}
|
||||
</outlined-button>
|
||||
</v-col>
|
||||
</v-row>
|
||||
@@ -108,7 +108,7 @@ async function resetExerciseProg() {
|
||||
color="red"
|
||||
:disabled="serverOnline != ServerStateEnum.ONLINE"
|
||||
>
|
||||
{{ $t('resetProgress') }}
|
||||
{{ $t('preferences.resetExerciseProgress.resetExerciseProgress') }}
|
||||
</outlined-button>
|
||||
</v-col>
|
||||
</v-row>
|
||||
@@ -116,16 +116,16 @@ async function resetExerciseProg() {
|
||||
|
||||
<!-- Confirm delete database -->
|
||||
<confirm-dialog
|
||||
:title="$t('resetDatabaseConfirm.title')"
|
||||
:description="$t('resetDatabaseConfirm.description')"
|
||||
:title="$t('preferences.resetDatabase.dialog.title')"
|
||||
:description="$t('preferences.resetDatabase.dialog.description')"
|
||||
v-model="showConfirmDeleteDbDialog"
|
||||
:onConfirm="resetDb"
|
||||
/>
|
||||
|
||||
<!-- Confirm delete exercise progress -->
|
||||
<confirm-dialog
|
||||
:title="$t('resetExerciseProgressConfirm.title')"
|
||||
:description="$t('resetExerciseProgressConfirm.description')"
|
||||
:title="$t('preferences.resetExerciseProgress.dialog.title')"
|
||||
:description="$t('preferences.resetExerciseProgress.dialog.description')"
|
||||
v-model="showConfirmDeleteExerciseProgressDialog"
|
||||
:onConfirm="resetExerciseProg"
|
||||
/>
|
||||
|
||||
@@ -26,7 +26,7 @@ const searchStore = useSearchStore()
|
||||
<div v-if="searchStore.alreadySearched">
|
||||
<v-row>
|
||||
<v-col>
|
||||
<section-divider :title="$t('band', 2)" />
|
||||
<section-divider :title="$t('band.band', 2)" />
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -55,7 +55,7 @@ const searchStore = useSearchStore()
|
||||
<v-row v-else >
|
||||
<v-col>
|
||||
<v-empty-state
|
||||
:title="$t('noBandFound')"
|
||||
:title="$t('band.noBandFound')"
|
||||
icon="mdi-guitar-electric"
|
||||
/>
|
||||
</v-col>
|
||||
@@ -66,7 +66,7 @@ const searchStore = useSearchStore()
|
||||
<!-- Section Concert results -->
|
||||
<v-row>
|
||||
<v-col>
|
||||
<section-divider :title="$t('concert', 2)" />
|
||||
<section-divider :title="$t('concert.concert', 2)" />
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -95,7 +95,7 @@ const searchStore = useSearchStore()
|
||||
<v-row v-else >
|
||||
<v-col>
|
||||
<v-empty-state
|
||||
:title="$t('noConcertsFound')"
|
||||
:title="$t('concert.noConcertsFound')"
|
||||
icon="mdi-party-popper"
|
||||
/>
|
||||
</v-col>
|
||||
@@ -106,7 +106,7 @@ const searchStore = useSearchStore()
|
||||
<!-- Section Location results -->
|
||||
<v-row>
|
||||
<v-col>
|
||||
<section-divider :title="$t('location', 2)" />
|
||||
<section-divider :title="$t('location.location', 2)" />
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -135,7 +135,7 @@ const searchStore = useSearchStore()
|
||||
<v-row v-else >
|
||||
<v-col>
|
||||
<v-empty-state
|
||||
:title="$t('noLocationsFound')"
|
||||
:title="$t('location.noLocationsFound')"
|
||||
icon="mdi-city"
|
||||
/>
|
||||
</v-col>
|
||||
|
||||
@@ -11,7 +11,7 @@ const searchStore = useSearchStore()
|
||||
variant="outlined"
|
||||
hide-details
|
||||
v-model="searchStore.searchTerm"
|
||||
:placeholder="$t('enterSomeKeywords')"
|
||||
:placeholder="$t('misc.enterSomeKeywords')"
|
||||
@keyup.enter="searchStore.startSearch"
|
||||
>
|
||||
<template #append-inner>
|
||||
|
||||
@@ -13,21 +13,21 @@ export function getStringRules() {
|
||||
if (value) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('required')
|
||||
return feedbackStore.i18n.t('misc.validation.required')
|
||||
}
|
||||
},
|
||||
value => {
|
||||
if (/[^0-9]/.test(value)) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('noDigitsAllowed')
|
||||
return feedbackStore.i18n.t('misc.validation.noDigitsAllowed')
|
||||
}
|
||||
},
|
||||
value => {
|
||||
if (value?.length >= 4) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('notEnoughChars')
|
||||
return feedbackStore.i18n.t('misc.validation.notEnoughChars')
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -46,23 +46,23 @@ export function getPostalRules() {
|
||||
if (value?.length == 5) {
|
||||
return true
|
||||
} else if (value?.length < 5) {
|
||||
return feedbackStore.i18n.t('notEnoughChars')
|
||||
return feedbackStore.i18n.t('misc.validation.notEnoughChars')
|
||||
} else {
|
||||
return feedbackStore.i18n.t('tooMuchChars')
|
||||
return feedbackStore.i18n.t('misc.validation.tooMuchChars')
|
||||
}
|
||||
},
|
||||
value => {
|
||||
if (value?.length == 5) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('notEnoughChars')
|
||||
return feedbackStore.i18n.t('misc.validation.notEnoughChars')
|
||||
}
|
||||
},
|
||||
value => {
|
||||
if (/^\d+$/.test(value)) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('onlyDigitsAllowed')
|
||||
return feedbackStore.i18n.t('misc.validation.onlyDigitsAllowed')
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -81,14 +81,14 @@ export function getNumberStartRules() {
|
||||
if (value) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('required')
|
||||
return feedbackStore.i18n.t('misc.validation.required')
|
||||
}
|
||||
},
|
||||
value => {
|
||||
if (/^\d/.test(value)) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('digitsAtStartNeeded')
|
||||
return feedbackStore.i18n.t('misc.validation.digitsAtStartNeeded')
|
||||
}
|
||||
},
|
||||
]
|
||||
@@ -106,12 +106,12 @@ export function getEmailRules() {
|
||||
value => {
|
||||
if (value) return true
|
||||
|
||||
return feedbackStore.i18n.t('emailRequired')
|
||||
return feedbackStore.i18n.t('account.emailRequired')
|
||||
},
|
||||
value => {
|
||||
if (/.+@.+\..+/.test(value)) return true
|
||||
|
||||
return feedbackStore.i18n.t('emailIsNotValid')
|
||||
return feedbackStore.i18n.t('account.emailIsNotValid')
|
||||
},
|
||||
]
|
||||
}
|
||||
@@ -129,14 +129,14 @@ export function getPasswordRules() {
|
||||
if (value) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('required')
|
||||
return feedbackStore.i18n.t('misc.validation.required')
|
||||
}
|
||||
},
|
||||
value => {
|
||||
if (value?.length >= 8) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('passwordToShort')
|
||||
return feedbackStore.i18n.t('misc.validation.notEnoughChars')
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -155,14 +155,14 @@ export function getIbanRules() {
|
||||
if (value) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('required')
|
||||
return feedbackStore.i18n.t('misc.validation.required')
|
||||
}
|
||||
},
|
||||
value => {
|
||||
if (/[A-Z]{2}[0-9]{2}(?:[ ]?[0-9]{4}){4}(?!(?:[ ]?[0-9]){3})(?:[ ]?[0-9]{1,2})?/.test(value)) {
|
||||
return true
|
||||
} else {
|
||||
return feedbackStore.i18n.t('wrongIban')
|
||||
return feedbackStore.i18n.t('account.wrongIban')
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -33,58 +33,58 @@ export const useFeedbackStore = defineStore("feedbackStore", {
|
||||
}
|
||||
|
||||
case BannerStateEnum.BASKETPRODUCTADDED: {
|
||||
this.title = this.i18n.t('bannerMessages.basketProductAdded'); break;
|
||||
this.title = this.i18n.t('bannerMessages.basketTicketAdded'); break;
|
||||
}
|
||||
|
||||
case BannerStateEnum.BASKETPRODUCTREMOVED: {
|
||||
this.title = this.i18n.t("bannerMessages.basketProductRemoved"); break;
|
||||
this.title = this.i18n.t("bannerMessages.basketTicketRemoved"); break;
|
||||
}
|
||||
|
||||
|
||||
////////// Exercise feedback //////////
|
||||
|
||||
case BannerStateEnum.EXERCISESOLVED01: {
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolved01"); break;
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolvedNr", [0, 1]); break;
|
||||
}
|
||||
|
||||
case BannerStateEnum.EXERCISESOLVED02: {
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolved02"); break;
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolvedNr", [0, 2]); break;
|
||||
}
|
||||
|
||||
case BannerStateEnum.EXERCISESOLVED11: {
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolved11"); break;
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolvedNr", [1, 1]); break;
|
||||
}
|
||||
|
||||
case BannerStateEnum.EXERCISESOLVED12: {
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolved12"); break;
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolvedNr", [1, 2]); break;
|
||||
}
|
||||
|
||||
case BannerStateEnum.EXERCISESOLVED13: {
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolved13"); break;
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolvedNr", [1, 3]); break;
|
||||
}
|
||||
|
||||
case BannerStateEnum.EXERCISESOLVED21: {
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolved21"); break;
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolvedNr", [2, 1]); break;
|
||||
}
|
||||
|
||||
case BannerStateEnum.EXERCISESOLVED22: {
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolved22"); break;
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolvedNr", [2, 2]); break;
|
||||
}
|
||||
|
||||
case BannerStateEnum.EXERCISESOLVED23: {
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolved23"); break;
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolvedNr", [2, 3]); break;
|
||||
}
|
||||
|
||||
case BannerStateEnum.EXERCISESOLVED31: {
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolved31"); break;
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolvedNr", [3, 1]); break;
|
||||
}
|
||||
|
||||
case BannerStateEnum.EXERCISESOLVED32: {
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolved32"); break;
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolvedNr", [3, 2]); break;
|
||||
}
|
||||
|
||||
case BannerStateEnum.EXERCISESOLVED33: {
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolved33"); break;
|
||||
this.title = this.i18n.t("bannerMessages.exerciseSolvedNr", [3, 3]); break;
|
||||
}
|
||||
|
||||
|
||||
@@ -131,25 +131,6 @@ export const useFeedbackStore = defineStore("feedbackStore", {
|
||||
case BannerStateEnum.ORDERPLACESUCCESSFUL: {
|
||||
this.title = this.i18n.t('bannerMessages.orderPlaceSuccessfull'); break;
|
||||
}
|
||||
|
||||
|
||||
////////// API Endpoint /products //////////
|
||||
|
||||
case BannerStateEnum.PRODUCTCREATESUCCESSFUL: {
|
||||
this.title = this.i18n.t('bannerMessages.productCreateSuccessful'); break;
|
||||
}
|
||||
|
||||
case BannerStateEnum.PRODUCTCREATEERROR: {
|
||||
this.title = this.i18n.t('bannerMessages.productCreateError'); break;
|
||||
}
|
||||
|
||||
case BannerStateEnum.PRODUCTDELETESUCCESSFUL: {
|
||||
this.title = this.i18n.t('bannerMessages.productDeleteSuccessful'); break;
|
||||
}
|
||||
|
||||
case BannerStateEnum.PRODUCTDELETEERROR: {
|
||||
this.title = this.i18n.t('bannerMessages.productDeleteError'); break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user