EN · DE · RU · FR · ES

#336: i18nKeys.json

projectforge-application/src/main/resources/i18nKeys.json JSON configuration, projectforge-application/src/main/resources/i18nKeys.json 3250 lines · 3250 code · 0 comments · 0 blank
Purpose: Internationalization resource bundle: i18nKeys.json. i18nKeys.json is part of the ProjectForge open-source project management application.

Source (first 100 lines)

[
  {"i18nKey":"plugins.banking.account","bundleName":"BankingI18nResources","translation":"Bank account","translationDE":"Bankkonto","usedInClasses":["org.projectforge.plugins.banking.BankAccountBalanceDO","org.projectforge.plugins.banking.BankAccountRecordDO","org.projectforge.plugins.banking.BankingImportStorage"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.bank","bundleName":"BankingI18nResources","translation":"Bank","translationDE":"Bank","usedInClasses":["org.projectforge.plugins.banking.BankAccountDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.bic","bundleName":"BankingI18nResources","translation":"BIC","translationDE":"BIC","usedInClasses":["org.projectforge.plugins.banking.BankAccountDO","org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.fullAccess","bundleName":"BankingI18nResources","translation":"Full access","translationDE":"Vollzugriff","usedInClasses":["org.projectforge.plugins.banking.BankAccountPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.iban","bundleName":"BankingI18nResources","translation":"IBAN","translationDE":"IBAN","usedInClasses":["org.projectforge.plugins.banking.BankAccountDO","org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.importDropArea","bundleName":"BankingI18nResources","translation":"Import transactions","translationDE":"Kontoumsätze importieren","usedInClasses":["org.projectforge.plugins.banking.BankAccountPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.importDropArea.tooltip","bundleName":"BankingI18nResources","translation":"You may drop Excel or csv files here including transactions. Any existing entry will be overwritten but will not be doubled. You may import files with overlapping time periods multiple times.","translationDE":"Hier können Kontoumsätze in den Formaten Excel oder CSV hochgeladen werden. Bereits importierte Datensätze werden überschrieben, aber nicht gedoppelt. Sie können also mehrfach überlappende Zeiträume importieren.","usedInClasses":["org.projectforge.plugins.banking.BankAccountPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.importSettings","bundleName":"BankingI18nResources","translation":"Settings for import of transactions","translationDE":"Importeinstellungen","usedInClasses":["org.projectforge.plugins.banking.BankAccountDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.name","bundleName":"BankingI18nResources","translation":"Name","translationDE":"Name","usedInClasses":["org.projectforge.plugins.banking.BankAccountDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.readonlyAccess","bundleName":"BankingI18nResources","translation":"Read-only access","translationDE":"Lesezugriff","usedInClasses":["org.projectforge.plugins.banking.BankAccountPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.accountIban","bundleName":"BankingI18nResources","translation":"IBAN of account","translationDE":"Konto-IBAN","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.accountName","bundleName":"BankingI18nResources","translation":"Name of account","translationDE":"Kontoname","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.amount","bundleName":"BankingI18nResources","translation":"Amount","translationDE":"Betrag","usedInClasses":["org.projectforge.plugins.banking.BankAccountBalanceDO","org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.cashflow","bundleName":"BankingI18nResources","translation":"Cash flow","translationDE":"Geldfluss","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordStatistics"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.checksum","bundleName":"BankingI18nResources","translation":"Checksum","translationDE":"Checksumme","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.checksum.info","bundleName":"BankingI18nResources","translation":"The checksum is calculated while importing records for detecting any later manipulation of date, amount, iban of receiver/sender etc.","translationDE":"Diese Checksumme wird beim Import berechnet und soll spätere Änderungen an Feldern, wie Datum, Betrag, IBAN, Empfänger etc. erkennbar machen.","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.checksumErrors","bundleName":"BankingI18nResources","translation":"Checksum error","translationDE":"Falsche Prüfsumme","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.collectionReference","bundleName":"BankingI18nResources","translation":"Collection reference","translationDE":"Sammlerreferenz","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.currency","bundleName":"BankingI18nResources","translation":"Currency","translationDE":"Währung","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.customerReference","bundleName":"BankingI18nResources","translation":"Customer reference","translationDE":"Kundenreferenz","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.date","bundleName":"BankingI18nResources","translation":"Date","translationDE":"Datum","usedInClasses":["org.projectforge.plugins.banking.BankAccountBalanceDO","org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.debteeId","bundleName":"BankingI18nResources","translation":"Debtee id","translationDE":"Gläubiger-ID","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.doublets","bundleName":"BankingI18nResources","translation":"Doublets","translationDE":"Dupletten","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.import.error.noBankAccountGiven","bundleName":"BankingI18nResources","translation":"No bank account given. Import cancelled.","translationDE":"Kein Bankkonto für den Import hinterlegt. Vorgang abgebrochen.","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordImportPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.import.title","bundleName":"BankingI18nResources","translation":"Import bank account records","translationDE":"Kontoumsätze importieren","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordImportPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.income","bundleName":"BankingI18nResources","translation":"Income","translationDE":"Einnahmen","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordStatistics"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.info","bundleName":"BankingI18nResources","translation":"Info","translationDE":"Info","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.mandateReference","bundleName":"BankingI18nResources","translation":"Mandate reference","translationDE":"Mandatsreferenz","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.outgo","bundleName":"BankingI18nResources","translation":"Outgo","translationDE":"Ausgaben","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordStatistics"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.receiverSender","bundleName":"BankingI18nResources","translation":"Receiver/Payer","translationDE":"Empfänger/Zahlungspflichtiger","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.subject","bundleName":"BankingI18nResources","translation":"Subject","translationDE":"Verwendungszweck","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.title.add","bundleName":"BankingI18nResources","translation":"New transaction","translationDE":"Neuer Kontoumsatz","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.title.edit","bundleName":"BankingI18nResources","translation":"Edit transaction","translationDE":"Kontoumsatz editieren","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.title.list","bundleName":"BankingI18nResources","translation":"List of transactions","translationDE":"Kontoumsätze","usedInClasses":["org.projectforge.plugins.banking.BankAccountPagesRest","org.projectforge.plugins.banking.BankAccountRecordPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.type","bundleName":"BankingI18nResources","translation":"Type","translationDE":"Typ","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.record.valueDate","bundleName":"BankingI18nResources","translation":"Value date","translationDE":"Wertstellung","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.title.add","bundleName":"BankingI18nResources","translation":"New bank account","translationDE":"Neues Bankkonto","usedInClasses":["org.projectforge.plugins.banking.BankAccountPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.title.edit","bundleName":"BankingI18nResources","translation":"Edit bank account","translationDE":"Bankkonto editieren","usedInClasses":["org.projectforge.plugins.banking.BankAccountPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.account.title.list","bundleName":"BankingI18nResources","translation":"Bank accounts","translationDE":"Bankkonten","usedInClasses":["org.projectforge.plugins.banking.BankAccountPagesRest","org.projectforge.plugins.banking.BankAccountRecordPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.accounts","bundleName":"BankingI18nResources","translation":"Bank accounts","translationDE":"Bankkonten","usedInClasses":["org.projectforge.plugins.banking.BankAccountRecordPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.import.error.recordWithWrongBankAccount","bundleName":"BankingI18nResources","translation":"The bank account of the record ''{0}'' is not contained in the required bank account''s IBAN: ''{1}''.","translationDE":"Das Bankkonto des Eintrag ''{0}'' ist nicht im geforderten Bankkonto enthalten: ''{1}''.","usedInClasses":["org.projectforge.plugins.banking.BankingImportStorage"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.import.job.title","bundleName":"BankingI18nResources","translation":"Banking records import job for ''{0}''","translationDE":"Import von Bankkontenumsätzen für ''{0}''","usedInClasses":["org.projectforge.plugins.banking.BankingImportJob"],"usedInFiles":[]},
  {"i18nKey":"plugins.banking.menu","bundleName":"BankingI18nResources","translation":"Bank accounts","translationDE":"Bankkonten","usedInClasses":["org.projectforge.plugins.banking.BankingPlugin"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.accessGroups","bundleName":"DataTransferI18nResources","translation":"Groups with file access","translationDE":"Gruppen mit Zugriff","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest","org.projectforge.plugins.datatransfer.rest.DataTransferPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.accessGroups.info","bundleName":"DataTransferI18nResources","translation":"Members of these groups (if given) will have access to the files of this area.","translationDE":"Mitglieder dieser Gruppe (wenn angegeben) haben vollen Zugriff auf Dateien dieses Bereichs.","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.accessUsers","bundleName":"DataTransferI18nResources","translation":"Users with file access","translationDE":"Benutzer mit Zugriff","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest","org.projectforge.plugins.datatransfer.rest.DataTransferPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.accessUsers.info","bundleName":"DataTransferI18nResources","translation":"These users (if given) will have access to the files of this area.","translationDE":"Diese Benutzer (wenn angegeben) haben vollen Zugriff auf Dateien dieses Bereichs.","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.admins","bundleName":"DataTransferI18nResources","translation":"Admins","translationDE":"Admins","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest","org.projectforge.plugins.datatransfer.rest.DataTransferPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.admins.info","bundleName":"DataTransferI18nResources","translation":"Admins have full access to this area and its settings. They are also allowed to change admins, enabling external access and deleting this area.","translationDE":"Admins haben vollen Zugriff auf diesen Bereich und alle Einstellungen. Sie können diesen Bereich auch löschen und für die externe Benutzung administrieren.","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.areaName","bundleName":"DataTransferI18nResources","translation":"Area name","translationDE":"Bereich","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDO"],"usedInFiles":["./plugins/org.projectforge.plugins.datatransfer/src/main/resources/mail/dataTransferFilesBeingDeletedMail.html"]},
  {"i18nKey":"plugins.datatransfer.audit","bundleName":"DataTransferI18nResources","translation":"Activities","translationDE":"Aktivitätsprotokoll","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAuditPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.audit.action","bundleName":"DataTransferI18nResources","translation":"Action","translationDE":"Aktion","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAuditPageRest"],"usedInFiles":["./plugins/org.projectforge.plugins.datatransfer/src/main/resources/mail/dataTransferMail.html"]},
  {"i18nKey":"plugins.datatransfer.audit.display","bundleName":"DataTransferI18nResources","translation":"Display activities","translationDE":"Aktivitätsprotokoll","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.audit.downloadEvents","bundleName":"DataTransferI18nResources","translation":"Download events of the last 30 days","translationDE":"Download-Ereignisse der letzten 30 Tage","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAuditPageRest"],"usedInFiles":["./plugins/org.projectforge.plugins.datatransfer/src/main/resources/mail/dataTransferMail.html"]},
  {"i18nKey":"plugins.datatransfer.audit.downloadedBy","bundleName":"DataTransferI18nResources","translation":"Downloaded by","translationDE":"Heruntergeladen von","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAuditPageRest"],"usedInFiles":["./plugins/org.projectforge.plugins.datatransfer/src/main/resources/mail/dataTransferMail.html"]},
  {"i18nKey":"plugins.datatransfer.audit.events","bundleName":"DataTransferI18nResources","translation":"Events of the last 30 days","translationDE":"Ereignisse der letzten 30 Tage","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAuditPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.button.downloadAll","bundleName":"DataTransferI18nResources","translation":"Download all","translationDE":"Alles herunterladen","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferPageRest","org.projectforge.plugins.datatransfer.restPublic.DataTransferPublicPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.button.downloadAll.info","bundleName":"DataTransferI18nResources","translation":"Download all files in one ZIP archive.","translationDE":"Alle Dateien in einem ZIP-Archiv herunterladen.","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferPageRest","org.projectforge.plugins.datatransfer.restPublic.DataTransferPublicPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.capacity","bundleName":"DataTransferI18nResources","translation":"Capacity","translationDE":"Kapazität","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.capacity.stats","bundleName":"DataTransferI18nResources","translation":"{0}/{1} ({2}%)","translationDE":"{0}/{1} ({2}%)","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaCapacity"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.description","bundleName":"DataTransferI18nResources","translation":"Description","translationDE":"Beschreibung","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.description.info","bundleName":"DataTransferI18nResources","translation":"This description is also visible for external users with access via link/password.","translationDE":"Diese Beschreibung ist auch für externe Benutzer über Link/Passwort einsehbar.","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.expired","bundleName":"DataTransferI18nResources","translation":"Will be deleted shortly.","translationDE":"Wird in Kürze gelöscht.","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferUtils"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.expiresIn","bundleName":"DataTransferI18nResources","translation":"Files expiry","translationDE":"Löschfrist","usedInClasses":[],"usedInFiles":["./plugins/org.projectforge.plugins.datatransfer/src/main/resources/mail/dataTransferFilesBeingDeletedMail.html"]},
  {"i18nKey":"plugins.datatransfer.expiryDays","bundleName":"DataTransferI18nResources","translation":"Files expiry [days]","translationDE":"Löschfrist Dateien [Tage]","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDO","org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest","org.projectforge.plugins.datatransfer.rest.DataTransferPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.expiryDays.info","bundleName":"DataTransferI18nResources","translation":"Each file will be deleted automatically after.","translationDE":"Jede Datei dieses Bereichs wird automatisch gelöscht.","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDO","org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest","org.projectforge.plugins.datatransfer.rest.DataTransferPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.access.title","bundleName":"DataTransferI18nResources","translation":"External access","translationDE":"Externer Zugriff","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.accessToken","bundleName":"DataTransferI18nResources","translation":"Access token","translationDE":"Zugriffstoken","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.accessToken.info","bundleName":"DataTransferI18nResources","translation":"Access token as part of the external link for direct access for external users. Please renew if you assume that this token was leaked.","translationDE":"Dieser Zugriffstoken ist Teil des Links für externe Personen. Bitte erneuern, falls dieser Zugriff in unbefugte Hände geraten sein könnte.","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.download.enabled","bundleName":"DataTransferI18nResources","translation":"Enabled for external downloads","translationDE":"Externer Download freigegeben","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDO","org.projectforge.plugins.datatransfer.rest.DataTransferPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.download.enabled.info","bundleName":"DataTransferI18nResources","translation":"If enabled, this area is accessible for external downloads via link (including access token) and password.","translationDE":"Wenn freigegeben, können externe Personen Dateien via Link und Zugriffstoken herunterladen.","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.download.enabled.title","bundleName":"DataTransferI18nResources","translation":"External download","translationDE":"Externer Download","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.link","bundleName":"DataTransferI18nResources","translation":"External access link","translationDE":"External Zugriffslink","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferArea","org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest","org.projectforge.plugins.datatransfer.rest.DataTransferPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.link.renew","bundleName":"DataTransferI18nResources","translation":"Renew","translationDE":"Erneuern","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.link.renew.info","bundleName":"DataTransferI18nResources","translation":"Please renew the link if you assume that this token was leaked. The old one will be invalid after clicking the save button.","translationDE":"Bitte den Link erneuern, wenn der Link in unbefugte Hände geraten sein könnte. Der alte Link wird erst durch Speichern ungültig.","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.noAccess","bundleName":"DataTransferI18nResources","translation":"No external access given to this area.","translationDE":"Kein externer Zugriff auf diesen Bereich.","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAccessChecker","org.projectforge.plugins.datatransfer.restPublic.DataTransferPublicSession"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.password","bundleName":"DataTransferI18nResources","translation":"Password","translationDE":"Passwort","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDO","org.projectforge.plugins.datatransfer.rest.DataTransferPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.password.info","bundleName":"DataTransferI18nResources","translation":"This password improves security and is protected by brute-force protection.","translationDE":"Dieses Passwort soll die Sicherheit gegen Zugriffe erhöhen und ist durch einen Brute-Force-Schutz gesichert.","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.password.renew","bundleName":"DataTransferI18nResources","translation":"Renew","translationDE":"Erneuern","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.password.renew.info","bundleName":"DataTransferI18nResources","translation":"If you change or renew this password, please inform all users.","translationDE":"Nach Änderung des Passworts bitte alle Personen informieren.","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.upload.enabled","bundleName":"DataTransferI18nResources","translation":"Enabled for external uploads","translationDE":"Externer Upload freigegeben","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDO","org.projectforge.plugins.datatransfer.rest.DataTransferPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.upload.enabled.info","bundleName":"DataTransferI18nResources","translation":"If enabled, this area is accessible for external uploads via link (including access token) and password.","translationDE":"Wenn freigegeben, können externe Personen über den Link und Passwort hochladen.","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDO"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.upload.enabled.title","bundleName":"DataTransferI18nResources","translation":"External upload","translationDE":"Externer Upload","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.userInfo","bundleName":"DataTransferI18nResources","translation":"Your name or e-mail","translationDE":"Name oder E-Mail","usedInClasses":["org.projectforge.plugins.datatransfer.restPublic.DataTransferPublicPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.userInfo.info","bundleName":"DataTransferI18nResources","translation":"This is an optional field to let the owners of this data transfer area know who you are.","translationDE":"Füllen Sie dieses optionale Angabe aus, damit die Eigentümer dieses Datentransferbereichs wissen, wer Sie sind.","usedInClasses":["org.projectforge.plugins.datatransfer.restPublic.DataTransferPublicPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.external.userPrefix","bundleName":"DataTransferI18nResources","translation":"External","translationDE":"Externe:r","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDao"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.internal.link","bundleName":"DataTransferI18nResources","translation":"Internal link","translationDE":"Interner Link","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.mail.link","bundleName":"DataTransferI18nResources","translation":"Data transfer link","translationDE":"Link zum Datentransferbereich","usedInClasses":[],"usedInFiles":["./plugins/org.projectforge.plugins.datatransfer/src/main/resources/mail/dataTransferMail.html"]},
  {"i18nKey":"plugins.datatransfer.mail.notificationBeforeDeletion.hint","bundleName":"DataTransferI18nResources","translation":"You may renew the expiring time by simply clicking the file being deleted followed by clicking the update button.","translationDE":"Die Löschfrist kann erneuert werden, indem eine Datei angewählt und anschließend einfach der Button 'Ändern' geklickt wird.","usedInClasses":[],"usedInFiles":["./plugins/org.projectforge.plugins.datatransfer/src/main/resources/mail/dataTransferFilesBeingDeletedMail.html"]},
  {"i18nKey":"plugins.datatransfer.mail.notificationBeforeDeletion.info","bundleName":"DataTransferI18nResources","translation":"List of files being deleted:","translationDE":"Dateien, die demnächst gelöscht werden:","usedInClasses":[],"usedInFiles":["./plugins/org.projectforge.plugins.datatransfer/src/main/resources/mail/dataTransferFilesBeingDeletedMail.html"]},
  {"i18nKey":"plugins.datatransfer.mail.notificationBeforeDeletion.subject","bundleName":"DataTransferI18nResources","translation":"Notification of files expiring in your data transfer areas","translationDE":"Ankündigung von Löschfristen im Datentransfer","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferNotificationMailService"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.mail.observe.message","bundleName":"DataTransferI18nResources","translation":"The following activities were detected in the data transfer area ''{0}'' you observe.","translationDE":"Die folgenden Bewegungen in dem von dir beobachteten Datentransferbereich ''{0}'' wurden erkannt.","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferNotificationMailService"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.mail.observe.subject","bundleName":"DataTransferI18nResources","translation":"Activities in ''{0}''","translationDE":"Aktivitäten in ''{0}''","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferNotificationMailService"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.maxUploadSize","bundleName":"DataTransferI18nResources","translation":"Maximum upload size","translationDE":"Maximale Uploadgröße","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDO","org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest","org.projectforge.plugins.datatransfer.rest.DataTransferPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.maxUploadSize.info","bundleName":"DataTransferI18nResources","translation":"Maximum upload size of a single file. Max size of this area in total is this value doubled.","translationDE":"Maximale Uploadgröße einer Datei. Die maximale Größe dieses gesamten Bereichs beträgt den doppelten Wert.","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferAreaDO","org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest","org.projectforge.plugins.datatransfer.rest.DataTransferPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.menu","bundleName":"DataTransferI18nResources","translation":"Data transfer","translationDE":"Datentransfer","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferPlugin"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.observers","bundleName":"DataTransferI18nResources","translation":"Observers","translationDE":"Beobachter","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest","org.projectforge.plugins.datatransfer.rest.DataTransferPageRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.observers.info","bundleName":"DataTransferI18nResources","translation":"These observers will receive notifications on upload (internal and external) as well as on external downloads via mail.","translationDE":"Diese Beobachter bekommen Benachrichtigungs-E-Mails, wenn in diesem Bereich Dateien hochgeladen (intern oder extern) oder von extern heruntergeladen wurden.","usedInClasses":["org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest"],"usedInFiles":[]},
  {"i18nKey":"plugins.datatransfer.personalBox","bundleName":"DataTransferI18nResources","translation":"Personal box","translationDE":"Persönliche Box","usedInClasses":["org.projectforge.plugins.datatransfer.DataTransferPlugin","org.projectforge.plugins.datatransfer.rest.DataTransferAreaPagesRest","org.projectforge.plugins.datatransfer.rest.DataTransferPersonalBoxPageRest"],"usedInFiles":[]},

Git History

868d6abb7 2025 -> 2026
eeaafe0df Adresses: image-handling: minimizing images approx. 100k with JPEG, recalculation of images and previews for admins.
9534401d5 WIP: AddressImportUploadPage
4650706f7 WIP: vcards import
bf33c20a9 DevelopmentMainForRelease.main (i18n stuff fixed)

868d6abb7

2025 -> 2026
868d6abb75cd191a892911ac8e45058932cf9074
diff --git a/projectforge-application/src/main/resources/i18nKeys.json b/projectforge-application/src/main/resources/i18nKeys.json
index 7971f47f0..3f74731ea 100644
--- a/projectforge-application/src/main/resources/i18nKeys.json
+++ b/projectforge-application/src/main/resources/i18nKeys.json
@@ -204,7 +204,7 @@
   {"i18nKey":"access.violation.userNotMemberOf","bundleName":"I18nResources","translation":"Operation only allowed for users of group(s) ''{0}'' (perhaps other groups are also allowed).","translationDE":"Operation ist nur für Benutzer:innen der Gruppe(n) ''{0}'' erlaubt (ggf. auch andere Gruppen möglich).","usedInClasses":["org.projectforge.framework.access.AccessCheckerImpl"],"usedInFiles":[]},
   {"i18nKey":"access.write","bundleName":"I18nResources","translation":"Write access","translationDE":"Schreibzugriff","usedInClasses":["org.projectforge.web.gantt.GanttChartEditForm"],"usedInFiles":[]},
   {"i18nKey":"add","bundleName":"I18nResources","translation":"Add","translationDE":"Hinzufügen","usedInClasses":["org.projectforge.plugins.merlin.rest.MerlinPagesRest","org.projectforge.rest.MenuCustomizerRest","org.projectforge.rest.core.AbstractPagesRest","org.projectforge.ui.UIButton","org.projectforge.web.fibu.AbstractRechnungEditForm","org.projectforge.web.fibu.AuftragEditForm","org.projectforge.web.fibu.RechnungCostEditTablePanel","org.projectforge.web.humanresources.HRPlanningEditForm"],"usedInFiles":[]},
-  {"i18nKey":"address","bundleName":"I18nResources","translation":"Address","translationDE":"Adresse","usedInClasses":["org.projectforge.business.address.AddressImageDao","org.projectforge.business.address.PersonalAddressDao","org.projectforge.framework.persistence.DaoConst","org.projectforge.menu.builder.MenuItemDefId","org.projectforge.plugins.marketing.rest.AddressCampaignValuePagesRest","org.projectforge.registry.Registry","org.projectforge.rest.SendTextMessagePageRest","org.projectforge.rest.calendar.FullCalendarEvent"],"usedInFiles":[]},
+  {"i18nKey":"address","bundleName":"I18nResources","translation":"Address","translationDE":"Adresse","usedInClasses":["org.projectforge.business.address.AddressImageDao","org.projectforge.business.address.PersonalAddressDao","org.projectforge.framework.persistence.DaoConst","org.projectforge.menu.builder.MenuItemDefId","org.projectforge.plugins.marketing.rest.AddressCampaignValuePagesRest","org.projectforge.registry.Registry","org.projectforge.rest.AddressViewPageRest","org.projectforge.rest.SendTextMessagePageRest","org.projectforge.rest.calendar.FullCalendarEvent"],"usedInFiles":[]},
   {"i18nKey":"address.accessException.userHasNoRightForAddressbook","bundleName":"I18nResources","translation":"User has no right for the current address and its addressbook","translationDE":"Benutzer:in hat keine Berechtigung für die ausgewählte Adresse und dessen Addressbuch","usedInClasses":["org.projectforge.business.address.PersonalAddressDao"],"usedInFiles":[]},
   {"i18nKey":"address.accessException.userIsNotOwnerOfPersonalAddress","bundleName":"I18nResources","translation":"User is not owner of personal address book.","translationDE":"Benutzer:in ist nicht Besitzer:in der persönlichen Adresse.","usedInClasses":["org.projectforge.business.address.PersonalAddressDao"],"usedInFiles":[]},
   {"i18nKey":"address.addressStatus","bundleName":"I18nResources","translation":"Address status","translationDE":"Adressstatus","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.plugins.marketing.rest.AddressCampaignValuePagesRest","org.projectforge.rest.AddressMultiSelectedPageRest","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":[]},
@@ -488,12 +488,12 @@
   {"i18nKey":"attachment.testDecryption.failed","bundleName":"I18nResources","translation":"Decryption failed (wrong password or corrupted zip file)?","translationDE":"Entschlüsselung fehlgeschlagen (falsches Passwort oder ungültiges ZIP-Archiv?)","usedInClasses":["org.projectforge.rest.AttachmentsServicesRest"],"usedInFiles":[]},
   {"i18nKey":"attachment.testDecryption.successful","bundleName":"I18nResources","translation":"Decryption was successful.","translationDE":"Entschlüsselung erfolgreich.","usedInClasses":["org.projectforge.rest.AttachmentsServicesRest"],"usedInFiles":[]},
   {"i18nKey":"attachment.upload.title","bundleName":"I18nResources","translation":"You may upload multiple files here by dropping in or clicking.","translationDE":"Dateien durch Klick auswählen oder Dateien hier hinziehen.","usedInClasses":["org.projectforge.ui.UIAttachmentList"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/input/DynamicAttachmentList.jsx"]},
-  {"i18nKey":"attachment.zip.encrypted","bundleName":"I18nResources","translation":"Encrypted","translationDE":"verschlüsselt","usedInClasses":["org.projectforge.jcr.ZipMode"],"usedInFiles":[]},
-  {"i18nKey":"attachment.zip.encryptedStandard","bundleName":"I18nResources","translation":"Encrypted (ZIP standard)","translationDE":"verschlüsselt (ZIP-Standard)","usedInClasses":["org.projectforge.jcr.ZipMode"],"usedInFiles":[]},
+  {"i18nKey":"attachment.zip.encrypted","bundleName":"I18nResources","translation":"Encrypted","translationDE":"verschlüsselt","usedInClasses":["org.projectforge.common.ZipMode"],"usedInFiles":[]},
+  {"i18nKey":"attachment.zip.encryptedStandard","bundleName":"I18nResources","translation":"Encrypted (ZIP standard)","translationDE":"verschlüsselt (ZIP-Standard)","usedInClasses":["org.projectforge.common.ZipMode"],"usedInFiles":[]},
   {"i18nKey":"attachment.zip.encryptionAlgorithm","bundleName":"I18nResources","translation":"Encryption algorithm","translationDE":"Verschlüsselungsalgorithmus","usedInClasses":["org.projectforge.framework.jcr.Attachment"],"usedInFiles":[]},
-  {"i18nKey":"attachment.zip.encrytpedAes128","bundleName":"I18nResources","translation":"Encrypted (AES-128)","translationDE":"verschlüsselt (AES-128)","usedInClasses":["org.projectforge.jcr.ZipMode"],"usedInFiles":[]},
-  {"i18nKey":"attachment.zip.encrytpedAes256","bundleName":"I18nResources","translation":"Encrypted (AES-256, very secure)","translationDE":"verschlüsselt (AES-256, hohe Sicherheit)","usedInClasses":["org.projectforge.jcr.ZipMode"],"usedInFiles":[]},
-  {"i18nKey":"attachment.zip.standard","bundleName":"I18nResources","translation":"No encryption","translationDE":"ohne Verschlüsselung","usedInClasses":["org.projectforge.jcr.ZipMode"],"usedInFiles":[]},
+  {"i18nKey":"attachment.zip.encrytpedAes128","bundleName":"I18nResources","translation":"Encrypted (AES-128)","translationDE":"verschlüsselt (AES-128)","usedInClasses":["org.projectforge.common.ZipMode"],"usedInFiles":[]},
+  {"i18nKey":"attachment.zip.encrytpedAes256","bundleName":"I18nResources","translation":"Encrypted (AES-256, very secure)","translationDE":"verschlüsselt (AES-256, hohe Sicherheit)","usedInClasses":["org.projectforge.common.ZipMode"],"usedInFiles":[]},
+  {"i18nKey":"attachment.zip.standard","bundleName":"I18nResources","translation":"No encryption","translationDE":"ohne Verschlüsselung","usedInClasses":["org.projectforge.common.ZipMode"],"usedInFiles":[]},
   {"i18nKey":"attachments","bundleName":"I18nResources","translation":"Attachments","translationDE":"Anhänge","usedInClasses":["org.projectforge.framework.jcr.AttachmentsService","org.projectforge.plugins.datatransfer.DataTransferNotificationMailService","org.projectforge.plugins.merlin.rest.MerlinAttachmentsActionListener","org.projectforge.ui.UIAgGridColumnDef","org.projectforge.ui.UIAttachmentList","org.projectforge.web.fibu.AuftragEditForm"],"usedInFiles":[]},
   {"i18nKey":"attachments.short","bundleName":"I18nResources","translation":"Att.","translationDE":"Anh.","usedInClasses":["org.projectforge.web.fibu.AuftragListPage"],"usedInFiles":[]},
   {"i18nKey":"attr.validSince","bundleName":"I18nResources","translation":"Valid since","translationDE":"Gültig ab","usedInClasses":["org.projectforge.business.fibu.CurrencyConversionRateDO","org.projectforge.business.fibu.EmployeeValidSinceAttrDO","org.projectforge.rest.fibu.CurrencyPairPagesRest"],"usedInFiles":[]},
@@ -793,7 +793,7 @@
   {"i18nKey":"duration.seconds.one","bundleName":"I18nResources","translation":"1 second","translationDE":"1 Sekunde","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"dvelop.title","bundleName":"I18nResources","translation":"D-velop","translationDE":"D-velop","usedInClasses":["org.projectforge.rest.dvelop.DvelopPageRest"],"usedInFiles":[]},
   {"i18nKey":"edit","bundleName":"I18nResources","translation":"Edit","translationDE":"Bearbeiten","usedInClasses":["org.projectforge.model.rest.RestPaths","org.projectforge.plugins.ihk.IHKForm","org.projectforge.plugins.merlin.rest.MerlinPagesRest","org.projectforge.rest.AddressPagesRest","org.projectforge.web.fibu.AbstractRechnungEditForm","org.projectforge.web.fibu.AuftragEditForm","org.projectforge.web.wicket.flowlayout.IconType"],"usedInFiles":[]},
-  {"i18nKey":"email","bundleName":"I18nResources","translation":"E-mail","translationDE":"E-Mail","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.business.address.AddressExport","org.projectforge.business.address.AddressTextImportService","org.projectforge.business.ldap.PFUserDOConverter","org.projectforge.framework.persistence.user.entities.PFUserDO","org.projectforge.plugins.merlin.rest.MerlinExecutionPageRest","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.UserPagesRest","org.projectforge.web.admin.SetupForm","org.projectforge.web.fibu.AuftragEditForm","org.projectforge.web.user.UserSelectPanel"],"usedInFiles":[]},
+  {"i18nKey":"email","bundleName":"I18nResources","translation":"E-mail","translationDE":"E-Mail","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.business.address.AddressExport","org.projectforge.business.address.AddressTextImportService","org.projectforge.business.ldap.PFUserDOConverter","org.projectforge.framework.persistence.user.entities.PFUserDO","org.projectforge.plugins.merlin.rest.MerlinExecutionPageRest","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.UserPagesRest","org.projectforge.rest.sipgate.SipgateContactService","org.projectforge.web.admin.SetupForm","org.projectforge.web.fibu.AuftragEditForm","org.projectforge.web.user.UserSelectPanel"],"usedInFiles":[]},
   {"i18nKey":"emptyInBrackets","bundleName":"I18nResources","translation":"<empty>","translationDE":"<leer>","usedInClasses":["org.projectforge.plugins.marketing.rest.AddressCampaignValuePagesRest"],"usedInFiles":[]},
   {"i18nKey":"ended","bundleName":"I18nResources","translation":"ended","translationDE":"beendet","usedInClasses":["org.projectforge.business.fibu.KundeStatus","org.projectforge.business.fibu.ProjektFilter","org.projectforge.business.fibu.ProjektStatus","org.projectforge.business.fibu.kost.KostFilter","org.projectforge.business.fibu.kost.KostentraegerStatus","org.projectforge.web.fibu.Kost1ListForm","org.projectforge.web.fibu.Kost2ListForm","org.projectforge.web.fibu.ProjektListForm"],"usedInFiles":[]},
   {"i18nKey":"error","bundleName":"I18nResources","translation":"An error occurs: {0}","translationDE":"Ein Fehler trat auf: {0}","usedInClasses":["org.projectforge.business.fibu.ForecastExportContext","org.projectforge.business.fibu.SEPATransferGenerator","org.projectforge.common.html.CssClass","org.projectforge.common.logging.LogLevel","org.projectforge.framework.utils.ResultHolderStatus","org.projectforge.plugins.ihk.IHKExporter","org.projectforge.rest.AddressServicesRest","org.projectforge.rest.address.importer.AddressImportUploadPageRest","org.projectforge.rest.importer.AbstractImportPageRest","org.projectforge.web.fibu.AuftragListPage","org.projectforge.web.fibu.EingangsrechnungEditPage","org.projectforge.web.registry.WebRegistry"],"usedInFiles":[]},
@@ -1400,6 +1400,7 @@
   {"i18nKey":"gender.notApplicable","bundleName":"I18nResources","translation":"not applicable","translationDE":"nicht zutreffend","usedInClasses":["org.projectforge.business.fibu.IsoGender"],"usedInFiles":[]},
   {"i18nKey":"gender.notKnown","bundleName":"I18nResources","translation":"not known","translationDE":"unbekannt","usedInClasses":["org.projectforge.business.fibu.IsoGender"],"usedInFiles":[]},
   {"i18nKey":"gender.unknown","bundleName":"I18nResources","translation":"unknown","translationDE":"unbekannt","usedInClasses":["org.projectforge.framework.persistence.user.entities.Gender"],"usedInFiles":[]},
+  {"i18nKey":"goreact.menu.classics","bundleName":"I18nResources","translation":"Go to classic UI","translationDE":"Zeige klassische Ansicht","usedInClasses":["org.projectforge.rest.core.AbstractPagesRest"],"usedInFiles":[]},
   {"i18nKey":"group","bundleName":"I18nResources","translation":"Group","translationDE":"Gruppe","usedInClasses":["org.projectforge.business.address.AddressTextParser","org.projectforge.framework.access.AccessDao","org.projectforge.framework.access.AccessType","org.projectforge.framework.access.GroupTaskAccessDO","org.projectforge.framework.persistence.DaoConst","org.projectforge.menu.builder.MenuItemDefId","org.projectforge.plugins.todo.ToDoDO","org.projectforge.plugins.todo.ToDoEditForm","org.projectforge.plugins.todo.ToDoListPage","org.projectforge.plugins.todo.rest.ToDoPagesRest","org.projectforge.registry.Registry","org.projectforge.rest.task.TaskWizardPageRest","org.projectforge.ui.AutoCompletion","org.projectforge.web.access.AccessEditForm","org.projectforge.web.access.AccessListForm","org.projectforge.web.access.AccessListPage","org.projectforge.web.admin.TaskWizardForm","org.projectforge.web.user.GroupEditPage","org.projectforge.web.user.GroupListPage"],"usedInFiles":[]},
   {"i18nKey":"group.assignedUsers","bundleName":"I18nResources","translation":"Assigned users","translationDE":"Assoziierte Benutzer:in","usedInClasses":["org.projectforge.framework.persistence.user.entities.GroupDO","org.projectforge.rest.GroupPagesRest","org.projectforge.web.user.GroupEditForm","org.projectforge.web.user.GroupListPage"],"usedInFiles":[]},
   {"i18nKey":"group.error.groupnameAlreadyExists","bundleName":"I18nResources","translation":"Group name already exists.","translationDE":"Gruppenname ist bereits vergeben.","usedInClasses":["org.projectforge.rest.GroupPagesRest","org.projectforge.web.user.GroupEditForm"],"usedInFiles":[]},
@@ -1889,7 +1890,7 @@
   {"i18nKey":"panel.error.groupNotFound","bundleName":"I18nResources","translation":"Group doesn't exist.","translationDE":"Gruppe nicht existent.","usedInClasses":["org.projectforge.web.user.NewGroupSelectPanel"],"usedInFiles":[]},
   {"i18nKey":"panel.error.projectNotFound","bundleName":"I18nResources","translation":"Project doesn't exist.","translationDE":"Projekt nicht existent.","usedInClasses":["org.projectforge.web.fibu.NewProjektSelectPanel"],"usedInFiles":[]},
   {"i18nKey":"parse","bundleName":"I18nResources","translation":"Parse","translationDE":"Einlesen","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
-  {"i18nKey":"password","bundleName":"I18nResources","translation":"Password","translationDE":"Passwort","usedInClasses":["org.projectforge.framework.jcr.Attachment","org.projectforge.framework.persistence.jpa.PersistenceCallsStatsBuilder","org.projectforge.jcr.ZipUtils","org.projectforge.plugins.datatransfer.restPublic.DataTransferPublicPageRest","org.projectforge.rest.AttachmentPageRest","org.projectforge.rest.CardDAVInfoPageRest","org.projectforge.rest.UserPagesRest","org.projectforge.rest.calendar.CalendarSubscriptionInfoPageRest","org.projectforge.rest.my2fa.My2FAServicesRest","org.projectforge.rest.pub.LoginPageRest","org.projectforge.rest.pub.SetupPageRest","org.projectforge.web.admin.SetupForm"],"usedInFiles":["./projectforge-wicket/src/main/java/org/projectforge/web/wicket/flowlayout/PasswordPanel.html"]},
+  {"i18nKey":"password","bundleName":"I18nResources","translation":"Password","translationDE":"Passwort","usedInClasses":["org.projectforge.common.ZipUtils","org.projectforge.framework.jcr.Attachment","org.projectforge.framework.persistence.jpa.PersistenceCallsStatsBuilder","org.projectforge.plugins.datatransfer.restPublic.DataTransferPublicPageRest","org.projectforge.rest.AttachmentPageRest","org.projectforge.rest.CardDAVInfoPageRest","org.projectforge.rest.UserPagesRest","org.projectforge.rest.calendar.CalendarSubscriptionInfoPageRest","org.projectforge.rest.my2fa.My2FAServicesRest","org.projectforge.rest.pub.LoginPageRest","org.projectforge.rest.pub.SetupPageRest","org.projectforge.web.admin.SetupForm"],"usedInFiles":["./projectforge-wicket/src/main/java/org/projectforge/web/wicket/flowlayout/PasswordPanel.html"]},
   {"i18nKey":"password.forgotten.link","bundleName":"I18nResources","translation":"Forgotten credentials?","translationDE":"Zugangsdaten vergessen?","usedInClasses":["org.projectforge.rest.pub.LoginPageRest"],"usedInFiles":[]},
   {"i18nKey":"password.forgotten.mail.subject","bundleName":"I18nResources","translation":"Password reset ProjectForge®","translationDE":"Passwortreset ProjectForge®","usedInClasses":["org.projectforge.framework.persistence.user.service.PasswordResetService"],"usedInFiles":[]},
   {"i18nKey":"password.forgotten.mailSentTo","bundleName":"I18nResources","translation":"Mail with reset link mailed to ''{0}''. Please check also Your spam folder and check, if Your username or e-mail is correct.","translationDE":"E-Mail mit dem Passwortrücksetzen-Link wurde gesendet an ''{0}''. Bitte im Spam-Ordner schauen bzw. überprüfen, ob der Benutzer:innenname bzw. E-Mail korrekt ist.","usedInClasses":["org.projectforge.rest.pub.PasswordForgottenPageRest"],"usedInFiles":[]},
@@ -2641,7 +2642,7 @@
   {"i18nKey":"tutorial.unknown","bundleName":"I18nResources","translation":"Can't process this tutorial request.","translationDE":"Die Tutorialanfrage kann nicht bearbeitet werden.","usedInClasses":[],"usedInFiles":[]},

eeaafe0df

Adresses: image-handling: minimizing images approx. 100k with JPEG, recalculation of images and previews for admins.
eeaafe0dfecbe75db5cd982832be2968fae17074
diff --git a/projectforge-application/src/main/resources/i18nKeys.json b/projectforge-application/src/main/resources/i18nKeys.json
index f13459513..7971f47f0 100644
--- a/projectforge-application/src/main/resources/i18nKeys.json
+++ b/projectforge-application/src/main/resources/i18nKeys.json
@@ -230,7 +230,7 @@
   {"i18nKey":"address.book.vCardSingleExport","bundleName":"I18nResources","translation":"Export vCard","translationDE":"Export vCard","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":[]},
   {"i18nKey":"address.book.vCardsImport.clickToEdit","bundleName":"I18nResources","translation":"Click on a row to edit the address and compare fields.","translationDE":"Klicken Sie auf eine Zeile, um die Adresse zu bearbeiten und Felder zu vergleichen.","usedInClasses":["org.projectforge.rest.address.importer.AddressImportUploadPageRest"],"usedInFiles":[]},
   {"i18nKey":"address.book.vCardsImport.dataLoaded","bundleName":"I18nResources","translation":"VCF data has been loaded. Select the fields you want to apply.","translationDE":"VCF-Daten wurden geladen. Wählen Sie die Felder aus, die Sie übernehmen möchten.","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
-  {"i18nKey":"address.book.vCardsImport.description","bundleName":"I18nResources","translation":"Here, vCards (.vcf file format) can be imported into the address book. Existing addresses are not duplicated, but simply supplemented (e.g., with phone numbers or email addresses).","translationDE":"Hier können vCards (Dateiformat .vcf) in das Adressbuch importiert werden. Bereits vorhandene Adressen werden nicht dupliziert, sondern nur ergänzt (z. B. um Telefonnummern oder E-Mail-Adressen).","usedInClasses":["org.projectforge.rest.address.importer.AddressImportUploadPageRest"],"usedInFiles":[]},
+  {"i18nKey":"address.book.vCardsImport.description","bundleName":"I18nResources","translation":"Here, vCards (.vcf file format) can be imported into the address book. Existing addresses are not duplicated, but simply supplemented (e.g., with phone numbers or email addresses).\n\nAddresses can then be compared and imported manually, even field by field.","translationDE":"Hier können vCards (Dateiformat .vcf) in das Adressbuch importiert werden. Bereits vorhandene Adressen werden nicht dupliziert, sondern nur ergänzt (z. B. um Telefonnummern oder E-Mail-Adressen).\n\nAdressen können anschließend abgeglichen und manuell, auch feldweise, importiert werden.","usedInClasses":["org.projectforge.rest.address.importer.AddressImportUploadPageRest"],"usedInFiles":[]},
   {"i18nKey":"address.book.vCardsImport.dropHint","bundleName":"I18nResources","translation":"Drop VCF file here","translationDE":"VCF-Datei hier ablegen","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
   {"i18nKey":"address.book.vCardsImport.dropInfo","bundleName":"I18nResources","translation":"Matching address will be selected automatically","translationDE":"Passende Adresse wird automatisch ausgewählt","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
   {"i18nKey":"address.book.vCardsImport.dropLabel","bundleName":"I18nResources","translation":"Or drop VCF file","translationDE":"Oder VCF-Datei ablegen","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
@@ -290,7 +290,7 @@
   {"i18nKey":"address.heading.privateAddress","bundleName":"I18nResources","translation":"Private address","translationDE":"Privatadresse","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest","org.projectforge.rest.address.importer.AddressImportUploadPageRest"],"usedInFiles":[]},
   {"i18nKey":"address.heading.privateAddress2","bundleName":"I18nResources","translation":"Private address 2","translationDE":"Privatadresse 2","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"address.heading.privateContact","bundleName":"I18nResources","translation":"Private contact","translationDE":"Privater Kontakt","usedInClasses":[],"usedInFiles":[]},
-  {"i18nKey":"address.image","bundleName":"I18nResources","translation":"Image","translationDE":"Bild","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
+  {"i18nKey":"address.image","bundleName":"I18nResources","translation":"Image","translationDE":"Bild","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.rest.address.importer.AddressImportUploadPageRest"],"usedInFiles":[]},
   {"i18nKey":"address.image.upload.error","bundleName":"I18nResources","translation":"Couldn''t upload image. Supported formats are png, gif, and jpeg for now with maximum size of {0}.","translationDE":"Bild kann nicht hochgeladen werden. Es werden die Bildformate PNG, GIF und JPEG mit einer Maximalgröße von {0} unterstützt.","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/CustomizedAddressImage.jsx"]},
   {"i18nKey":"address.list.legend","bundleName":"I18nResources","translation":"* <span style=\"color:blue;\">Blue lines</span> mark your favorites.","translationDE":"* <span style=\"color:blue;\">Blaue Zeilen</span> markieren deine Favoriten.","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
   {"i18nKey":"address.mailing","bundleName":"I18nResources","translation":"Mailing","translationDE":"Mailing","usedInClasses":["org.projectforge.business.address.AddressExport"],"usedInFiles":[]},
@@ -1299,7 +1299,7 @@
   {"i18nKey":"file.upload.deleteSelected.confirm","bundleName":"I18nResources","translation":"Do you really want to delete all selected files?","translationDE":"Sollen jetzt wirklich alle ausgewählten Dateien unwiderruflich gelöscht werden?","usedInClasses":["org.projectforge.ui.UIAttachmentList"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/input/DynamicAttachmentList.jsx"]},
   {"i18nKey":"file.upload.downloadSelected","bundleName":"I18nResources","translation":"Download selected","translationDE":"Ausgewählte Dateien herunterladen","usedInClasses":["org.projectforge.ui.UIAttachmentList"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/input/DynamicAttachmentList.jsx"]},
   {"i18nKey":"file.upload.downloadTemplate","bundleName":"I18nResources","translation":"Download template as an example.","translationDE":"Schablone als Beispiel herunterladen.","usedInClasses":["org.projectforge.rest.importer.AbstractImportUploadPageRest"],"usedInFiles":[]},
-  {"i18nKey":"file.upload.dropArea","bundleName":"I18nResources","translation":"Select a file or drop it here.","translationDE":"Datei auswählen oder hier hinziehen.","usedInClasses":["org.projectforge.rest.address.importer.AddressImportUploadPageRest","org.projectforge.rest.importer.AbstractImportUploadPageRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/CustomizedAddressImage.jsx"]},
+  {"i18nKey":"file.upload.dropArea","bundleName":"I18nResources","translation":"Select a file or drop it here.","translationDE":"Datei auswählen oder hier hinziehen.","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.rest.address.importer.AddressImportUploadPageRest","org.projectforge.rest.importer.AbstractImportUploadPageRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/CustomizedAddressImage.jsx"]},
   {"i18nKey":"file.upload.error","bundleName":"I18nResources","translation":"Error while uploading the file.","translationDE":"Fehler beim Upload der Datei.","usedInClasses":["org.projectforge.rest.address.importer.AddressImportUploadPageRest","org.projectforge.rest.importer.AbstractImportUploadPageRest"],"usedInFiles":[]},
   {"i18nKey":"file.upload.error.fileAlreadyExists","bundleName":"I18nResources","translation":"File ''{0}'' already exists.","translationDE":"Die Datei ''{0}'' existiert bereits.","usedInClasses":["org.projectforge.framework.jcr.AttachmentsService","org.projectforge.ui.UIAttachmentList"],"usedInFiles":[]},
   {"i18nKey":"file.upload.error.maxSizeExceeded","bundleName":"I18nResources","translation":"Can''t upload file ''{0}'', maximum configured file size is exceeded: {1}>{2}.","translationDE":"Datei ''{0}'' kann nicht hochgeladen werden. Die konfigurierte Maximalgröße wurde überschritten: {1}>{2}.","usedInClasses":["org.projectforge.common.MaxFileSizeExceeded"],"usedInFiles":[]},
@@ -1470,7 +1470,7 @@
   {"i18nKey":"hr.planning.weekend","bundleName":"I18nResources","translation":"Week-end","translationDE":"Wochenende","usedInClasses":["org.projectforge.business.humanresources.HRPlanningEntryDO","org.projectforge.web.humanresources.HRPlanningListPage"],"usedInFiles":[]},
   {"i18nKey":"hr.planning.workdays","bundleName":"I18nResources","translation":"Workdays","translationDE":"Arbeitstage","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"ibanvalidator.wronglength.de","bundleName":"I18nResources","translation":"The field ''${label}'' starts with ''DE'', but a german IBAN must have 22 characters.","translationDE":"Das Feld ''${label}'' beginnt mit ''DE''. Eine deutsche IBAN muss jedoch aus 22 Zeichen bestehen.","usedInClasses":["org.projectforge.web.common.IbanValidator"],"usedInFiles":[]},
-  {"i18nKey":"id","bundleName":"I18nResources","translation":"Id","translationDE":"Id","usedInClasses":["org.apache.batik.util.XMLConstants","org.projectforge.business.address.AddressExport","org.projectforge.business.address.PersonalAddressDao","org.projectforge.business.book.BookDao","org.projectforge.business.fibu.AuftragDao","org.projectforge.business.fibu.AuftragsCacheService","org.projectforge.business.fibu.CurrencyConversionServiceSupport","org.projectforge.business.fibu.EingangsrechnungsPositionDO","org.projectforge.business.fibu.EmployeeSalaryDao","org.projectforge.business.fibu.EmployeeServiceSupport","org.projectforge.business.fibu.InvoiceService","org.projectforge.business.fibu.ProjektDO","org.projectforge.business.fibu.RechnungDao","org.projectforge.business.fibu.RechnungService","org.projectforge.business.fibu.RechnungsPositionDO","org.projectforge.business.fibu.kost.Kost1DO","org.projectforge.business.fibu.kost.Kost1Dao","org.projectforge.business.fibu.kost.Kost2ArtDao","org.projectforge.business.fibu.kost.Kost2DO","org.projectforge.business.fibu.kost.Kost2Dao","org.projectforge.business.fibu.kost.KostZuweisungDO","org.projectforge.business.gantt.GanttChart","org.projectforge.business.gantt.GanttChartDao","org.projectforge.business.gantt.GanttTaskImpl","org.projectforge.business.humanresources.HRPlanningDao","org.projectforge.business.humanresources.HRPlanningEntryDO","org.projectforge.business.orga.ContractDao","org.projectforge.business.orga.VisitorbookDO","org.projectforge.business.task.TaskDao","org.projectforge.business.task.TaskNode","org.projectforge.business.task.formatter.WicketTaskFormatter","org.projectforge.business.timesheet.TimesheetDao","org.projectforge.business.timesheet.TimesheetExport","org.projectforge.business.user.GroupDao","org.projectforge.business.user.UserDao","org.projectforge.business.user.UserPrefDao","org.projectforge.business.vacation.model.VacationDO","org.projectforge.excel.ExcelUtils","org.projectforge.framework.ToStringUtil","org.projectforge.framework.access.AccessDao","org.projectforge.framework.access.AccessEntryDO","org.projectforge.framework.access.GroupTaskAccessDO","org.projectforge.framework.jobs.AbstractJob","org.projectforge.framework.json.HibernateProxySerializer","org.projectforge.framework.json.IdOnlySerializer","org.projectforge.framework.persistence.api.BaseDao","org.projectforge.framework.persistence.candh.CandHMaster","org.projectforge.framework.persistence.database.DatabaseService","org.projectforge.framework.persistence.database.ReindexerRegistry","org.projectforge.framework.persistence.database.ReindexerStrategy","org.projectforge.framework.persistence.entities.DefaultBaseDO","org.projectforge.framework.persistence.history.HistoryService","org.projectforge.framework.persistence.jpa.PfPersistenceContext","org.projectforge.framework.persistence.search.HibernateSearchDependentObjectsReindexer","org.projectforge.framework.persistence.user.entities.UserPrefEntryDO","org.projectforge.framework.persistence.user.entities.UserRightDO","org.projectforge.framework.persistence.xstream.ProxyIdRefMarshaller","org.projectforge.menu.builder.FavoritesMenuReaderWriter","org.projectforge.plugins.banking.BankingServicesRest","org.projectforge.plugins.datatransfer.DataTransferAreaDO","org.projectforge.plugins.datatransfer.rest.DataTransferAuditPageRest","org.projectforge.plugins.datatransfer.rest.DataTransferPageRest","org.projectforge.plugins.datatransfer.restPublic.DataTransferPublicAttachmentPageRest","org.projectforge.plugins.datatransfer.restPublic.DataTransferPublicPageRest","org.projectforge.plugins.datatransfer.restPublic.DataTransferPublicServicesRest","org.projectforge.plugins.ihk.IHKExporter","org.projectforge.plugins.marketing.rest.AddressCampaignValuePagesRest","org.projectforge.plugins.memo.MemoDO","org.projectforge.plugins.merlin.MerlinTemplateDO","org.projectforge.plugins.merlin.rest.MerlinExecutionPageRest","org.projectforge.plugins.merlin.rest.MerlinVariablePageRest","org.projectforge.plugins.skillmatrix.SkillEntryDO","org.projectforge.rest.AddressImageServicesRest","org.projectforge.rest.AddressServicesRest","org.projectforge.rest.AddressViewPageRest","org.projectforge.rest.AttachmentPageRest","org.projectforge.rest.AttachmentsServicesRest","org.projectforge.rest.HistoryEntryUserCommentModalRest","org.projectforge.rest.TimesheetFavoritesRest","org.projectforge.rest.TimesheetMultiSelectedPageRest","org.projectforge.rest.TimesheetPagesRest","org.projectforge.rest.VacationAccountPageRest","org.projectforge.rest.admin.LogViewerPageRest","org.projectforge.rest.calendar.CalendarFilterServicesRest","org.projectforge.rest.calendar.CalendarSettingsPageRest","org.projectforge.rest.calendar.TeamEventPagesRest","org.projectforge.rest.config.IdObjectDeserializer","org.projectforge.rest.config.JacksonConfiguration","org.projectforge.rest.core.AbstractPagesRest","org.projectforge.rest.dvelop.DvelopClient","org.projectforge.rest.fibu.CurrencyConversionRatePageRest","org.projectforge.rest.fibu.CurrencyPairPagesRest","org.projectforge.rest.fibu.EmployeePagesRest","org.projectforge.rest.fibu.EmployeeValidSinceAttrPageRest","org.projectforge.rest.fibu.kost.Kost2ArtPagesRest","org.projectforge.rest.importer.AbstractImportPageRest","org.projectforge.rest.json.UISelectTypeSerializer","org.projectforge.rest.my2fa.My2FAServicesRest","org.projectforge.rest.my2fa.My2FASetupPageRest","org.projectforge.rest.my2fa.WebAuthnEntryPageRest","org.projectforge.rest.orga.VisitorbookEntryPageRest","org.projectforge.rest.orga.VisitorbookPagesRest","org.projectforge.rest.poll.PollPageRest","org.projectforge.rest.scripting.MyScriptExecutePageRest","org.projectforge.rest.scripting.ScriptExecutePageRest","org.projectforge.rest.scripting.ScriptPagesRest","org.projectforge.rest.task.TaskFavoritesRest","org.projectforge.rest.task.TaskServicesRest","org.projectforge.security.dto.WebAuthnPublicKeyCredentialCreationOptions","org.projectforge.security.webauthn.WebAuthnEntryDao","org.projectforge.ui.UISelect","org.projectforge.web.OrphanedLinkFilter","org.projectforge.web.fibu.EingangsrechnungEditPage","org.projectforge.web.fibu.Kost2ArtEditForm","org.projectforge.web.fibu.Kost2ArtListPage","org.projectforge.web.fibu.RechnungEditPage","org.projectforge.web.gantt.GanttTreeTableNode","org.projectforge.web.wicket.AbstractEditPage","org.projectforge.web.wicket.components.TabPanel"],"usedInFiles":["./projectforge-rest/src/main/kotlin/org/projectforge/rest/json/Deserializers.kt"]},
+  {"i18nKey":"id","bundleName":"I18nResources","translation":"Id","translationDE":"Id","usedInClasses":["org.apache.batik.util.XMLConstants","org.projectforge.business.address.AddressExport","org.projectforge.business.address.AddressImageDao","org.projectforge.business.address.PersonalAddressDao","org.projectforge.business.book.BookDao","org.projectforge.business.fibu.AuftragDao","org.projectforge.business.fibu.AuftragsCacheService","org.projectforge.business.fibu.CurrencyConversionServiceSupport","org.projectforge.business.fibu.EingangsrechnungsPositionDO","org.projectforge.business.fibu.EmployeeSalaryDao","org.projectforge.business.fibu.EmployeeServiceSupport","org.projectforge.business.fibu.InvoiceService","org.projectforge.business.fibu.ProjektDO","org.projectforge.business.fibu.RechnungDao","org.projectforge.business.fibu.RechnungService","org.projectforge.business.fibu.RechnungsPositionDO","org.projectforge.business.fibu.kost.Kost1DO","org.projectforge.business.fibu.kost.Kost1Dao","org.projectforge.business.fibu.kost.Kost2ArtDao","org.projectforge.business.fibu.kost.Kost2DO","org.projectforge.business.fibu.kost.Kost2Dao","org.projectforge.business.fibu.kost.KostZuweisungDO","org.projectforge.business.gantt.GanttChart","org.projectforge.business.gantt.GanttChartDao","org.projectforge.business.gantt.GanttTaskImpl","org.projectforge.business.humanresources.HRPlanningDao","org.projectforge.business.humanresources.HRPlanningEntryDO","org.projectforge.business.orga.ContractDao","org.projectforge.business.orga.VisitorbookDO","org.projectforge.business.task.TaskDao","org.projectforge.business.task.TaskNode","org.projectforge.business.task.formatter.WicketTaskFormatter","org.projectforge.business.timesheet.TimesheetDao","org.projectforge.business.timesheet.TimesheetExport","org.projectforge.business.user.GroupDao","org.projectforge.business.user.UserDao","org.projectforge.business.user.UserPrefDao","org.projectforge.business.vacation.model.VacationDO","org.projectforge.excel.ExcelUtils","org.projectforge.framework.ToStringUtil","org.projectforge.framework.access.AccessDao","org.projectforge.framework.access.AccessEntryDO","org.projectforge.framework.access.GroupTaskAccessDO","org.projectforge.framework.jobs.AbstractJob","org.projectforge.framework.json.HibernateProxySerializer","org.projectforge.framework.json.IdOnlySerializer","org.projectforge.framework.persistence.api.BaseDao","org.projectforge.framework.persistence.candh.CandHMaster","org.projectforge.framework.persistence.database.DatabaseService","org.projectforge.framework.persistence.database.ReindexerRegistry","org.projectforge.framework.persistence.database.ReindexerStrategy","org.projectforge.framework.persistence.entities.DefaultBaseDO","org.projectforge.framework.persistence.history.HistoryService","org.projectforge.framework.persistence.jpa.PfPersistenceContext","org.projectforge.framework.persistence.search.HibernateSearchDependentObjectsReindexer","org.projectforge.framework.persistence.user.entities.UserPrefEntryDO","org.projectforge.framework.persistence.user.entities.UserRightDO","org.projectforge.framework.persistence.xstream.ProxyIdRefMarshaller","org.projectforge.menu.builder.FavoritesMenuReaderWriter","org.projectforge.plugins.banking.BankingServicesRest","org.projectforge.plugins.datatransfer.DataTransferAreaDO","org.projectforge.plugins.datatransfer.rest.DataTransferAuditPageRest","org.projectforge.plugins.datatransfer.rest.DataTransferPageRest","org.projectforge.plugins.datatransfer.restPublic.DataTransferPublicAttachmentPageRest","org.projectforge.plugins.datatransfer.restPublic.DataTransferPublicPageRest","org.projectforge.plugins.datatransfer.restPublic.DataTransferPublicServicesRest","org.projectforge.plugins.ihk.IHKExporter","org.projectforge.plugins.marketing.rest.AddressCampaignValuePagesRest","org.projectforge.plugins.memo.MemoDO","org.projectforge.plugins.merlin.MerlinTemplateDO","org.projectforge.plugins.merlin.rest.MerlinExecutionPageRest","org.projectforge.plugins.merlin.rest.MerlinVariablePageRest","org.projectforge.plugins.skillmatrix.SkillEntryDO","org.projectforge.rest.AddressImageServicesRest","org.projectforge.rest.AddressServicesRest","org.projectforge.rest.AddressViewPageRest","org.projectforge.rest.AttachmentPageRest","org.projectforge.rest.AttachmentsServicesRest","org.projectforge.rest.HistoryEntryUserCommentModalRest","org.projectforge.rest.TimesheetFavoritesRest","org.projectforge.rest.TimesheetMultiSelectedPageRest","org.projectforge.rest.TimesheetPagesRest","org.projectforge.rest.VacationAccountPageRest","org.projectforge.rest.admin.LogViewerPageRest","org.projectforge.rest.calendar.CalendarFilterServicesRest","org.projectforge.rest.calendar.CalendarSettingsPageRest","org.projectforge.rest.calendar.TeamEventPagesRest","org.projectforge.rest.config.IdObjectDeserializer","org.projectforge.rest.config.JacksonConfiguration","org.projectforge.rest.core.AbstractPagesRest","org.projectforge.rest.dvelop.DvelopClient","org.projectforge.rest.fibu.CurrencyConversionRatePageRest","org.projectforge.rest.fibu.CurrencyPairPagesRest","org.projectforge.rest.fibu.EmployeePagesRest","org.projectforge.rest.fibu.EmployeeValidSinceAttrPageRest","org.projectforge.rest.fibu.kost.Kost2ArtPagesRest","org.projectforge.rest.importer.AbstractImportPageRest","org.projectforge.rest.json.UISelectTypeSerializer","org.projectforge.rest.my2fa.My2FAServicesRest","org.projectforge.rest.my2fa.My2FASetupPageRest","org.projectforge.rest.my2fa.WebAuthnEntryPageRest","org.projectforge.rest.orga.VisitorbookEntryPageRest","org.projectforge.rest.orga.VisitorbookPagesRest","org.projectforge.rest.poll.PollPageRest","org.projectforge.rest.scripting.MyScriptExecutePageRest","org.projectforge.rest.scripting.ScriptExecutePageRest","org.projectforge.rest.scripting.ScriptPagesRest","org.projectforge.rest.task.TaskFavoritesRest","org.projectforge.rest.task.TaskServicesRest","org.projectforge.security.dto.WebAuthnPublicKeyCredentialCreationOptions","org.projectforge.security.webauthn.WebAuthnEntryDao","org.projectforge.ui.UISelect","org.projectforge.web.OrphanedLinkFilter","org.projectforge.web.fibu.EingangsrechnungEditPage","org.projectforge.web.fibu.Kost2ArtEditForm","org.projectforge.web.fibu.Kost2ArtListPage","org.projectforge.web.fibu.RechnungEditPage","org.projectforge.web.gantt.GanttTreeTableNode","org.projectforge.web.wicket.AbstractEditPage","org.projectforge.web.wicket.components.TabPanel"],"usedInFiles":["./projectforge-rest/src/main/kotlin/org/projectforge/rest/json/Deserializers.kt"]},
   {"i18nKey":"imageFile","bundleName":"I18nResources","translation":"Image","translationDE":"Bild","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"import","bundleName":"I18nResources","translation":"Import","translationDE":"Importieren","usedInClasses":["org.projectforge.business.scripting.KotlinScriptExecutor","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.MyMenuPageRest","org.projectforge.rest.importer.AbstractImportPageRest","org.projectforge.web.admin.SetupImportForm","org.projectforge.web.fibu.EingangsrechnungListPage","org.projectforge.web.fibu.ReportObjectivesForm","org.projectforge.web.teamcal.admin.TeamCalEditPage"],"usedInFiles":["./projectforge-wicket/src/main/java/org/projectforge/web/admin/SetupPage.html"]},
   {"i18nKey":"import.confirmMessage","bundleName":"I18nResources","translation":"Would you like to import the selected entries now? This operation cannot be undone.","translationDE":"Sollen nun alle ausgewählten Einträge importiert werden? Diese Aktion kann nicht rückgängig gemacht werden.","usedInClasses":["org.projectforge.rest.importer.AbstractImportPageRest"],"usedInFiles":[]},

9534401d5

WIP: AddressImportUploadPage
9534401d5f5e73f249af9984d17f083ca6e93707
diff --git a/projectforge-application/src/main/resources/i18nKeys.json b/projectforge-application/src/main/resources/i18nKeys.json
index 3d5db6c8c..f13459513 100644
--- a/projectforge-application/src/main/resources/i18nKeys.json
+++ b/projectforge-application/src/main/resources/i18nKeys.json
@@ -240,7 +240,7 @@
   {"i18nKey":"address.book.vCardsImport.title","bundleName":"I18nResources","translation":"Import of vcards (.vcf)","translationDE":"Importieren von vCards (.vcf)","usedInClasses":["org.projectforge.rest.address.importer.AddressImportUploadPageRest"],"usedInFiles":[]},
   {"i18nKey":"address.book.vCardsImport.uploading","bundleName":"I18nResources","translation":"Parsing VCF file...","translationDE":"VCF-Datei wird geparst...","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
   {"i18nKey":"address.book.vCardsImport.wrongFileType","bundleName":"I18nResources","translation":"Wrong file type. Please use \".vcf\" only.","translationDE":"Falsches Dateiformat. Bitte nur \".vcf\"-Format verwenden.","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressServicesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
-  {"i18nKey":"address.business","bundleName":"I18nResources","translation":"business","translationDE":"geschäftlich","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressFieldSelector.tsx"]},
+  {"i18nKey":"address.business","bundleName":"I18nResources","translation":"business","translationDE":"geschäftlich","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest","org.projectforge.rest.address.importer.AddressImportDTO"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressFieldSelector.tsx"]},
   {"i18nKey":"address.cardDAV.addressbook.description","bundleName":"I18nResources","translation":"These are the contacts of ProjectForge, you have marked as favorites.","translationDE":"Das sind Deine Kontakte, die du in ProjectForge als Favoriten markiert hast.","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"address.cardDAV.addressbook.displayName","bundleName":"I18nResources","translation":"{0}''s addressbook","translationDE":"{0}''s Adressbuch","usedInClasses":["org.projectforge.carddav.CardDavUtils"],"usedInFiles":[]},
   {"i18nKey":"address.cardDAV.infopage.description","bundleName":"I18nResources","translation":"You may use the CardDAV service of ProjectForge by creating a CardDAV account in your address book software (such as Apple's address book).","translationDE":"Der CardDAV-Service von ProjectForge kann genutzt werden, indem ein CardDAV-Account in der Clientsoftware wie z. B. im Apple Adressbuch eingerichtet wird.","usedInClasses":["org.projectforge.rest.CardDAVInfoPageRest"],"usedInFiles":[]},
@@ -264,7 +264,7 @@
   {"i18nKey":"address.directCall.noPhoneDefined","bundleName":"I18nResources","translation":"No phone defined (please choose or define under My account).","translationDE":"Es ist kein Telefon ausgewählt (bitte auswählen bzw. unter Mein Zugang festlegen).","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"address.directCall.number.tooltip","bundleName":"I18nResources","translation":"Supports the input of first-, last names and organizations.","translationDE":"Anstelle einer Rufnummer können auch Vor- und Nachnamen sowie Firmennamen eingegeben werden oder aus der Adressliste eine Nummer angeklickt werden.","usedInClasses":["org.projectforge.web.address.PhoneCallForm"],"usedInFiles":[]},
   {"i18nKey":"address.division","bundleName":"I18nResources","translation":"Division","translationDE":"Bereich","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":[]},
-  {"i18nKey":"address.emails","bundleName":"I18nResources","translation":"e-mails","translationDE":"E-Mails","usedInClasses":["org.projectforge.rest.GroupPagesRest","org.projectforge.web.user.GroupEditForm"],"usedInFiles":[]},
+  {"i18nKey":"address.emails","bundleName":"I18nResources","translation":"e-mails","translationDE":"E-Mails","usedInClasses":["org.projectforge.rest.GroupPagesRest","org.projectforge.rest.address.importer.AddressImportUploadPageRest","org.projectforge.web.user.GroupEditForm"],"usedInFiles":[]},
   {"i18nKey":"address.error.phone.invalidFormat","bundleName":"I18nResources","translation":"Valid characters for phone numbers are '+' as first char, '-', '/' and spaces. The leading country code is mandatory, e.g.: +49 561 316793-0","translationDE":"Es sind nur Zahlen sowie '+' am Anfang, '-', '/' und Leerzeichen erlaubt. Die führende Ländervorwahl ist zwingend. Beispiel: +49 561 316793-0","usedInClasses":["org.projectforge.web.common.PhoneNumberValidator"],"usedInFiles":[]},
   {"i18nKey":"address.favorites.info","bundleName":"I18nResources","translation":"You may synchronize your favorite addresses via CardDAV with your address book app or export them as Excel etc.","translationDE":"Favoriten können über CardDAV mit einem Adressbuch synchronisiert werden oder als Excel exportiert werden.","usedInClasses":["org.projectforge.rest.AddressViewPageRest"],"usedInFiles":[]},
   {"i18nKey":"address.filter.doublets","bundleName":"I18nResources","translation":"doublets","translationDE":"Dupletten","usedInClasses":["org.projectforge.plugins.marketing.rest.AddressCampaignValuePagesRest","org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
@@ -282,12 +282,12 @@
   {"i18nKey":"address.form.mister","bundleName":"I18nResources","translation":"Mister","translationDE":"Herr","usedInClasses":["org.projectforge.business.address.FormOfAddress"],"usedInFiles":[]},
   {"i18nKey":"address.form.unknown","bundleName":"I18nResources","translation":"unknown","translationDE":"unbekannt","usedInClasses":["org.projectforge.business.address.FormOfAddress"],"usedInFiles":[]},
   {"i18nKey":"address.formerly","bundleName":"I18nResources","translation":"formerly","translationDE":"geb.","usedInClasses":["org.projectforge.business.address.AddressDO"],"usedInFiles":[]},
-  {"i18nKey":"address.heading.businessAddress","bundleName":"I18nResources","translation":"Business address","translationDE":"Geschäftsadresse","usedInClasses":["org.projectforge.rest.AddressMultiSelectedPageRest","org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
+  {"i18nKey":"address.heading.businessAddress","bundleName":"I18nResources","translation":"Business address","translationDE":"Geschäftsadresse","usedInClasses":["org.projectforge.rest.AddressMultiSelectedPageRest","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.address.importer.AddressImportUploadPageRest"],"usedInFiles":[]},
   {"i18nKey":"address.heading.businessContact","bundleName":"I18nResources","translation":"Business contact","translationDE":"Geschäftlicher Kontakt","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"address.heading.personalData","bundleName":"I18nResources","translation":"Personal data","translationDE":"Persönliche Daten","usedInClasses":[],"usedInFiles":[]},
-  {"i18nKey":"address.heading.postalAddress","bundleName":"I18nResources","translation":"Postal address","translationDE":"Briefanschrift","usedInClasses":["org.projectforge.rest.AddressMultiSelectedPageRest","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":[]},
+  {"i18nKey":"address.heading.postalAddress","bundleName":"I18nResources","translation":"Postal address","translationDE":"Briefanschrift","usedInClasses":["org.projectforge.rest.AddressMultiSelectedPageRest","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest","org.projectforge.rest.address.importer.AddressImportUploadPageRest"],"usedInFiles":[]},
   {"i18nKey":"address.heading.postalAddress2","bundleName":"I18nResources","translation":"Postal address 2","translationDE":"Briefanschrift 2","usedInClasses":[],"usedInFiles":[]},
-  {"i18nKey":"address.heading.privateAddress","bundleName":"I18nResources","translation":"Private address","translationDE":"Privatadresse","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":[]},
+  {"i18nKey":"address.heading.privateAddress","bundleName":"I18nResources","translation":"Private address","translationDE":"Privatadresse","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest","org.projectforge.rest.address.importer.AddressImportUploadPageRest"],"usedInFiles":[]},
   {"i18nKey":"address.heading.privateAddress2","bundleName":"I18nResources","translation":"Private address 2","translationDE":"Privatadresse 2","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"address.heading.privateContact","bundleName":"I18nResources","translation":"Private contact","translationDE":"Privater Kontakt","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"address.image","bundleName":"I18nResources","translation":"Image","translationDE":"Bild","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
@@ -330,16 +330,21 @@
   {"i18nKey":"address.phoneCall.result.callingError","bundleName":"I18nResources","translation":"Calling error.","translationDE":"Fehler beim Wählen.","usedInClasses":["org.projectforge.web.address.PhoneCallPage"],"usedInFiles":[]},
   {"i18nKey":"address.phoneCall.result.successful","bundleName":"I18nResources","translation":"Call successful.","translationDE":"Erfolgreich gewählt.","usedInClasses":["org.projectforge.web.address.PhoneCallPage"],"usedInFiles":[]},
   {"i18nKey":"address.phoneCall.title","bundleName":"I18nResources","translation":"Direct calling telephone system","translationDE":"Direktwahl Telefonanlage","usedInClasses":["org.projectforge.web.address.PhoneCallPage"],"usedInFiles":[]},
-  {"i18nKey":"address.phoneNumbers","bundleName":"I18nResources","translation":"Phone numbers","translationDE":"Telefonnummern","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":[]},
+  {"i18nKey":"address.phoneNumbers","bundleName":"I18nResources","translation":"Phone numbers","translationDE":"Telefonnummern","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest","org.projectforge.rest.address.importer.AddressImportUploadPageRest"],"usedInFiles":[]},
   {"i18nKey":"address.phoneType.business","bundleName":"I18nResources","translation":"Business phone","translationDE":"Telefon geschäftlich","usedInClasses":["org.projectforge.business.address.PhoneType","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":[]},
+  {"i18nKey":"address.phoneType.business.short","bundleName":"I18nResources","translation":"business","translationDE":"geschäftlich","usedInClasses":["org.projectforge.rest.address.importer.AddressImportDTO"],"usedInFiles":[]},
   {"i18nKey":"address.phoneType.fax","bundleName":"I18nResources","translation":"Fax","translationDE":"Fax","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.business.address.PhoneType","org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
+  {"i18nKey":"address.phoneType.fax.short","bundleName":"I18nResources","translation":"Fax","translationDE":"Fax","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"address.phoneType.mobile","bundleName":"I18nResources","translation":"Cellular phone","translationDE":"Telefon mobil","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.business.address.PhoneType","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest","org.projectforge.web.address.PhoneCallPage"],"usedInFiles":[]},
+  {"i18nKey":"address.phoneType.mobile.short","bundleName":"I18nResources","translation":"cellular","translationDE":"mobil","usedInClasses":["org.projectforge.rest.address.importer.AddressImportDTO"],"usedInFiles":[]},
   {"i18nKey":"address.phoneType.private","bundleName":"I18nResources","translation":"Private phone","translationDE":"Telefon privat","usedInClasses":["org.projectforge.business.address.AddressExport","org.projectforge.business.address.PhoneType","org.projectforge.rest.AddressViewPageRest","org.projectforge.web.address.PhoneCallPage"],"usedInFiles":[]},
+  {"i18nKey":"address.phoneType.private.short","bundleName":"I18nResources","translation":"private","translationDE":"privat","usedInClasses":["org.projectforge.rest.address.importer.AddressImportDTO"],"usedInFiles":[]},
   {"i18nKey":"address.phoneType.privateMobile","bundleName":"I18nResources","translation":"Private cellular","translationDE":"Privat mobil","usedInClasses":["org.projectforge.business.address.AddressExport","org.projectforge.business.address.PhoneType"],"usedInFiles":[]},
+  {"i18nKey":"address.phoneType.privateMobile.short","bundleName":"I18nResources","translation":"private cellular","translationDE":"privat mobil","usedInClasses":["org.projectforge.rest.address.importer.AddressImportDTO"],"usedInFiles":[]},
   {"i18nKey":"address.positionText","bundleName":"I18nResources","translation":"Position","translationDE":"Position","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.business.fibu.EmployeeDO","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":[]},
   {"i18nKey":"address.postal","bundleName":"I18nResources","translation":"postal","translationDE":"postalisch","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.rest.AddressPagesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressFieldSelector.tsx"]},
   {"i18nKey":"address.postalAddressText","bundleName":"I18nResources","translation":"Postal address","translationDE":"Postalische Adresse","usedInClasses":["org.projectforge.business.address.AddressExport"],"usedInFiles":[]},
-  {"i18nKey":"address.private","bundleName":"I18nResources","translation":"private","translationDE":"privat","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressFieldSelector.tsx"]},
+  {"i18nKey":"address.private","bundleName":"I18nResources","translation":"private","translationDE":"privat","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest","org.projectforge.rest.address.importer.AddressImportDTO"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressFieldSelector.tsx"]},

4650706f7

WIP: vcards import
4650706f74d58fc1fd76d1d1995e49e686183ab8
diff --git a/projectforge-application/src/main/resources/i18nKeys.json b/projectforge-application/src/main/resources/i18nKeys.json
index 14df59e8d..3d5db6c8c 100644
--- a/projectforge-application/src/main/resources/i18nKeys.json
+++ b/projectforge-application/src/main/resources/i18nKeys.json
@@ -274,7 +274,7 @@
   {"i18nKey":"address.filter.myEntries.tooltip","bundleName":"I18nResources","translation":"My entries that I have edited at some point.","translationDE":"Meine Einträge, die ich irgendwann mal bearbeitet habe.","usedInClasses":["org.projectforge.plugins.marketing.rest.AddressCampaignValuePagesRest","org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
   {"i18nKey":"address.filter.myFavorites","bundleName":"I18nResources","translation":"my favorites","translationDE":"meine Favoriten","usedInClasses":["org.projectforge.plugins.marketing.rest.AddressCampaignValuePagesRest","org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
   {"i18nKey":"address.fingerprint","bundleName":"I18nResources","translation":"Finger print","translationDE":"Fingerprint","usedInClasses":["org.projectforge.business.address.AddressDO"],"usedInFiles":[]},
-  {"i18nKey":"address.form","bundleName":"I18nResources","translation":"Form","translationDE":"Anrede","usedInClasses":["org.projectforge.business.address.AddressDO"],"usedInFiles":[]},
+  {"i18nKey":"address.form","bundleName":"I18nResources","translation":"Form","translationDE":"Anrede","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
   {"i18nKey":"address.form.company","bundleName":"I18nResources","translation":"Company","translationDE":"Firma","usedInClasses":["org.projectforge.business.address.FormOfAddress"],"usedInFiles":[]},
   {"i18nKey":"address.form.error.toFewFields","bundleName":"I18nResources","translation":"Name, first name, or organization is required.","translationDE":"Es muss mindestens der Name, Vorname oder die Firma angegeben sein.","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.rest.task.TaskPagesRest"],"usedInFiles":[]},
   {"i18nKey":"address.form.misc","bundleName":"I18nResources","translation":"Misc","translationDE":"Sonstiges","usedInClasses":["org.projectforge.business.address.FormOfAddress"],"usedInFiles":[]},
@@ -685,15 +685,16 @@
   {"i18nKey":"common.import.action.commit","bundleName":"I18nResources","translation":"Commit","translationDE":"Übernehmen","usedInClasses":["org.projectforge.web.core.importstorage.AbstractImportStoragePanel"],"usedInFiles":[]},
   {"i18nKey":"common.import.action.commit.error.notReconciled","bundleName":"I18nResources","translation":"The entries to commit aren't compared with database entries yet, please reconcile the entries first.","translationDE":"Die Datensätze, die übernommen werden sollen, sind noch nicht abgeglichen, bitte erst abgleichen.","usedInClasses":["org.projectforge.business.fibu.datev.DatevImportService","org.projectforge.business.fibu.datev.EmployeeSalaryImportService"],"usedInFiles":[]},
   {"i18nKey":"common.import.action.commit.tooltip","bundleName":"I18nResources","translation":"All selected database will be written to the database.","translationDE":"Hiermit werden alle selektierten Datensätze in die Datenbank übernommen.","usedInClasses":["org.projectforge.web.core.importstorage.AbstractImportStoragePanel"],"usedInFiles":[]},
-  {"i18nKey":"common.import.action.deselectAll","bundleName":"I18nResources","translation":"Deselect all","translationDE":"Alle abwählen","usedInClasses":["org.projectforge.web.core.importstorage.AbstractImportStoragePanel"],"usedInFiles":[]},
+  {"i18nKey":"common.import.action.deselectAll","bundleName":"I18nResources","translation":"Deselect all","translationDE":"Alle abwählen","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.web.core.importstorage.AbstractImportStoragePanel"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
   {"i18nKey":"common.import.action.downloadValidatedExcel","bundleName":"I18nResources","translation":"validated Excel file","translationDE":"validatierte Exceldatei","usedInClasses":["org.projectforge.web.core.importstorage.AbstractImportStoragePanel"],"usedInFiles":[]},
   {"i18nKey":"common.import.action.reconcile","bundleName":"I18nResources","translation":"Reconcile","translationDE":"Abgleichen","usedInClasses":["org.projectforge.rest.importer.AbstractImportPageRest","org.projectforge.web.core.importstorage.AbstractImportStoragePanel"],"usedInFiles":[]},
   {"i18nKey":"common.import.action.select100","bundleName":"I18nResources","translation":"Select 100 entries","translationDE":"Die ersten 100 Einträge auswählen","usedInClasses":["org.projectforge.web.core.importstorage.AbstractImportStoragePanel"],"usedInFiles":[]},
   {"i18nKey":"common.import.action.select500","bundleName":"I18nResources","translation":"Select 500 entries","translationDE":"Die ersten 500 Einträge auswählen","usedInClasses":["org.projectforge.web.core.importstorage.AbstractImportStoragePanel"],"usedInFiles":[]},
-  {"i18nKey":"common.import.action.selectAll","bundleName":"I18nResources","translation":"Select all","translationDE":"Alle auswählen","usedInClasses":["org.projectforge.web.core.importstorage.AbstractImportStoragePanel"],"usedInFiles":[]},
+  {"i18nKey":"common.import.action.selectAll","bundleName":"I18nResources","translation":"Select all","translationDE":"Alle auswählen","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.web.core.importstorage.AbstractImportStoragePanel"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
   {"i18nKey":"common.import.action.showErrorLog","bundleName":"I18nResources","translation":"Show error log","translationDE":"Fehlerprotokoll anzeigen","usedInClasses":["org.projectforge.web.core.importstorage.AbstractImportStoragePanel"],"usedInFiles":[]},
   {"i18nKey":"common.import.action.showErrorSummary","bundleName":"I18nResources","translation":"Show error summary","translationDE":"Fehlerzusammenfassung anzeigen","usedInClasses":["org.projectforge.web.core.importstorage.AbstractImportStoragePanel"],"usedInFiles":[]},
   {"i18nKey":"common.import.action.showInfoLog","bundleName":"I18nResources","translation":"Show info log","translationDE":"Infoprotokoll anzeigen","usedInClasses":["org.projectforge.web.core.importstorage.AbstractImportStoragePanel"],"usedInFiles":[]},
+  {"i18nKey":"common.import.additionalChanges","bundleName":"I18nResources","translation":"Additional changes","translationDE":"Zusätzliche Änderungen","usedInClasses":["org.projectforge.rest.address.importer.AddressImportUploadPageRest"],"usedInFiles":[]},
   {"i18nKey":"common.import.clearStorage","bundleName":"I18nResources","translation":"Clear","translationDE":"Leeren","usedInClasses":["org.projectforge.web.core.importstorage.AbstractImportForm"],"usedInFiles":[]},
   {"i18nKey":"common.import.commitQuestionDialog.heading","bundleName":"I18nResources","translation":"Commit all selected entries?","translationDE":"Alle ausgewählten Einträge übernehmen?","usedInClasses":["org.projectforge.web.core.importstorage.AbstractImportStoragePanel"],"usedInFiles":[]},
   {"i18nKey":"common.import.commitQuestionDialog.question","bundleName":"I18nResources","translation":"Do you really want to commit all selected entries? No undo-functionality is provided.","translationDE":"Sollen wirklich alle ausgewählten Einträge übernommen werden? Diese Funktion kann nicht wieder rückgängig gemacht werden.","usedInClasses":["org.projectforge.web.core.importstorage.AbstractImportStoragePanel"],"usedInFiles":[]},
@@ -1394,7 +1395,7 @@
   {"i18nKey":"gender.notApplicable","bundleName":"I18nResources","translation":"not applicable","translationDE":"nicht zutreffend","usedInClasses":["org.projectforge.business.fibu.IsoGender"],"usedInFiles":[]},
   {"i18nKey":"gender.notKnown","bundleName":"I18nResources","translation":"not known","translationDE":"unbekannt","usedInClasses":["org.projectforge.business.fibu.IsoGender"],"usedInFiles":[]},
   {"i18nKey":"gender.unknown","bundleName":"I18nResources","translation":"unknown","translationDE":"unbekannt","usedInClasses":["org.projectforge.framework.persistence.user.entities.Gender"],"usedInFiles":[]},
-  {"i18nKey":"group","bundleName":"I18nResources","translation":"Group","translationDE":"Gruppe","usedInClasses":["org.projectforge.framework.access.AccessDao","org.projectforge.framework.access.AccessType","org.projectforge.framework.access.GroupTaskAccessDO","org.projectforge.framework.persistence.DaoConst","org.projectforge.menu.builder.MenuItemDefId","org.projectforge.plugins.todo.ToDoDO","org.projectforge.plugins.todo.ToDoEditForm","org.projectforge.plugins.todo.ToDoListPage","org.projectforge.plugins.todo.rest.ToDoPagesRest","org.projectforge.registry.Registry","org.projectforge.rest.task.TaskWizardPageRest","org.projectforge.ui.AutoCompletion","org.projectforge.web.access.AccessEditForm","org.projectforge.web.access.AccessListForm","org.projectforge.web.access.AccessListPage","org.projectforge.web.admin.TaskWizardForm","org.projectforge.web.user.GroupEditPage","org.projectforge.web.user.GroupListPage"],"usedInFiles":[]},
+  {"i18nKey":"group","bundleName":"I18nResources","translation":"Group","translationDE":"Gruppe","usedInClasses":["org.projectforge.business.address.AddressTextParser","org.projectforge.framework.access.AccessDao","org.projectforge.framework.access.AccessType","org.projectforge.framework.access.GroupTaskAccessDO","org.projectforge.framework.persistence.DaoConst","org.projectforge.menu.builder.MenuItemDefId","org.projectforge.plugins.todo.ToDoDO","org.projectforge.plugins.todo.ToDoEditForm","org.projectforge.plugins.todo.ToDoListPage","org.projectforge.plugins.todo.rest.ToDoPagesRest","org.projectforge.registry.Registry","org.projectforge.rest.task.TaskWizardPageRest","org.projectforge.ui.AutoCompletion","org.projectforge.web.access.AccessEditForm","org.projectforge.web.access.AccessListForm","org.projectforge.web.access.AccessListPage","org.projectforge.web.admin.TaskWizardForm","org.projectforge.web.user.GroupEditPage","org.projectforge.web.user.GroupListPage"],"usedInFiles":[]},
   {"i18nKey":"group.assignedUsers","bundleName":"I18nResources","translation":"Assigned users","translationDE":"Assoziierte Benutzer:in","usedInClasses":["org.projectforge.framework.persistence.user.entities.GroupDO","org.projectforge.rest.GroupPagesRest","org.projectforge.web.user.GroupEditForm","org.projectforge.web.user.GroupListPage"],"usedInFiles":[]},
   {"i18nKey":"group.error.groupnameAlreadyExists","bundleName":"I18nResources","translation":"Group name already exists.","translationDE":"Gruppenname ist bereits vergeben.","usedInClasses":["org.projectforge.rest.GroupPagesRest","org.projectforge.web.user.GroupEditForm"],"usedInFiles":[]},
   {"i18nKey":"group.groups","bundleName":"I18nResources","translation":"Groups","translationDE":"Gruppen","usedInClasses":["org.projectforge.rest.VacationExportPageRest"],"usedInFiles":[]},
@@ -1472,6 +1473,7 @@
   {"i18nKey":"import.entry.error","bundleName":"I18nResources","translation":"Error","translationDE":"Fehler","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"import.entry.status.deleted","bundleName":"I18nResources","translation":"Deleted","translationDE":"Gelöscht","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"import.entry.status.faulty","bundleName":"I18nResources","translation":"Faulty","translationDE":"Fehlerhaft","usedInClasses":[],"usedInFiles":[]},
+  {"i18nKey":"import.entry.status.imported","bundleName":"I18nResources","translation":"Imported","translationDE":"Importiert","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"import.entry.status.modified","bundleName":"I18nResources","translation":"Modified","translationDE":"Modifiziert","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"import.entry.status.new","bundleName":"I18nResources","translation":"New","translationDE":"Neu","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"import.entry.status.unknown","bundleName":"I18nResources","translation":"Unknown","translationDE":"Unbekannt","usedInClasses":[],"usedInFiles":[]},
@@ -3167,8 +3169,6 @@
   {"i18nKey":"address.book.vCardsImport.newAddress","bundleName":null,"translation":null,"translationDE":null,"usedInClasses":[],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/VCardImportDialog.tsx"]},
   {"i18nKey":"address.book.vCardsImport.noData","bundleName":null,"translation":null,"translationDE":null,"usedInClasses":[],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/VCardImportDialog.tsx"]},
   {"i18nKey":"address.import.title","bundleName":null,"translation":null,"translationDE":null,"usedInClasses":["org.projectforge.rest.address.importer.AddressImportStorage"],"usedInFiles":[]},
-  {"i18nKey":"address.parseText.selectAll","bundleName":null,"translation":null,"translationDE":null,"usedInClasses":[],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
-  {"i18nKey":"address.parseText.unselectAll","bundleName":null,"translation":null,"translationDE":null,"usedInClasses":[],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
   {"i18nKey":"administration.configuration.title.list.select","bundleName":null,"translation":null,"translationDE":null,"usedInClasses":["org.projectforge.web.admin.ConfigurationEditPage","org.projectforge.web.admin.ConfigurationListPage"],"usedInFiles":[]},
   {"i18nKey":"exportKWProjects","bundleName":null,"translation":null,"translationDE":null,"usedInClasses":["org.projectforge.business.humanresources.HRPlanningExport"],"usedInFiles":[]},
   {"i18nKey":"exportKWUsers","bundleName":null,"translation":null,"translationDE":null,"usedInClasses":["org.projectforge.business.humanresources.HRPlanningExport"],"usedInFiles":[]},

bf33c20a9

DevelopmentMainForRelease.main (i18n stuff fixed)
bf33c20a958161d121934a55a2072d8310955837
diff --git a/projectforge-application/src/main/resources/i18nKeys.json b/projectforge-application/src/main/resources/i18nKeys.json
index c139a75e3..14df59e8d 100644
--- a/projectforge-application/src/main/resources/i18nKeys.json
+++ b/projectforge-application/src/main/resources/i18nKeys.json
@@ -204,7 +204,7 @@
   {"i18nKey":"access.violation.userNotMemberOf","bundleName":"I18nResources","translation":"Operation only allowed for users of group(s) ''{0}'' (perhaps other groups are also allowed).","translationDE":"Operation ist nur für Benutzer:innen der Gruppe(n) ''{0}'' erlaubt (ggf. auch andere Gruppen möglich).","usedInClasses":["org.projectforge.framework.access.AccessCheckerImpl"],"usedInFiles":[]},
   {"i18nKey":"access.write","bundleName":"I18nResources","translation":"Write access","translationDE":"Schreibzugriff","usedInClasses":["org.projectforge.web.gantt.GanttChartEditForm"],"usedInFiles":[]},
   {"i18nKey":"add","bundleName":"I18nResources","translation":"Add","translationDE":"Hinzufügen","usedInClasses":["org.projectforge.plugins.merlin.rest.MerlinPagesRest","org.projectforge.rest.MenuCustomizerRest","org.projectforge.rest.core.AbstractPagesRest","org.projectforge.ui.UIButton","org.projectforge.web.fibu.AbstractRechnungEditForm","org.projectforge.web.fibu.AuftragEditForm","org.projectforge.web.fibu.RechnungCostEditTablePanel","org.projectforge.web.humanresources.HRPlanningEditForm"],"usedInFiles":[]},
-  {"i18nKey":"address","bundleName":"I18nResources","translation":"Address","translationDE":"Adresse","usedInClasses":["org.projectforge.business.address.AddressImageDao","org.projectforge.business.address.PersonalAddressDao","org.projectforge.framework.persistence.DaoConst","org.projectforge.menu.builder.MenuItemDefId","org.projectforge.plugins.marketing.rest.AddressCampaignValuePagesRest","org.projectforge.plugins.todo.ToDoPlugin","org.projectforge.registry.Registry","org.projectforge.rest.SendTextMessagePageRest","org.projectforge.rest.calendar.FullCalendarEvent"],"usedInFiles":[]},
+  {"i18nKey":"address","bundleName":"I18nResources","translation":"Address","translationDE":"Adresse","usedInClasses":["org.projectforge.business.address.AddressImageDao","org.projectforge.business.address.PersonalAddressDao","org.projectforge.framework.persistence.DaoConst","org.projectforge.menu.builder.MenuItemDefId","org.projectforge.plugins.marketing.rest.AddressCampaignValuePagesRest","org.projectforge.registry.Registry","org.projectforge.rest.SendTextMessagePageRest","org.projectforge.rest.calendar.FullCalendarEvent"],"usedInFiles":[]},
   {"i18nKey":"address.accessException.userHasNoRightForAddressbook","bundleName":"I18nResources","translation":"User has no right for the current address and its addressbook","translationDE":"Benutzer:in hat keine Berechtigung für die ausgewählte Adresse und dessen Addressbuch","usedInClasses":["org.projectforge.business.address.PersonalAddressDao"],"usedInFiles":[]},
   {"i18nKey":"address.accessException.userIsNotOwnerOfPersonalAddress","bundleName":"I18nResources","translation":"User is not owner of personal address book.","translationDE":"Benutzer:in ist nicht Besitzer:in der persönlichen Adresse.","usedInClasses":["org.projectforge.business.address.PersonalAddressDao"],"usedInFiles":[]},
   {"i18nKey":"address.addressStatus","bundleName":"I18nResources","translation":"Address status","translationDE":"Adressstatus","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.plugins.marketing.rest.AddressCampaignValuePagesRest","org.projectforge.rest.AddressMultiSelectedPageRest","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":[]},
@@ -217,8 +217,8 @@
   {"i18nKey":"address.addresses","bundleName":"I18nResources","translation":"Addresses","translationDE":"Adressen","usedInClasses":["org.projectforge.business.address.AddressExport"],"usedInFiles":[]},
   {"i18nKey":"address.age","bundleName":"I18nResources","translation":"years","translationDE":"Jahre","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"address.age.short","bundleName":"I18nResources","translation":"y","translationDE":"J","usedInClasses":["org.projectforge.rest.calendar.BirthdaysProvider","org.projectforge.web.address.BirthdayEventsProvider"],"usedInFiles":[]},
-  {"i18nKey":"address.birthName","bundleName":"I18nResources","translation":"Birth name","translationDE":"Geburtsname","usedInClasses":["org.projectforge.business.address.AddressDO"],"usedInFiles":[]},
-  {"i18nKey":"address.birthday","bundleName":"I18nResources","translation":"Birthday","translationDE":"Geburtstag","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":[]},
+  {"i18nKey":"address.birthName","bundleName":"I18nResources","translation":"Birth name","translationDE":"Geburtsname","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
+  {"i18nKey":"address.birthday","bundleName":"I18nResources","translation":"Birthday","translationDE":"Geburtstag","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":[]},
   {"i18nKey":"address.book.export","bundleName":"I18nResources","translation":"Excel-Export","translationDE":"Excel-Export","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"address.book.export.appleScript4Notes","bundleName":"I18nResources","translation":"Apple-Script","translationDE":"Apple-Script","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
   {"i18nKey":"address.book.export.appleScript4Notes.tooltip","bundleName":"I18nResources","translation":"For removing notes (with multiple entries) of the from ProjectForge exported addresses (s. Handbuch). Afterwards you should import the addresses again for getting the correct notes from ProjectForge.","translationDE":"Zum Löschen von Notizen (mit Mehrfacheinträgen) aus den aus ProjectForge exportierten Adressen (s. Handbuch). Anschließend sollten die Adressen erneut importiert werden, um die bereinigten Notizen aus ProjectForge zu importieren.","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
@@ -228,11 +228,19 @@
   {"i18nKey":"address.book.vCardExport.tooltip.content","bundleName":"I18nResources","translation":"Export vCards (addresses) of marked addresses for importing into external address applications (such as Apple address book). Please do not forget to set encoding to utf-8 in your address applications.","translationDE":"VCards markierter Adressen können für externe Adressprogramme (z. B. Apple Adressbuch) exportiert werden (utf-8 sollte im Adressprogramm eingestellt sein).","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
   {"i18nKey":"address.book.vCardExport.tooltip.title","bundleName":"I18nResources","translation":"Personal address book","translationDE":"Persönliches Adressbuch","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
   {"i18nKey":"address.book.vCardSingleExport","bundleName":"I18nResources","translation":"Export vCard","translationDE":"Export vCard","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":[]},
+  {"i18nKey":"address.book.vCardsImport.clickToEdit","bundleName":"I18nResources","translation":"Click on a row to edit the address and compare fields.","translationDE":"Klicken Sie auf eine Zeile, um die Adresse zu bearbeiten und Felder zu vergleichen.","usedInClasses":["org.projectforge.rest.address.importer.AddressImportUploadPageRest"],"usedInFiles":[]},
+  {"i18nKey":"address.book.vCardsImport.dataLoaded","bundleName":"I18nResources","translation":"VCF data has been loaded. Select the fields you want to apply.","translationDE":"VCF-Daten wurden geladen. Wählen Sie die Felder aus, die Sie übernehmen möchten.","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
   {"i18nKey":"address.book.vCardsImport.description","bundleName":"I18nResources","translation":"Here, vCards (.vcf file format) can be imported into the address book. Existing addresses are not duplicated, but simply supplemented (e.g., with phone numbers or email addresses).","translationDE":"Hier können vCards (Dateiformat .vcf) in das Adressbuch importiert werden. Bereits vorhandene Adressen werden nicht dupliziert, sondern nur ergänzt (z. B. um Telefonnummern oder E-Mail-Adressen).","usedInClasses":["org.projectforge.rest.address.importer.AddressImportUploadPageRest"],"usedInFiles":[]},
-  {"i18nKey":"address.book.vCardsImport.menu","bundleName":"I18nResources","translation":"Import vcards","translationDE":"Importieren (vcf)","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
+  {"i18nKey":"address.book.vCardsImport.dropHint","bundleName":"I18nResources","translation":"Drop VCF file here","translationDE":"VCF-Datei hier ablegen","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
+  {"i18nKey":"address.book.vCardsImport.dropInfo","bundleName":"I18nResources","translation":"Matching address will be selected automatically","translationDE":"Passende Adresse wird automatisch ausgewählt","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
+  {"i18nKey":"address.book.vCardsImport.dropLabel","bundleName":"I18nResources","translation":"Or drop VCF file","translationDE":"Oder VCF-Datei ablegen","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
+  {"i18nKey":"address.book.vCardsImport.error.noAddresses","bundleName":"I18nResources","translation":"No addresses found in VCF file","translationDE":"Keine Adressen in VCF-Datei gefunden","usedInClasses":["org.projectforge.rest.AddressServicesRest"],"usedInFiles":[]},
+  {"i18nKey":"address.book.vCardsImport.error.noMatch","bundleName":"I18nResources","translation":"No matching address found in VCF file (name/first name do not match)","translationDE":"Keine passende Adresse in der VCF-Datei gefunden (Name/Vorname stimmen nicht überein)","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressServicesRest"],"usedInFiles":[]},
+  {"i18nKey":"address.book.vCardsImport.error.parsing","bundleName":"I18nResources","translation":"Error parsing VCF file","translationDE":"Fehler beim Parsen der VCF-Datei","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressServicesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
   {"i18nKey":"address.book.vCardsImport.title","bundleName":"I18nResources","translation":"Import of vcards (.vcf)","translationDE":"Importieren von vCards (.vcf)","usedInClasses":["org.projectforge.rest.address.importer.AddressImportUploadPageRest"],"usedInFiles":[]},
-  {"i18nKey":"address.book.vCardsImport.wrongFileType","bundleName":"I18nResources","translation":"Wrong file type. Please use \".vcf\" only.","translationDE":"Falsches Dateiformat. Bitte nur \".vcf\"-Format verwenden.","usedInClasses":["org.projectforge.rest.address.AddressImportServicesRest"],"usedInFiles":[]},
-  {"i18nKey":"address.business","bundleName":"I18nResources","translation":"business","translationDE":"geschäftlich","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressTextParser.jsx"]},
+  {"i18nKey":"address.book.vCardsImport.uploading","bundleName":"I18nResources","translation":"Parsing VCF file...","translationDE":"VCF-Datei wird geparst...","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
+  {"i18nKey":"address.book.vCardsImport.wrongFileType","bundleName":"I18nResources","translation":"Wrong file type. Please use \".vcf\" only.","translationDE":"Falsches Dateiformat. Bitte nur \".vcf\"-Format verwenden.","usedInClasses":["org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressServicesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressImportReconciler.tsx"]},
+  {"i18nKey":"address.business","bundleName":"I18nResources","translation":"business","translationDE":"geschäftlich","usedInClasses":["org.projectforge.business.address.AddressDO","org.projectforge.rest.AddressPagesRest","org.projectforge.rest.AddressViewPageRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressFieldSelector.tsx"]},
   {"i18nKey":"address.cardDAV.addressbook.description","bundleName":"I18nResources","translation":"These are the contacts of ProjectForge, you have marked as favorites.","translationDE":"Das sind Deine Kontakte, die du in ProjectForge als Favoriten markiert hast.","usedInClasses":[],"usedInFiles":[]},
   {"i18nKey":"address.cardDAV.addressbook.displayName","bundleName":"I18nResources","translation":"{0}''s addressbook","translationDE":"{0}''s Adressbuch","usedInClasses":["org.projectforge.carddav.CardDavUtils"],"usedInFiles":[]},
   {"i18nKey":"address.cardDAV.infopage.description","bundleName":"I18nResources","translation":"You may use the CardDAV service of ProjectForge by creating a CardDAV account in your address book software (such as Apple's address book).","translationDE":"Der CardDAV-Service von ProjectForge kann genutzt werden, indem ein CardDAV-Account in der Clientsoftware wie z. B. im Apple Adressbuch eingerichtet wird.","usedInClasses":["org.projectforge.rest.CardDAVInfoPageRest"],"usedInFiles":[]},
@@ -294,18 +302,24 @@
   {"i18nKey":"address.myCurrentPhoneId.tooltip.content","bundleName":"I18nResources","translation":"Define your phone ids (internal phone number of the phone system). After you can make a direct phone call on the selected phone by simply clicking on the desired phone number below.","translationDE":"Unter Mein Zugang können persönliche Zuordnungen zu firmen-internen Telefonen vorgenommen werden (interne Rufnummer). Wird auf eine Telefonnummer in der Adressliste geklickt, so kann eine Direktwahl für das hier angegebene Telefon initiiert werden.","usedInClasses":["org.projectforge.web.address.PhoneCallForm"],"usedInFiles":[]},
   {"i18nKey":"address.myCurrentPhoneId.tooltip.title","bundleName":"I18nResources","translation":"Direct call","translationDE":"Direktwahl","usedInClasses":["org.projectforge.web.address.PhoneCallForm"],"usedInFiles":[]},
   {"i18nKey":"address.parseText.addressBlock","bundleName":"I18nResources","translation":"Address Block","translationDE":"Adressblock","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
-  {"i18nKey":"address.parseText.addressType.business","bundleName":"I18nResources","translation":"Business Address","translationDE":"Geschäftsadresse","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
-  {"i18nKey":"address.parseText.addressType.postal","bundleName":"I18nResources","translation":"Postal/Mailing Address","translationDE":"Postadresse","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
-  {"i18nKey":"address.parseText.addressType.private","bundleName":"I18nResources","translation":"Private Address","translationDE":"Privatadresse","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
+  {"i18nKey":"address.parseText.addressType.business","bundleName":"I18nResources","translation":"Business Address","translationDE":"Geschäftsadresse","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressFieldSelector.tsx"]},
+  {"i18nKey":"address.parseText.addressType.postal","bundleName":"I18nResources","translation":"Postal/Mailing Address","translationDE":"Postadresse","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressFieldSelector.tsx"]},
+  {"i18nKey":"address.parseText.addressType.private","bundleName":"I18nResources","translation":"Private Address","translationDE":"Privatadresse","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":["./projectforge-webapp/src/components/base/dynamicLayout/components/customized/components/AddressFieldSelector.tsx"]},
   {"i18nKey":"address.parseText.applied","bundleName":"I18nResources","translation":"Fields successfully applied","translationDE":"Felder erfolgreich übernommen","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},
-  {"i18nKey":"address.parseText.button","bundleName":"I18nResources","translation":"Parse from Text","translationDE":"Aus Text einlesen","usedInClasses":["org.projectforge.rest.AddressPagesRest"],"usedInFiles":[]},