diff --git a/frontend/libs/translations/src/lib/de.json b/frontend/libs/translations/src/lib/de.json new file mode 100644 index 0000000..9207bd3 --- /dev/null +++ b/frontend/libs/translations/src/lib/de.json @@ -0,0 +1,253 @@ +{ + "app": { "name": "Abrechnung" }, + "common": { + "username": "Benutzername", + "server": "Server", + "email": "E-Mail", + "password": "Passwort", + "repeatPassword": "Passwort wiederholen", + "passwordsDoNotMatch": "Passwörter stimmen nicht überein", + "save": "Speichern", + "yes": "Ja", + "no": "Nein", + "ok": "Ok", + "edit": "Bearbeiten", + "delete": "Löschen", + "confirm": "Bestätigen", + "add": "Hinzufügen", + "cancel": "Abbrechen", + "search": "Suchen ...", + "name": "Name", + "lastChanged": "Zuletzt geändert", + "lastChangedWithTime": "Zuletzt geändert: {{datetime}}", + "value": "Wert", + "date": "Datum", + "description": "Beschreibung", + "sortBy": "Sortieren nach", + "filterByTags": "Filtern nach Tags", + "tag_one": "Tag", + "tag_other": "Tags", + "total": "Gesamt", + "totalWithColon": "Gesamt:", + "shared": "Geteilt", + "shares": "Anteile", + "advanced": "Erweitert", + "price": "Preis", + "createdAt": "Erstellt am", + "send": "Senden", + "currency": "Währung", + "addNewTag": "Neuen Tag hinzufügen", + "exportAsCsv": "Als CSV Datei exportieren" + }, + "shareSelect": { + "selectedPeople_one": "{{count}} Person", + "selectedPeople_other": "{{count}} Personen", + "selectedEvent_one": "{{count}} Ereignis", + "selectedEvent_other": "{{count}} Ereignisse", + "accountSlashEvent": "Person / Ereignis", + "showEvents": "Ereignisse anzeigen" + }, + "navbar": { + "transactions": "Transaktionen", + "events": "Ereignisse", + "balances": "Salden", + "accounts": "Konten", + "groupSettings": "Einstellungen", + "activity": "Aktivität", + "profile": "Profil", + "settings": "Einstellungen", + "sessions": "Sitzungen", + "changeEmail": "E-Mail ändern", + "changePassword": "Passwort ändern", + "login": "Anmelden", + "signOut": "Abmelden", + "imprint": "Impressum" + }, + "groups": { + "addGroup": "Gruppe hinzufügen", + "list": { + "tabTitle": "Abrechnung - Gruppen", + "header": "Gruppen", + "guestUserDisclaimer": "Sie sind ein Gastbenutzer auf dieser Abrechnung und daher nicht berechtigt, neue Gruppen zu erstellen.", + "noGroups": "Keine Gruppen" + }, + "log": { + "tabTitle": "{{groupName}} - Aktivität", + "header": "Aktivität", + "messageInfo": "von {{username}} am {{datetime}}" + }, + "memberList": { + "tabTitle": "{{groupName}} - Mitglieder", + "invitedBy": "eingeladen von {{username}}, ", + "joined": "beigetreten am {{datetime}}", + "editor": "Editor", + "owner": "Besitzer", + "itsYou": "Du bist es", + "canWrite": "Kann bearbeiten", + "isOwner": "Ist Besitzer" + }, + "settings": { + "tabTitle": "{{groupName}} - Einstellungen", + "ownerDisclaimer": "Sie sind ein Besitzer dieser Gruppe", + "readAccessDisclaimer": "Sie haben nur Lesezugriff auf diese Gruppe", + "terms": "Bedingungen", + "autoAddAccounts": "Automatisch Konten für neu beigetretene Gruppenmitglieder hinzufügen", + "leaveGroup": "Gruppe verlassen", + "leaveGroupConfirm": "Sind Sie sicher, dass Sie die Gruppe {{group.name}} verlassen möchten? Wenn Sie das letzte Mitglied sind, das diese Gruppe verlässt, wird sie gelöscht, und ihre Transaktion geht für immer verloren..." + }, + "join": { + "tabTitle": "Abrechnung - Gruppe beitreten", + "youHaveBeenInvited": "Sie wurden zur Gruppe {{group.name}} eingeladen", + "invitationDescription": "Einladungsbeschreibung", + "invitationValidUntil": "Einladung gültig bis", + "invitationSingleUse": "Einladung nur einmalig", + "join": "Beitreten" + }, + "invites": { + "tabTitle": "{{groupName}} - Einladungslinks", + "header": "Aktive Einladungslinks", + "guestUserDisclaimer": "Sie sind ein Gastbenutzer auf dieser Abrechnung und daher nicht berechtigt, Gruppeneinladungen zu erstellen.", + "tokenHidden": "Token versteckt, wurde von einem anderen Mitglied erstellt" + } + }, + "images": { + "uploadImage": "Bild hochladen", + "chooseImage": "Bild auswählen", + "compressing": "komprimieren ..", + "filename": "Dateiname" + }, + "balanceTable": { "totalConsumed": "Empfangen / Verbraucht", "totalPaid": "Bezahlt", "balance": "Balance" }, + "transactions": { + "createTransaction": "Transaktion erstellen", + "createPurchase": "Einkauf erstellen", + "createTransfer": "Überweisung erstellen", + "noTransactions": "Keine Transaktionen", + "purchase": "Einkauf", + "transfer": "Überweisung", + "transferredFrom": "Von", + "transferredTo": "An", + "paidBy": "Bezahlt von", + "paidFor": "Für wen", + "confirmDeleteTransaction": "Löschen der Transaktion bestätigen", + "confirmDeleteTransactionInfo": "Sind Sie sicher, dass Sie die Transaktion \"{{transaction.name}}\" löschen möchten?", + "list": { "tabTitle": "{{groupName}} - Transaktionen" }, + "byFor": "von {{by}}, für {{for}}", + "positions": { + "positions": "Positionen", + "sharedPlusRest": "Geteilt + Rest", + "addPositions": "Positionen hinzufügen", + "remaining": "Verbleibend:" + } + }, + "accounts": { + "noAccounts": "Keine Konten", + "list": { "tabTitle": "{{groupName}} - Konten" }, + "balances": { + "tabTitle": "{{groupName}} - Salden", + "clearingAccountsRemainingBalances": "Einige Ereignisse haben noch offene Salden" + }, + "detail": { + "tabTitleEvent": "{{group.name}} - Ereignis {{account.name}}", + "tabTitleAccount": "{{group.name}} - Konto {{account.name}}" + }, + "event": "Ereignis", + "account": "Konto", + "balanceOf": "Saldo von {{account.name}}", + "clearingDistributionOf": "Teilnehmer von {{account.name}}", + "transactionsInvolving": "Transaktionen mit Beteiligung von {{account.name}}", + "participated": "Beteiligt", + "settleUp": "Begleichen", + "settlement": { + "transactionName": "Abrechnung", + "title": "Salden dieser Gruppe begleichen", + "whoPaysWhom": "{{from}} zahlt {{to}} {{money}}", + "settleButton": "Begleichen" + }, + "deleteConfirm": "Löschen bestätigen {{accountType}}", + "deleteConfirmBody": "Sind Sie sicher, dass Sie {{accountType}} \"{{accountName}}\" löschen möchten" + }, + "events": { + "list": { "tabTitle": "{{groupName}} - Ereignisse" }, + "createEvent": "Ereignis erstellen", + "noEvents": "Keine Ereignisse" + }, + "profile": { + "index": { + "tabTitle": "Abrechnung - Profil", + "pageTitle": "Profil", + "guestUserDisclaimer": "Sie sind ein Gastbenutzer auf dieser Abrechnung und daher nicht berechtigt, neue Gruppen oder Gruppeneinladungen zu erstellen.", + "registered": "Registriert" + }, + "settings": { + "tabTitle": "Abrechnung - Einstellungen", + "pageTitle": "Einstellungen", + "info": "Diese Einstellungen werden lokal auf Ihrem Gerät gespeichert. Das Löschen des lokalen Speichers Ihres Browsers setzt sie zurück.", + "theme": "Thema", + "themeSystemDefault": "Systemstandard", + "themeDarkMode": "Dunkelmodus", + "themeLightMode": "Hellmodus", + "clearCache": "Cache leeren", + "confirmClearCache": "Diese Aktion wird Ihren lokalen Cache löschen. Alle Ihre Einstellungen (diese Seite) werden nicht zurückgesetzt." + }, + "changePassword": { + "tabTitle": "Abrechnung - Passwort ändern", + "pageTitle": "Passwort ändern", + "success": "Passwort erfolgreich geändert", + "newPassword": "Neues Passwort" + }, + "changeEmail": { + "tabTitle": "Abrechnung - E-Mail ändern", + "pageTitle": "E-Mail ändern", + "success": "E-Mail-Änderung angefordert. Sie sollten bald eine E-Mail mit einem Bestätigungslink erhalten.", + "newEmail": "Neue E-Mail" + }, + "sessions": { + "tabTitle": "Abrechnung - Sitzungen", + "header": "Anmeldesitzungen", + "confirmDeleteSession": "Sitzung löschen?", + "areYouSureToDelete": "Sind Sie sicher, dass Sie die Sitzung {{sessionName}} löschen möchten" + } + }, + "auth": { + "register": { + "tabTitle": "Abrechnung - Registrieren", + "header": "Neues Konto registrieren", + "confirmButton": "Registrieren", + "registrationSuccess": "Erfolgreich registriert, bitte bestätigen Sie Ihre E-Mail, bevor Sie sich anmelden...", + "alreadyHasAccount": "Haben Sie bereits ein Konto? Anmelden" + }, + "login": { + "tabTitle": "Abrechnung - Anmelden", + "header": "Anmelden", + "loginSuccess": "Angemeldet ...", + "confirmButton": "Anmelden", + "noAccountRegister": "Kein Konto? Registrieren", + "forgotPassword": "Passwort vergessen?" + }, + "recoverPassword": { + "tabTitle": "Abrechnung - Passwort wiederherstellen", + "header": "Passwort wiederherstellen", + "body": "Bitte geben Sie Ihre E-Mail-Adresse ein. Ein Wiederherstellungslink wird in Kürze gesendet.", + "emailSent": "Ein Wiederherstellungslink wurde Ihnen per E-Mail gesendet." + }, + "confirmEmailChange": { + "tabTitle": "Abrechnung - E-Mail-Änderung bestätigen", + "header": "Bestätigen Sie Ihre neue E-Mail", + "confirmSuccessful": "Bestätigung erfolgreich", + "clickHereToConfirm": "Klicken Sie <1>hier, um Ihre neue E-Mail zu bestätigen." + }, + "confirmPasswordRecovery": { + "tabTitle": "Abrechnung - Passwortwiederherstellung bestätigen", + "header": "Passwortwiederherstellung bestätigen", + "successfulLinkToLogin": "Passwortwiederherstellung erfolgreich, bitte <1>anmelden mit Ihrem neuen Passwort." + }, + "confirmRegistration": { + "tabTitle": "Abrechnung - Registrierung bestätigen", + "header": "Registrierung bestätigen", + "confirmSuccessful": "Bestätigung erfolgreich", + "successfulLinkToLogin": "Bitte <1>anmelden mit Ihren Anmeldeinformationen.", + "clickHereToConfirm": "Klicken Sie <1>hier, um Ihre Registrierung zu bestätigen." + } + }, + "languages": { "en": "Englisch", "de": "Deutsch" } +} diff --git a/frontend/libs/translations/src/lib/de.ts b/frontend/libs/translations/src/lib/de.ts deleted file mode 100644 index eb824a8..0000000 --- a/frontend/libs/translations/src/lib/de.ts +++ /dev/null @@ -1,285 +0,0 @@ -import type { en } from "./en"; -import type { ReplaceConstStringWithString, DeepPartial } from "./util"; - -type EnglishTranslations = DeepPartial>; - -const translations = { - app: { - name: "Abrechnung", - }, - common: { - username: "Benutzername", - server: "Server", - email: "E-Mail", - password: "Passwort", - repeatPassword: "Passwort wiederholen", - passwordsDoNotMatch: "Passwörter stimmen nicht überein", - save: "Speichern", - yes: "Ja", - no: "Nein", - ok: "Ok", - edit: "Bearbeiten", - delete: "Löschen", - confirm: "Bestätigen", - add: "Hinzufügen", - cancel: "Abbrechen", - search: "Suchen ...", - name: "Name", - lastChanged: "Zuletzt geändert", - lastChangedWithTime: "Zuletzt geändert: {{datetime}}", - value: "Wert", - date: "Datum", - description: "Beschreibung", - sortBy: "Sortieren nach", - filterByTags: "Filtern nach Tags", - tag_one: "Tag", - tag_other: "Tags", - total: "Gesamt", - totalWithColon: "Gesamt:", - shared: "Geteilt", - shares: "Anteile", - advanced: "Erweitert", - price: "Preis", - createdAt: "Erstellt am", - send: "Senden", - currency: "Währung", - addNewTag: "Neuen Tag hinzufügen", - exportAsCsv: "Als CSV Datei exportieren", - }, - shareSelect: { - selectedPeople_one: "{{count}} Person", - selectedPeople_other: "{{count}} Personen", - selectedEvent_one: "{{count}} Ereignis", - selectedEvent_other: "{{count}} Ereignisse", - accountSlashEvent: "Person / Ereignis", - showEvents: "Ereignisse anzeigen", - }, - navbar: { - transactions: "Transaktionen", - events: "Ereignisse", - balances: "Salden", - accounts: "Konten", - groupSettings: "Einstellungen", - activity: "Aktivität", - profile: "Profil", - settings: "Einstellungen", - sessions: "Sitzungen", - changeEmail: "E-Mail ändern", - changePassword: "Passwort ändern", - login: "Anmelden", - signOut: "Abmelden", - imprint: "Impressum", - }, - groups: { - addGroup: "Gruppe hinzufügen", - list: { - tabTitle: "Abrechnung - Gruppen", - header: "Gruppen", - guestUserDisclaimer: - "Sie sind ein Gastbenutzer auf dieser Abrechnung und daher nicht berechtigt, neue Gruppen zu erstellen.", - noGroups: "Keine Gruppen", - }, - log: { - tabTitle: "{{groupName}} - Aktivität", - header: "Aktivität", - messageInfo: "von {{username}} am {{datetime}}", - }, - memberList: { - tabTitle: "{{groupName}} - Mitglieder", - invitedBy: "eingeladen von {{username}}, ", - joined: "beigetreten am {{datetime}}", - editor: "Editor", - owner: "Besitzer", - itsYou: "Du bist es", - canWrite: "Kann bearbeiten", - isOwner: "Ist Besitzer", - }, - settings: { - tabTitle: "{{groupName}} - Einstellungen", - ownerDisclaimer: "Sie sind ein Besitzer dieser Gruppe", - readAccessDisclaimer: "Sie haben nur Lesezugriff auf diese Gruppe", - terms: "Bedingungen", - autoAddAccounts: "Automatisch Konten für neu beigetretene Gruppenmitglieder hinzufügen", - leaveGroup: "Gruppe verlassen", - leaveGroupConfirm: - "Sind Sie sicher, dass Sie die Gruppe {{group.name}} verlassen möchten? Wenn Sie das letzte Mitglied sind, das diese Gruppe verlässt, wird sie gelöscht, und ihre Transaktion geht für immer verloren...", - }, - join: { - tabTitle: "Abrechnung - Gruppe beitreten", - youHaveBeenInvited: "Sie wurden zur Gruppe {{group.name}} eingeladen", - invitationDescription: "Einladungsbeschreibung", - invitationValidUntil: "Einladung gültig bis", - invitationSingleUse: "Einladung nur einmalig", - join: "Beitreten", - }, - invites: { - tabTitle: "{{groupName}} - Einladungslinks", - header: "Aktive Einladungslinks", - guestUserDisclaimer: - "Sie sind ein Gastbenutzer auf dieser Abrechnung und daher nicht berechtigt, Gruppeneinladungen zu erstellen.", - tokenHidden: "Token versteckt, wurde von einem anderen Mitglied erstellt", - }, - }, - images: { - uploadImage: "Bild hochladen", - chooseImage: "Bild auswählen", - compressing: "komprimieren ..", - filename: "Dateiname", - }, - balanceTable: { - totalConsumed: "Empfangen / Verbraucht", - totalPaid: "Bezahlt", - balance: "Balance", - }, - transactions: { - createTransaction: "Transaktion erstellen", - createPurchase: "Einkauf erstellen", - createTransfer: "Überweisung erstellen", - noTransactions: "Keine Transaktionen", - purchase: "Einkauf", - transfer: "Überweisung", - transferredFrom: "Von", - transferredTo: "An", - paidBy: "Bezahlt von", - paidFor: "Für wen", - confirmDeleteTransaction: "Löschen der Transaktion bestätigen", - confirmDeleteTransactionInfo: - 'Sind Sie sicher, dass Sie die Transaktion "{{transaction.name}}" löschen möchten?', - list: { - tabTitle: "{{groupName}} - Transaktionen", - }, - byFor: "von {{by}}, für {{for}}", - positions: { - positions: "Positionen", - sharedPlusRest: "Geteilt + Rest", - addPositions: "Positionen hinzufügen", - remaining: "Verbleibend:", - }, - }, - accounts: { - noAccounts: "Keine Konten", - list: { - tabTitle: "{{groupName}} - Konten", - }, - balances: { - tabTitle: "{{groupName}} - Salden", - clearingAccountsRemainingBalances: "Einige Ereignisse haben noch offene Salden", - }, - detail: { - tabTitleEvent: "{{group.name}} - Ereignis {{account.name}}", - tabTitleAccount: "{{group.name}} - Konto {{account.name}}", - }, - event: "Ereignis", - account: "Konto", - balanceOf: "Saldo von {{account.name}}", - clearingDistributionOf: "Teilnehmer von {{account.name}}", - transactionsInvolving: "Transaktionen mit Beteiligung von {{account.name}}", - participated: "Beteiligt", - settleUp: "Begleichen", - settlement: { - transactionName: "Abrechnung", - title: "Salden dieser Gruppe begleichen", - whoPaysWhom: "{{from}} zahlt {{to}} {{money}}", - settleButton: "Begleichen", - }, - deleteConfirm: "Löschen bestätigen {{accountType}}", - deleteConfirmBody: 'Sind Sie sicher, dass Sie {{accountType}} "{{accountName}}" löschen möchten', - }, - events: { - list: { - tabTitle: "{{groupName}} - Ereignisse", - }, - createEvent: "Ereignis erstellen", - noEvents: "Keine Ereignisse", - }, - profile: { - index: { - tabTitle: "Abrechnung - Profil", - pageTitle: "Profil", - guestUserDisclaimer: - "Sie sind ein Gastbenutzer auf dieser Abrechnung und daher nicht berechtigt, neue Gruppen oder Gruppeneinladungen zu erstellen.", - registered: "Registriert", - }, - settings: { - tabTitle: "Abrechnung - Einstellungen", - pageTitle: "Einstellungen", - info: "Diese Einstellungen werden lokal auf Ihrem Gerät gespeichert. Das Löschen des lokalen Speichers Ihres Browsers setzt sie zurück.", - theme: "Thema", - themeSystemDefault: "Systemstandard", - themeDarkMode: "Dunkelmodus", - themeLightMode: "Hellmodus", - clearCache: "Cache leeren", - confirmClearCache: - "Diese Aktion wird Ihren lokalen Cache löschen. Alle Ihre Einstellungen (diese Seite) werden nicht zurückgesetzt.", - }, - changePassword: { - tabTitle: "Abrechnung - Passwort ändern", - pageTitle: "Passwort ändern", - success: "Passwort erfolgreich geändert", - newPassword: "Neues Passwort", - }, - changeEmail: { - tabTitle: "Abrechnung - E-Mail ändern", - pageTitle: "E-Mail ändern", - success: "E-Mail-Änderung angefordert. Sie sollten bald eine E-Mail mit einem Bestätigungslink erhalten.", - newEmail: "Neue E-Mail", - }, - sessions: { - tabTitle: "Abrechnung - Sitzungen", - header: "Anmeldesitzungen", - confirmDeleteSession: "Sitzung löschen?", - areYouSureToDelete: "Sind Sie sicher, dass Sie die Sitzung {{sessionName}} löschen möchten", - }, - }, - auth: { - register: { - tabTitle: "Abrechnung - Registrieren", - header: "Neues Konto registrieren", - confirmButton: "Registrieren", - registrationSuccess: - "Erfolgreich registriert, bitte bestätigen Sie Ihre E-Mail, bevor Sie sich anmelden...", - alreadyHasAccount: "Haben Sie bereits ein Konto? Anmelden", - }, - login: { - tabTitle: "Abrechnung - Anmelden", - header: "Anmelden", - loginSuccess: "Angemeldet ...", - confirmButton: "Anmelden", - noAccountRegister: "Kein Konto? Registrieren", - forgotPassword: "Passwort vergessen?", - }, - recoverPassword: { - tabTitle: "Abrechnung - Passwort wiederherstellen", - header: "Passwort wiederherstellen", - body: "Bitte geben Sie Ihre E-Mail-Adresse ein. Ein Wiederherstellungslink wird in Kürze gesendet.", - emailSent: "Ein Wiederherstellungslink wurde Ihnen per E-Mail gesendet.", - }, - confirmEmailChange: { - tabTitle: "Abrechnung - E-Mail-Änderung bestätigen", - header: "Bestätigen Sie Ihre neue E-Mail", - confirmSuccessful: "Bestätigung erfolgreich", - clickHereToConfirm: "Klicken Sie <1>hier, um Ihre neue E-Mail zu bestätigen.", - }, - confirmPasswordRecovery: { - tabTitle: "Abrechnung - Passwortwiederherstellung bestätigen", - header: "Passwortwiederherstellung bestätigen", - successfulLinkToLogin: - "Passwortwiederherstellung erfolgreich, bitte <1>anmelden mit Ihrem neuen Passwort.", - }, - confirmRegistration: { - tabTitle: "Abrechnung - Registrierung bestätigen", - header: "Registrierung bestätigen", - confirmSuccessful: "Bestätigung erfolgreich", - successfulLinkToLogin: "Bitte <1>anmelden mit Ihren Anmeldeinformationen.", - clickHereToConfirm: "Klicken Sie <1>hier, um Ihre Registrierung zu bestätigen.", - }, - }, - languages: { - en: "Englisch", - de: "Deutsch", - }, -} as const satisfies EnglishTranslations; - -export const de = { - translations, -} as const; diff --git a/frontend/libs/translations/src/lib/en.json b/frontend/libs/translations/src/lib/en.json new file mode 100644 index 0000000..489b316 --- /dev/null +++ b/frontend/libs/translations/src/lib/en.json @@ -0,0 +1,263 @@ +{ + "app": { "name": "Abrechnung" }, + "common": { + "username": "Username", + "server": "Server", + "email": "E-Mail", + "password": "Password", + "repeatPassword": "Repeat Password", + "passwordsDoNotMatch": "Passwords do not match", + "save": "Save", + "yes": "Yes", + "no": "No", + "ok": "Ok", + "edit": "Edit", + "delete": "Delete", + "confirm": "Confirm", + "add": "Add", + "cancel": "Cancel", + "search": "Search ...", + "name": "Name", + "lastChanged": "Last changed", + "lastChangedWithTime": "last changed: {{datetime}}", + "value": "Value", + "date": "Date", + "description": "Description", + "sortBy": "Sort by", + "filterByTags": "Filter by tags", + "tag_one": "Tag", + "tag_other": "Tags", + "total": "Total", + "totalWithColon": "Total:", + "shared": "Shared", + "shares": "Shares", + "advanced": "Advanced", + "price": "Price", + "createdAt": "Created At", + "send": "Send", + "currency": "Currency", + "addNewTag": "Add new Tag", + "exportAsCsv": "Export as CSV", + "noneSoFar": "None so far" + }, + "shareSelect": { + "selectedPeople_one": "{{count}} Person", + "selectedPeople_other": "{{count}} People", + "selectedEvent_one": "{{count}} Event", + "selectedEvent_other": "{{count}} Events", + "accountSlashEvent": "Account / Event", + "showEvents": "Show Events" + }, + "navbar": { + "transactions": "Transactions", + "events": "Events", + "balances": "Balances", + "accounts": "Accounts", + "groupSettings": "Settings", + "activity": "Activity", + "profile": "Profile", + "settings": "Settings", + "sessions": "Sessions", + "changeEmail": "Change E-Mail", + "changePassword": "Change Password", + "login": "Login", + "signOut": "Sign Out", + "imprint": "Imprint" + }, + "groups": { + "addGroup": "Add Group", + "archivedDisclaimer": "This group is archived and therefore read-only.", + "list": { + "tabTitle": "Abrechnung - Groups", + "header": "Groups", + "archivedGroups": "Archived", + "guestUserDisclaimer": "You are a guest user on this Abrechnung and therefore not permitted to create new groups.", + "noGroups": "No Groups" + }, + "log": { + "tabTitle": "{{groupName}} - Activity", + "header": "Group Activity", + "messageInfo": "by {{username}} on {{datetime}}" + }, + "memberList": { + "tabTitle": "{{groupName}} - Members", + "invitedBy": "invited by {{username}}, ", + "joined": "joined {{datetime}}", + "editor": "Editor", + "owner": "Owner", + "itsYou": "It's you", + "canWrite": "Can Write", + "isOwner": "Is Owner" + }, + "settings": { + "tabTitle": "{{groupName}} - Settings", + "header": "Settings", + "ownerDisclaimer": "You are an owner of this group", + "readAccessDisclaimer": "You only have read access to this group", + "terms": "Terms", + "autoAddAccounts": "Automatically add accounts for newly joined group members", + "leaveGroup": "Leave Group", + "leaveGroupConfirm": "Are you sure you want to leave the group {{group.name}}. If you are the last member to leave this group it will be deleted and its transaction will be lost forever...", + "archiveGroup": "Archive Group", + "archiveGroupConfirm": "Are you sure you want to archive the group {{group.name}}. No modifications can be made to archived groups and they will be hidden in group lists. Only a group owner can reverse this action.", + "unarchiveGroup": "Unarchive Group", + "unarchiveGroupConfirm": "Are you sure you want to unarchive the group {{group.name}}. The group will no longer be read-only." + }, + "join": { + "tabTitle": "Abrechnung - Join Group", + "youHaveBeenInvited": "You have been invited to group {{group.name}}", + "invitationDescription": "Invitation Description", + "invitationValidUntil": "Invitation Valid Until", + "invitationSingleUse": "Invitation Single Use", + "join": "Join" + }, + "invites": { + "tabTitle": "{{groupName}} - Invite Links", + "header": "Active Invite Links", + "guestUserDisclaimer": "You are a guest user on this Abrechnung and therefore not permitted to create group invites.", + "tokenHidden": "token hidden, was created by another member" + } + }, + "images": { + "uploadImage": "Upload Image", + "chooseImage": "Choose Image", + "compressing": "compressing ..", + "filename": "File Name" + }, + "balanceTable": { "totalConsumed": "Received / Consumed", "totalPaid": "Paid", "balance": "Balance" }, + "transactions": { + "createTransaction": "Create Transaction", + "createPurchase": "Create Purchase", + "createPurchaseForAccount": "Create purchase with {{accountName}} as participant", + "createTransfer": "Create Transfer", + "noTransactions": "No Transactions", + "purchase": "Purchase", + "transfer": "Transfer", + "transferredFrom": "From", + "transferredTo": "To", + "paidBy": "Paid by", + "paidFor": "For whom", + "confirmDeleteTransaction": "Confirm delete transaction", + "confirmDeleteTransactionInfo": "Are you sure you want to delete the transaction \"{{transaction.name}}\"", + "list": { "tabTitle": "{{groupName}} - Transactions" }, + "byFor": "by {{by}}, for {{for}}", + "positions": { + "positions": "Positions", + "sharedPlusRest": "Shared + Rest", + "addPositions": "Add Positions", + "remaining": "Remaining:" + } + }, + "accounts": { + "noAccounts": "No Accounts", + "list": { "tabTitle": "{{groupName}} - Accounts" }, + "balances": { + "tabTitle": "{{groupName}} - Balances", + "clearingAccountsRemainingBalances": "Some Events have remaining balances" + }, + "detail": { + "tabTitleEvent": "{{group.name}} - Event {{account.name}}", + "tabTitleAccount": "{{group.name}} - Account {{account.name}}" + }, + "event": "Event", + "account": "Account", + "balanceOf": "Balance of {{account.name}}", + "clearingDistributionOf": "Participants of {{account.name}}", + "transactionsInvolving": "Transactions involving {{account.name}}", + "participated": "Participated", + "settleUp": "Settle Up", + "settlement": { + "transactionName": "Settlement", + "title": "Settle this groups balances", + "whoPaysWhom": "{{from}} pays {{to}} {{money}}", + "settleButton": "Settle" + }, + "deleteConfirm": "Confirm delete {{accountType}}", + "deleteConfirmBody": "Are you sure you want to delete the {{accountType}} \"{{accountName}}\"" + }, + "events": { + "list": { "tabTitle": "{{groupName}} - Events" }, + "createEvent": "Create Event", + "noEvents": "No Events" + }, + "profile": { + "index": { + "tabTitle": "Abrechnung - Profile", + "pageTitle": "Profile", + "guestUserDisclaimer": "You are a guest user on this Abrechnung and therefore not permitted to create new groups or group invites.", + "registered": "Registered" + }, + "settings": { + "tabTitle": "Abrechnung - Settings", + "pageTitle": "Settings", + "info": "These settings are stored locally on your device. Clearing your Browser's local storage will reset them.", + "theme": "Theme", + "themeSystemDefault": "System Default", + "themeDarkMode": "Dark Mode", + "themeLightMode": "Light Mode", + "clearCache": "Clear Cache", + "confirmClearCache": "This action will clear your local cache. All your settings (this page) will not be reset." + }, + "changePassword": { + "tabTitle": "Abrechnung - Change Password", + "pageTitle": "Change Password", + "success": "Successfully changed password", + "newPassword": "New Password" + }, + "changeEmail": { + "tabTitle": "Abrechnung - Change E-Mail", + "pageTitle": "Change E-Mail", + "success": "Requested email change, you should receive an email with a confirmation link soon", + "newEmail": "New E-Mail" + }, + "sessions": { + "tabTitle": "Abrechnung - Sessions", + "header": "Login Sessions", + "confirmDeleteSession": "Delete Session?", + "areYouSureToDelete": "Are you sure you want to delete session {{sessionName}}" + } + }, + "auth": { + "register": { + "title": "Register", + "tabTitle": "Abrechnung - Register", + "header": "Register a new account", + "confirmButton": "Register", + "registrationSuccess": "Registered successfully, please confirm your email before logging in...", + "alreadyHasAccount": "Already have an account? Sign in" + }, + "login": { + "tabTitle": "Abrechnung - Login", + "header": "Sign in", + "loginSuccess": "Logged in ...", + "confirmButton": "Login", + "noAccountRegister": "No account? register", + "forgotPassword": "Forgot your password?" + }, + "recoverPassword": { + "tabTitle": "Abrechnung - Recover Password", + "header": "Recover Password", + "body": "Please enter your email. A recovery link will be sent shortly after.", + "emailSent": "A recovery link has been sent to you via email." + }, + "confirmEmailChange": { + "tabTitle": "Abrechnung - Confirm E-Mail Change", + "header": "Confirm your new E-Mail", + "confirmSuccessful": "Confirmation successful", + "clickHereToConfirm": "Click <1>here to confirm your new email." + }, + "confirmPasswordRecovery": { + "tabTitle": "Abrechnung - Confirm Password Recovery", + "header": "Confirm Password Recovery", + "successfulLinkToLogin": "Password recovery successful, please <1>login using your new password." + }, + "confirmRegistration": { + "tabTitle": "Abrechnung - Confirm Registration", + "header": "Confirm Registration", + "confirmSuccessful": "Confirmation successful", + "successfulLinkToLogin": "Please <1>login using your credentials.", + "clickHereToConfirm": "Click <1>here to confirm your registration." + } + }, + "languages": { "en": "English", "de": "German" } +} diff --git a/frontend/libs/translations/src/lib/en.ts b/frontend/libs/translations/src/lib/en.ts deleted file mode 100644 index c2f18c9..0000000 --- a/frontend/libs/translations/src/lib/en.ts +++ /dev/null @@ -1,289 +0,0 @@ -const translations = { - app: { - name: "Abrechnung", - }, - common: { - username: "Username", - server: "Server", - email: "E-Mail", - password: "Password", - repeatPassword: "Repeat Password", - passwordsDoNotMatch: "Passwords do not match", - save: "Save", - yes: "Yes", - no: "No", - ok: "Ok", - edit: "Edit", - delete: "Delete", - confirm: "Confirm", - add: "Add", - cancel: "Cancel", - search: "Search ...", - name: "Name", - lastChanged: "Last changed", - lastChangedWithTime: "last changed: {{datetime}}", - value: "Value", - date: "Date", - description: "Description", - sortBy: "Sort by", - filterByTags: "Filter by tags", - tag_one: "Tag", - tag_other: "Tags", - total: "Total", - totalWithColon: "Total:", - shared: "Shared", - shares: "Shares", - advanced: "Advanced", - price: "Price", - createdAt: "Created At", - send: "Send", - currency: "Currency", - addNewTag: "Add new Tag", - exportAsCsv: "Export as CSV", - noneSoFar: "None so far", - }, - shareSelect: { - selectedPeople_one: "{{count}} Person", - selectedPeople_other: "{{count}} People", - selectedEvent_one: "{{count}} Event", - selectedEvent_other: "{{count}} Events", - accountSlashEvent: "Account / Event", - showEvents: "Show Events", - }, - navbar: { - transactions: "Transactions", - events: "Events", - balances: "Balances", - accounts: "Accounts", - groupSettings: "Settings", - activity: "Activity", - profile: "Profile", - settings: "Settings", - sessions: "Sessions", - changeEmail: "Change E-Mail", - changePassword: "Change Password", - login: "Login", - signOut: "Sign Out", - imprint: "Imprint", - }, - groups: { - addGroup: "Add Group", - archivedDisclaimer: "This group is archived and therefore read-only.", - list: { - tabTitle: "Abrechnung - Groups", - header: "Groups", - archivedGroups: "Archived", - guestUserDisclaimer: - "You are a guest user on this Abrechnung and therefore not permitted to create new groups.", - noGroups: "No Groups", - }, - log: { - tabTitle: "{{groupName}} - Activity", - header: "Group Activity", - messageInfo: "by {{username}} on {{datetime}}", - }, - memberList: { - tabTitle: "{{groupName}} - Members", - invitedBy: "invited by {{username}}, ", - joined: "joined {{datetime}}", - editor: "Editor", - owner: "Owner", - itsYou: "It's you", - canWrite: "Can Write", - isOwner: "Is Owner", - }, - settings: { - tabTitle: "{{groupName}} - Settings", - header: "Settings", - ownerDisclaimer: "You are an owner of this group", - readAccessDisclaimer: "You only have read access to this group", - terms: "Terms", - autoAddAccounts: "Automatically add accounts for newly joined group members", - leaveGroup: "Leave Group", - leaveGroupConfirm: - "Are you sure you want to leave the group {{group.name}}. If you are the last member to leave this group it will be deleted and its transaction will be lost forever...", - archiveGroup: "Archive Group", - archiveGroupConfirm: - "Are you sure you want to archive the group {{group.name}}. No modifications can be made to archived groups and they will be hidden in group lists. Only a group owner can reverse this action.", - unarchiveGroup: "Unarchive Group", - unarchiveGroupConfirm: - "Are you sure you want to unarchive the group {{group.name}}. The group will no longer be read-only.", - }, - join: { - tabTitle: "Abrechnung - Join Group", - youHaveBeenInvited: "You have been invited to group {{group.name}}", - invitationDescription: "Invitation Description", - invitationValidUntil: "Invitation Valid Until", - invitationSingleUse: "Invitation Single Use", - join: "Join", - }, - invites: { - tabTitle: "{{groupName}} - Invite Links", - header: "Active Invite Links", - guestUserDisclaimer: - "You are a guest user on this Abrechnung and therefore not permitted to create group invites.", - tokenHidden: "token hidden, was created by another member", - }, - }, - images: { - uploadImage: "Upload Image", - chooseImage: "Choose Image", - compressing: "compressing ..", - filename: "File Name", - }, - balanceTable: { - totalConsumed: "Received / Consumed", - totalPaid: "Paid", - balance: "Balance", - }, - transactions: { - createTransaction: "Create Transaction", - createPurchase: "Create Purchase", - createPurchaseForAccount: "Create purchase with {{accountName}} as participant", - createTransfer: "Create Transfer", - noTransactions: "No Transactions", - purchase: "Purchase", - transfer: "Transfer", - transferredFrom: "From", - transferredTo: "To", - paidBy: "Paid by", - paidFor: "For whom", - confirmDeleteTransaction: "Confirm delete transaction", - confirmDeleteTransactionInfo: 'Are you sure you want to delete the transaction "{{transaction.name}}"', - list: { - tabTitle: "{{groupName}} - Transactions", - }, - byFor: "by {{by}}, for {{for}}", - positions: { - positions: "Positions", - sharedPlusRest: "Shared + Rest", - addPositions: "Add Positions", - remaining: "Remaining:", - }, - }, - accounts: { - noAccounts: "No Accounts", - list: { - tabTitle: "{{groupName}} - Accounts", - }, - balances: { - tabTitle: "{{groupName}} - Balances", - clearingAccountsRemainingBalances: "Some Events have remaining balances", - }, - detail: { - tabTitleEvent: "{{group.name}} - Event {{account.name}}", - tabTitleAccount: "{{group.name}} - Account {{account.name}}", - }, - event: "Event", - account: "Account", - balanceOf: "Balance of {{account.name}}", - clearingDistributionOf: "Participants of {{account.name}}", - transactionsInvolving: "Transactions involving {{account.name}}", - participated: "Participated", - settleUp: "Settle Up", - settlement: { - transactionName: "Settlement", - title: "Settle this groups balances", - whoPaysWhom: "{{from}} pays {{to}} {{money}}", - settleButton: "Settle", - }, - deleteConfirm: "Confirm delete {{accountType}}", - deleteConfirmBody: 'Are you sure you want to delete the {{accountType}} "{{accountName}}"', - }, - events: { - list: { - tabTitle: "{{groupName}} - Events", - }, - createEvent: "Create Event", - noEvents: "No Events", - }, - profile: { - index: { - tabTitle: "Abrechnung - Profile", - pageTitle: "Profile", - guestUserDisclaimer: - "You are a guest user on this Abrechnung and therefore not permitted to create new groups or group invites.", - registered: "Registered", - }, - settings: { - tabTitle: "Abrechnung - Settings", - pageTitle: "Settings", - info: "These settings are stored locally on your device. Clearing your Browser's local storage will reset them.", - theme: "Theme", - themeSystemDefault: "System Default", - themeDarkMode: "Dark Mode", - themeLightMode: "Light Mode", - clearCache: "Clear Cache", - confirmClearCache: - "This action will clear your local cache. All your settings (this page) will not be reset.", - }, - changePassword: { - tabTitle: "Abrechnung - Change Password", - pageTitle: "Change Password", - success: "Successfully changed password", - newPassword: "New Password", - }, - changeEmail: { - tabTitle: "Abrechnung - Change E-Mail", - pageTitle: "Change E-Mail", - success: "Requested email change, you should receive an email with a confirmation link soon", - newEmail: "New E-Mail", - }, - sessions: { - tabTitle: "Abrechnung - Sessions", - header: "Login Sessions", - confirmDeleteSession: "Delete Session?", - areYouSureToDelete: "Are you sure you want to delete session {{sessionName}}", - }, - }, - auth: { - register: { - title: "Register", - tabTitle: "Abrechnung - Register", - header: "Register a new account", - confirmButton: "Register", - registrationSuccess: "Registered successfully, please confirm your email before logging in...", - alreadyHasAccount: "Already have an account? Sign in", - }, - login: { - tabTitle: "Abrechnung - Login", - header: "Sign in", - loginSuccess: "Logged in ...", - confirmButton: "Login", - noAccountRegister: "No account? register", - forgotPassword: "Forgot your password?", - }, - recoverPassword: { - tabTitle: "Abrechnung - Recover Password", - header: "Recover Password", - body: "Please enter your email. A recovery link will be sent shortly after.", - emailSent: "A recovery link has been sent to you via email.", - }, - confirmEmailChange: { - tabTitle: "Abrechnung - Confirm E-Mail Change", - header: "Confirm your new E-Mail", - confirmSuccessful: "Confirmation successful", - clickHereToConfirm: "Click <1>here to confirm your new email.", - }, - confirmPasswordRecovery: { - tabTitle: "Abrechnung - Confirm Password Recovery", - header: "Confirm Password Recovery", - successfulLinkToLogin: "Password recovery successful, please <1>login using your new password.", - }, - confirmRegistration: { - tabTitle: "Abrechnung - Confirm Registration", - header: "Confirm Registration", - confirmSuccessful: "Confirmation successful", - successfulLinkToLogin: "Please <1>login using your credentials.", - clickHereToConfirm: "Click <1>here to confirm your registration.", - }, - }, - languages: { - en: "English", - de: "German", - }, -} as const; - -export const en = { - translations, -} as const; diff --git a/frontend/libs/translations/src/lib/index.ts b/frontend/libs/translations/src/lib/index.ts index 690c209..f1bafbf 100644 --- a/frontend/libs/translations/src/lib/index.ts +++ b/frontend/libs/translations/src/lib/index.ts @@ -1,11 +1,11 @@ -import { en } from "./en"; -import { de } from "./de"; -export * from "./de"; -export * from "./en"; +import en from "./en.json"; +import de from "./de.json"; export const defaultNS = "translations"; export const resources = { - en: en, - de: de, + en: { + translations: en, + }, + de: { translations: de }, }; diff --git a/frontend/libs/translations/src/lib/util.ts b/frontend/libs/translations/src/lib/util.ts deleted file mode 100644 index d4fa961..0000000 --- a/frontend/libs/translations/src/lib/util.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type ReplaceConstStringWithString = { - [K in keyof T]: T[K] extends string ? string : ReplaceConstStringWithString; -}; - -export type DeepPartial = { - [K in keyof T]?: T[K] extends object ? DeepPartial : T[K]; -}; diff --git a/frontend/tsconfig.base.json b/frontend/tsconfig.base.json index 4a83e72..81db867 100644 --- a/frontend/tsconfig.base.json +++ b/frontend/tsconfig.base.json @@ -9,6 +9,7 @@ "experimentalDecorators": true, "allowJs": true, "esModuleInterop": true, + "resolveJsonModule": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "noImplicitOverride": true,