feat(memberTransferService, trainingStatsService, i18n): enhance member transfer logic and update localization files

- Updated the member transfer service to only load active members with `testMembership = false`, improving data accuracy during transfers.
- Introduced new functions in the training stats service to count missed training weeks, enhancing training participation tracking.
- Expanded localization files for multiple languages, adding new keys and translations for member management features, improving user experience across the application.
This commit is contained in:
Torsten Schulz (local)
2026-03-16 23:42:28 +01:00
parent 43f96b2491
commit 2347dccafe
18 changed files with 2903 additions and 193 deletions

View File

@@ -7,7 +7,7 @@ import { devLog, infoLog, errorLog } from '../utils/logger.js';
class MemberTransferService {
/**
* Überträgt alle Mitglieder mit testMembership = false an einen externen Endpoint
* Überträgt alle aktiven Mitglieder mit testMembership = false an einen externen Endpoint
*
* @param {string} userToken - User Token für Authentifizierung
* @param {number} clubId - Club ID
@@ -26,10 +26,11 @@ class MemberTransferService {
try {
await checkAccess(userToken, clubId);
// 1. Alle Mitglieder mit testMembership = false laden
// 1. Alle aktiven Mitglieder mit testMembership = false laden
const members = await Member.findAll({
where: {
clubId: clubId,
active: true,
testMembership: false
}
});
@@ -1008,4 +1009,3 @@ class MemberTransferService {
}
export default new MemberTransferService();

View File

@@ -1,6 +1,41 @@
import { DiaryDate, Member, Participant } from '../models/index.js';
import { Op } from 'sequelize';
function getIsoWeekKey(dateLike) {
const date = new Date(dateLike);
if (Number.isNaN(date.getTime())) {
return null;
}
const utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
const dayNum = utcDate.getUTCDay() || 7;
utcDate.setUTCDate(utcDate.getUTCDate() + 4 - dayNum);
const yearStart = new Date(Date.UTC(utcDate.getUTCFullYear(), 0, 1));
const weekNum = Math.ceil((((utcDate - yearStart) / 86400000) + 1) / 7);
return `${utcDate.getUTCFullYear()}-${String(weekNum).padStart(2, '0')}`;
}
function countMissedTrainingWeeks(trainingDates, lastTrainingDate) {
const lastTrainingTs = lastTrainingDate ? new Date(lastTrainingDate).getTime() : null;
const weeks = new Set();
for (const trainingDate of trainingDates) {
const ts = new Date(trainingDate).getTime();
if (Number.isNaN(ts)) {
continue;
}
if (lastTrainingTs !== null && ts <= lastTrainingTs) {
continue;
}
const key = getIsoWeekKey(trainingDate);
if (key) {
weeks.add(key);
}
}
return weeks.size;
}
class TrainingStatsService {
async getTrainingStats(clubIdRaw) {
const clubId = parseInt(clubIdRaw, 10);
@@ -33,6 +68,15 @@ class TrainingStatsService {
});
const stats = [];
const trainingDates12Months = await DiaryDate.findAll({
where: {
clubId,
date: { [Op.gte]: twelveMonthsAgo }
},
attributes: ['date'],
order: [['date', 'DESC']]
});
const trainingDateValues12Months = trainingDates12Months.map(entry => entry.date);
for (const member of members) {
const participation12Months = await Participant.count({
@@ -89,6 +133,8 @@ class TrainingStatsService {
const lastTrainingDate = trainingDetails.length ? trainingDetails[0].diaryDate.date : null;
const lastTrainingTs = lastTrainingDate ? new Date(lastTrainingDate).getTime() : 0;
const missedTrainingWeeks = countMissedTrainingWeeks(trainingDateValues12Months, lastTrainingDate);
const notInTraining = missedTrainingWeeks >= 6;
stats.push({
id: member.id,
@@ -100,6 +146,8 @@ class TrainingStatsService {
participationTotal,
lastTraining: lastTrainingDate,
lastTrainingTs,
missedTrainingWeeks,
notInTraining,
trainingDetails: formattedTrainingDetails
});
}

View File

@@ -357,5 +357,98 @@
"stageFlowReadinessReady": "Übergang ist fachlich startklar",
"stageFlowQualifiedPreviewTitle": "Aktuell qualifiziert",
"stageFlowQualifiedPreviewEntry": "G{group} · Platz {position} · {name}"
},
"members": {
"subtitle": "Mitglieder suchen, filtern und direkt bearbeiten.",
"closeEditor": "Editor schließen",
"visibleMembers": "Sichtbare Mitglieder",
"search": "Suche",
"searchPlaceholder": "Name, Ort, Telefon oder E-Mail suchen",
"memberScope": "Mitgliedsbereich",
"scopeAll": "Alle",
"scopeActive": "Aktiv",
"scopeTest": "Probe",
"scopeNeedsForm": "Formular ungeprüft",
"scopeInactive": "Inaktiv",
"resultsVisible": "Mitglieder sichtbar",
"editHint": "Ein Klick auf eine Zeile öffnet den Editor.",
"editorCreateHint": "Neues Mitglied anlegen und Kontaktdaten direkt erfassen.",
"editorEditHint": "Daten von {name} bearbeiten.",
"transferSuccessTitle": "Übertragung erfolgreich",
"transferErrorTitle": "Fehler bei der Übertragung",
"clickTtRequestPending": "Click-TT-Antrag läuft",
"clickTtRequestAction": "Spielberechtigung in click-TT beantragen",
"clickTtRequestTitle": "Click-TT-Antrag starten",
"clickTtRequestConfirm": "Soll für {name} der automatisierte Click-TT-Antrag gestartet werden?",
"clickTtRequestHint": "Der Antrag wird im Backend automatisiert durch den Click-TT-Workflow geführt.",
"clickTtRequestSuccess": "Bitte loggen Sie sich noch auf click-tt ein und senden Sie den Antrag ab.",
"clickTtRequestError": "Der Click-TT-Antrag konnte nicht eingereicht werden.",
"clickTtRequestFailedLog": "Click-TT-Antrag fehlgeschlagen",
"deleteImageTitle": "Bild löschen",
"deleteImageConfirm": "Möchten Sie dieses Bild wirklich löschen?",
"parentFallback": "Elternteil",
"loadingMembers": "Lade Mitglieder...",
"errorLoadingMembers": "Laden der Mitgliederliste fehlgeschlagen.",
"scopeNotTraining": "Nicht mehr im Training",
"notInTrainingTooltip": "Seit {weeks} Trainingswochen ohne Teilnahme",
"status": "Status",
"contact": "Kontakt",
"noPhoneShort": "Kein Telefon",
"noEmailShort": "Keine E-Mail",
"noAddressShort": "Keine Adresse",
"clickTtSubmitted": "Click-TT gestellt",
"markRegular": "Als regulär markieren",
"markFormReceived": "Formular geprüft",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Läuft ...",
"memberDetails": "Mitgliedsdetails",
"previewLastTraining": "Letztes Training",
"previewNoLastTraining": "Noch keine Teilnahme",
"phoneListForSelection": "Telefonliste für Auswahl",
"markFormsForSelection": "Formulare für Auswahl prüfen",
"markRegularForSelection": "Auswahl als regulär markieren",
"phoneListSelectionFile": "Telefonliste-Auswahl.pdf",
"batchFormsMarkedSuccess": "{count} Formular(e) als geprüft markiert.",
"batchFormsMarkedEmpty": "In der aktuellen Auswahl gibt es keine ungeprüften Formulare.",
"batchMarkedRegularSuccess": "{count} Probe-Mitglied(er) als regulär markiert.",
"batchMarkedRegularEmpty": "In der aktuellen Auswahl gibt es keine Probe-Mitglieder.",
"batchPartialFailure": "{success} erfolgreich, {failed} fehlgeschlagen.",
"sortBy": "Sortieren nach",
"sortLastName": "Nachname",
"sortFirstName": "Vorname",
"sortBirthday": "Geburtstag",
"sortAge": "Alter",
"age": "Alter",
"openTasks": "Offene Aufgaben",
"noOpenTasks": "Keine offenen Aufgaben",
"taskVerifyForm": "Formular prüfen",
"taskReviewTrialStatus": "Probe-Status prüfen",
"taskCheckTrainingStatus": "Trainingsstatus prüfen",
"taskCheckClickTt": "Click-TT-Spielberechtigung prüfen",
"taskActionVerify": "Prüfen",
"taskActionMarkRegular": "Regulär setzen",
"taskActionRequest": "Anfragen",
"toggleSortDirection": "Sortierrichtung wechseln",
"sortLastTraining": "Letztes Training",
"sortOpenTasks": "Offene Aufgaben",
"exportPreview": "Exportvorschau",
"exportMembersSelected": "Mitglieder aktuell ausgewählt",
"exportPhones": "Telefon",
"exportReachableByPhone": "mit Telefonnummer",
"exportEmails": "E-Mail",
"exportReachableByEmail": "mit E-Mail-Adresse",
"exportPreviewNames": "Vorschau",
"exportPreviewEmpty": "Keine Mitglieder in der aktuellen Auswahl",
"exportCsv": "CSV exportieren",
"exportCsvFile": "mitglieder-auswahl.csv",
"copyPhones": "Telefone kopieren",
"copyEmails": "E-Mails kopieren",
"copyPhonesSuccess": "Telefonliste in die Zwischenablage kopiert.",
"copyPhonesEmpty": "In der aktuellen Auswahl gibt es keine Telefonnummern.",
"copyEmailsSuccess": "E-Mail-Liste in die Zwischenablage kopiert.",
"copyEmailsEmpty": "In der aktuellen Auswahl gibt es keine E-Mail-Adressen.",
"composeEmail": "E-Mail vorbereiten",
"copyContactSummary": "Kontaktübersicht kopieren",
"copyContactSummarySuccess": "Kontaktübersicht in die Zwischenablage kopiert."
}
}

View File

@@ -201,7 +201,98 @@
"picsInInternetAllowed": "Pics in Internet erlaubt",
"testMembership": "Testmitgliedschaft",
"memberFormHandedOver": "Mitgliedsformular ausgehändigt",
"trainingGroups": "Trainingsgruppen"
"trainingGroups": "Trainingsgruppen",
"subtitle": "Mitglieder suchen, filtern und direkt bearbeiten.",
"closeEditor": "Editor schließen",
"visibleMembers": "Sichtbare Mitglieder",
"search": "Suche",
"searchPlaceholder": "Name, Ort, Telefon oder E-Mail suchen",
"memberScope": "Mitgliedsbereich",
"scopeAll": "Alle",
"scopeActive": "Aktiv",
"scopeTest": "Probe",
"scopeNeedsForm": "Formular ungeprüft",
"scopeInactive": "Inaktiv",
"resultsVisible": "Mitglieder sichtbar",
"editHint": "Ein Klick auf eine Zeile öffnet den Editor.",
"editorCreateHint": "Neues Mitglied anlegen und Kontaktdaten direkt erfassen.",
"editorEditHint": "Daten von {name} bearbeiten.",
"transferSuccessTitle": "Übertragung erfolgreich",
"transferErrorTitle": "Fehler bei der Übertragung",
"clickTtRequestPending": "Click-TT-Antrag läuft",
"clickTtRequestAction": "Spielberechtigung in click-TT beantragen",
"clickTtRequestTitle": "Click-TT-Antrag starten",
"clickTtRequestConfirm": "Soll für {name} der automatisierte Click-TT-Antrag gestartet werden?",
"clickTtRequestHint": "Der Antrag wird im Backend automatisiert durch den Click-TT-Workflow geführt.",
"clickTtRequestSuccess": "Bitte loggen Sie sich noch auf click-tt ein und senden Sie den Antrag ab.",
"clickTtRequestError": "Der Click-TT-Antrag konnte nicht eingereicht werden.",
"clickTtRequestFailedLog": "Click-TT-Antrag fehlgeschlagen",
"deleteImageTitle": "Bild löschen",
"deleteImageConfirm": "Möchten Sie dieses Bild wirklich löschen?",
"parentFallback": "Elternteil",
"loadingMembers": "Lade Mitglieder...",
"errorLoadingMembers": "Laden der Mitgliederliste fehlgeschlagen.",
"scopeNotTraining": "Nicht mehr im Training",
"notInTrainingTooltip": "Seit {weeks} Trainingswochen ohne Teilnahme",
"status": "Status",
"contact": "Kontakt",
"noPhoneShort": "Kein Telefon",
"noEmailShort": "Keine E-Mail",
"noAddressShort": "Keine Adresse",
"clickTtSubmitted": "Click-TT gestellt",
"markRegular": "Als regulär markieren",
"markFormReceived": "Formular geprüft",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Läuft ...",
"memberDetails": "Mitgliedsdetails",
"previewLastTraining": "Letztes Training",
"previewNoLastTraining": "Noch keine Teilnahme",
"phoneListForSelection": "Telefonliste für Auswahl",
"markFormsForSelection": "Formulare für Auswahl prüfen",
"markRegularForSelection": "Auswahl als regulär markieren",
"phoneListSelectionFile": "Telefonliste-Auswahl.pdf",
"batchFormsMarkedSuccess": "{count} Formular(e) als geprüft markiert.",
"batchFormsMarkedEmpty": "In der aktuellen Auswahl gibt es keine ungeprüften Formulare.",
"batchMarkedRegularSuccess": "{count} Probe-Mitglied(er) als regulär markiert.",
"batchMarkedRegularEmpty": "In der aktuellen Auswahl gibt es keine Probe-Mitglieder.",
"batchPartialFailure": "{success} erfolgreich, {failed} fehlgeschlagen.",
"sortBy": "Sortieren nach",
"sortLastName": "Nachname",
"sortFirstName": "Vorname",
"sortBirthday": "Geburtstag",
"sortAge": "Alter",
"age": "Alter",
"openTasks": "Offene Aufgaben",
"noOpenTasks": "Keine offenen Aufgaben",
"taskVerifyForm": "Formular prüfen",
"taskReviewTrialStatus": "Probe-Status prüfen",
"taskCheckTrainingStatus": "Trainingsstatus prüfen",
"taskCheckClickTt": "Click-TT-Spielberechtigung prüfen",
"taskActionVerify": "Prüfen",
"taskActionMarkRegular": "Regulär setzen",
"taskActionRequest": "Anfragen",
"toggleSortDirection": "Sortierrichtung wechseln",
"sortLastTraining": "Letztes Training",
"sortOpenTasks": "Offene Aufgaben",
"exportPreview": "Exportvorschau",
"exportMembersSelected": "Mitglieder aktuell ausgewählt",
"exportPhones": "Telefon",
"exportReachableByPhone": "mit Telefonnummer",
"exportEmails": "E-Mail",
"exportReachableByEmail": "mit E-Mail-Adresse",
"exportPreviewNames": "Vorschau",
"exportPreviewEmpty": "Keine Mitglieder in der aktuellen Auswahl",
"exportCsv": "CSV exportieren",
"exportCsvFile": "mitglieder-auswahl.csv",
"copyPhones": "Telefone kopieren",
"copyEmails": "E-Mails kopieren",
"copyPhonesSuccess": "Telefonliste in die Zwischenablage kopiert.",
"copyPhonesEmpty": "In der aktuellen Auswahl gibt es keine Telefonnummern.",
"copyEmailsSuccess": "E-Mail-Liste in die Zwischenablage kopiert.",
"copyEmailsEmpty": "In der aktuellen Auswahl gibt es keine E-Mail-Adressen.",
"composeEmail": "E-Mail vorbereiten",
"copyContactSummary": "Kontaktübersicht kopieren",
"copyContactSummarySuccess": "Kontaktübersicht in die Zwischenablage kopiert."
},
"diary": {
"title": "Trainingstagebuch",

View File

@@ -282,7 +282,108 @@
"phoneList": "Telefonliste.pdf",
"errorLoadingTrainingParticipations": "Fehler beim Laden der Trainingsteilnahmen",
"errorUpdatingRatings": "Fehler beim Aktualisieren der TTR/QTTR-Werte",
"errorTransfer": "Fehler bei der Übertragung"
"errorTransfer": "Fehler bei der Übertragung",
"subtitle": "Mitglieder suchen, filtern und direkt bearbeiten.",
"closeEditor": "Editor schließen",
"visibleMembers": "Sichtbare Mitglieder",
"search": "Suche",
"searchPlaceholder": "Name, Ort, Telefon oder E-Mail suchen",
"memberScope": "Mitgliedsbereich",
"scopeAll": "Alle",
"scopeActive": "Aktiv",
"scopeTest": "Probe",
"scopeNeedsForm": "Formular ungeprüft",
"scopeDataIncomplete": "Daten unvollständig",
"scopeInactive": "Inaktiv",
"resultsVisible": "Mitglieder sichtbar",
"editHint": "Ein Klick auf eine Zeile öffnet den Editor.",
"editorCreateHint": "Neues Mitglied anlegen und Kontaktdaten direkt erfassen.",
"editorEditHint": "Daten von {name} bearbeiten.",
"transferSuccessTitle": "Übertragung erfolgreich",
"transferErrorTitle": "Fehler bei der Übertragung",
"clickTtRequestPending": "Click-TT-Antrag läuft",
"clickTtRequestAction": "Spielberechtigung in click-TT beantragen",
"clickTtRequestTitle": "Click-TT-Antrag starten",
"clickTtRequestConfirm": "Soll für {name} der automatisierte Click-TT-Antrag gestartet werden?",
"clickTtRequestHint": "Der Antrag wird im Backend automatisiert durch den Click-TT-Workflow geführt.",
"clickTtRequestSuccess": "Bitte loggen Sie sich noch auf click-tt ein und senden Sie den Antrag ab.",
"clickTtRequestError": "Der Click-TT-Antrag konnte nicht eingereicht werden.",
"clickTtRequestFailedLog": "Click-TT-Antrag fehlgeschlagen",
"deleteImageTitle": "Bild löschen",
"deleteImageConfirm": "Möchten Sie dieses Bild wirklich löschen?",
"parentFallback": "Elternteil",
"loadingMembers": "Lade Mitglieder...",
"errorLoadingMembers": "Laden der Mitgliederliste fehlgeschlagen.",
"scopeNotTraining": "Nicht mehr im Training",
"notInTrainingTooltip": "Seit {weeks} Trainingswochen ohne Teilnahme",
"status": "Status",
"contact": "Kontakt",
"noPhoneShort": "Kein Telefon",
"noEmailShort": "Keine E-Mail",
"noAddressShort": "Keine Adresse",
"clickTtSubmitted": "Click-TT gestellt",
"markRegular": "Als regulär markieren",
"markFormReceived": "Formular geprüft",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Läuft ...",
"memberDetails": "Mitgliedsdetails",
"previewLastTraining": "Letztes Training",
"previewNoLastTraining": "Noch keine Teilnahme",
"phoneListForSelection": "Telefonliste für Auswahl",
"markFormsForSelection": "Formulare für Auswahl prüfen",
"markRegularForSelection": "Auswahl als regulär markieren",
"phoneListSelectionFile": "Telefonliste-Auswahl.pdf",
"batchFormsMarkedSuccess": "{count} Formular(e) als geprüft markiert.",
"batchFormsMarkedEmpty": "In der aktuellen Auswahl gibt es keine ungeprüften Formulare.",
"batchMarkedRegularSuccess": "{count} Probe-Mitglied(er) als regulär markiert.",
"batchMarkedRegularEmpty": "In der aktuellen Auswahl gibt es keine Probe-Mitglieder.",
"batchPartialFailure": "{success} erfolgreich, {failed} fehlgeschlagen.",
"sortBy": "Sortieren nach",
"sortLastName": "Nachname",
"sortFirstName": "Vorname",
"sortBirthday": "Geburtstag",
"sortAge": "Alter",
"age": "Alter",
"dataQuality": "Datenqualität",
"dataQualityComplete": "Daten vollständig",
"dataIssueBirthdate": "Geburtsdatum fehlt",
"dataIssuePhone": "Telefon fehlt",
"dataIssueEmail": "E-Mail fehlt",
"dataIssueAddress": "Adresse fehlt",
"dataIssueGender": "Geschlecht ungeklärt",
"openTasks": "Offene Aufgaben",
"noOpenTasks": "Keine offenen Aufgaben",
"taskVerifyForm": "Formular prüfen",
"taskReviewTrialStatus": "Probe-Status prüfen",
"taskCheckTrainingStatus": "Trainingsstatus prüfen",
"taskCheckDataQuality": "Datenqualität prüfen",
"taskCheckClickTt": "Click-TT-Spielberechtigung prüfen",
"taskActionVerify": "Prüfen",
"taskActionMarkRegular": "Regulär setzen",
"taskActionReview": "Öffnen",
"taskActionRequest": "Anfragen",
"toggleSortDirection": "Sortierrichtung wechseln",
"sortLastTraining": "Letztes Training",
"sortOpenTasks": "Offene Aufgaben",
"exportPreview": "Exportvorschau",
"exportMembersSelected": "Mitglieder aktuell ausgewählt",
"exportPhones": "Telefon",
"exportReachableByPhone": "mit Telefonnummer",
"exportEmails": "E-Mail",
"exportReachableByEmail": "mit E-Mail-Adresse",
"exportPreviewNames": "Vorschau",
"exportPreviewEmpty": "Keine Mitglieder in der aktuellen Auswahl",
"exportCsv": "CSV exportieren",
"exportCsvFile": "mitglieder-auswahl.csv",
"copyPhones": "Telefone kopieren",
"copyEmails": "E-Mails kopieren",
"copyPhonesSuccess": "Telefonliste in die Zwischenablage kopiert.",
"copyPhonesEmpty": "In der aktuellen Auswahl gibt es keine Telefonnummern.",
"copyEmailsSuccess": "E-Mail-Liste in die Zwischenablage kopiert.",
"copyEmailsEmpty": "In der aktuellen Auswahl gibt es keine E-Mail-Adressen.",
"composeEmail": "E-Mail vorbereiten",
"copyContactSummary": "Kontaktübersicht kopieren",
"copyContactSummarySuccess": "Kontaktübersicht in die Zwischenablage kopiert."
},
"diary": {
"title": "Trainingstagebuch",

View File

@@ -357,5 +357,98 @@
"stageFlowReadinessReady": "Transition is ready to start",
"stageFlowQualifiedPreviewTitle": "Currently qualified",
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
}
}

View File

@@ -363,5 +363,108 @@
"statusActionCreate": "Create",
"statusActionGenerate": "Generate",
"statusActionStart": "Start"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeDataIncomplete": "Data incomplete",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"dataQuality": "Data quality",
"dataQualityComplete": "Data complete",
"dataIssueBirthdate": "Birthdate missing",
"dataIssuePhone": "Phone missing",
"dataIssueEmail": "Email missing",
"dataIssueAddress": "Address missing",
"dataIssueGender": "Gender unclear",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckDataQuality": "Review data quality",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionReview": "Open",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
}
}

View File

@@ -357,5 +357,98 @@
"stageFlowReadinessReady": "Transition is ready to start",
"stageFlowQualifiedPreviewTitle": "Currently qualified",
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
}
}

View File

@@ -329,5 +329,98 @@
"stageFlowReadinessReady": "Transition is ready to start",
"stageFlowQualifiedPreviewTitle": "Currently qualified",
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
}
}

View File

@@ -329,5 +329,98 @@
"stageFlowReadinessReady": "Transition is ready to start",
"stageFlowQualifiedPreviewTitle": "Currently qualified",
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
}
}

View File

@@ -329,5 +329,98 @@
"stageFlowReadinessReady": "Transition is ready to start",
"stageFlowQualifiedPreviewTitle": "Currently qualified",
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
}
}

View File

@@ -329,5 +329,98 @@
"stageFlowReadinessReady": "Transition is ready to start",
"stageFlowQualifiedPreviewTitle": "Currently qualified",
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
}
}

View File

@@ -329,5 +329,98 @@
"stageFlowReadinessReady": "Transition is ready to start",
"stageFlowQualifiedPreviewTitle": "Currently qualified",
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
}
}

View File

@@ -329,5 +329,98 @@
"stageFlowReadinessReady": "Transition is ready to start",
"stageFlowQualifiedPreviewTitle": "Currently qualified",
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
}
}

View File

@@ -329,5 +329,98 @@
"stageFlowReadinessReady": "Transition is ready to start",
"stageFlowQualifiedPreviewTitle": "Currently qualified",
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
}
}

View File

@@ -329,5 +329,98 @@
"stageFlowReadinessReady": "Transition is ready to start",
"stageFlowQualifiedPreviewTitle": "Currently qualified",
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
}
}

View File

@@ -329,5 +329,98 @@
"stageFlowReadinessReady": "Transition is ready to start",
"stageFlowQualifiedPreviewTitle": "Currently qualified",
"stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
},
"members": {
"subtitle": "Search, filter and edit members directly.",
"closeEditor": "Close editor",
"visibleMembers": "Visible members",
"search": "Search",
"searchPlaceholder": "Search by name, city, phone or email",
"memberScope": "Member scope",
"scopeAll": "All",
"scopeActive": "Active",
"scopeTest": "Trial",
"scopeNeedsForm": "Form unverified",
"scopeInactive": "Inactive",
"resultsVisible": "members visible",
"editHint": "Click a row to open the editor.",
"editorCreateHint": "Create a new member and capture contact details directly.",
"editorEditHint": "Edit the details for {name}.",
"transferSuccessTitle": "Transfer successful",
"transferErrorTitle": "Transfer error",
"clickTtRequestPending": "Click-TT request in progress",
"clickTtRequestAction": "Request click-TT eligibility",
"clickTtRequestTitle": "Start Click-TT request",
"clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
"clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
"clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
"clickTtRequestError": "The Click-TT request could not be submitted.",
"clickTtRequestFailedLog": "Click-TT request failed",
"deleteImageTitle": "Delete image",
"deleteImageConfirm": "Do you really want to delete this image?",
"parentFallback": "Parent",
"loadingMembers": "Loading members...",
"errorLoadingMembers": "Failed to load the member list.",
"scopeNotTraining": "No longer training",
"notInTrainingTooltip": "No participation for {weeks} training weeks",
"status": "Status",
"contact": "Contact",
"noPhoneShort": "No phone",
"noEmailShort": "No email",
"noAddressShort": "No address",
"clickTtSubmitted": "Click-TT submitted",
"markRegular": "Mark regular",
"markFormReceived": "Mark form verified",
"clickTtRequestShort": "Click-TT",
"clickTtRequestPendingShort": "Pending ...",
"memberDetails": "Member details",
"previewLastTraining": "Last training",
"previewNoLastTraining": "No participation yet",
"phoneListForSelection": "Phone list for selection",
"markFormsForSelection": "Verify forms for selection",
"markRegularForSelection": "Mark selection regular",
"phoneListSelectionFile": "phone-list-selection.pdf",
"batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
"batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
"batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
"batchMarkedRegularEmpty": "There are no trial members in the current selection.",
"batchPartialFailure": "{success} succeeded, {failed} failed.",
"sortBy": "Sort by",
"sortLastName": "Last name",
"sortFirstName": "First name",
"sortBirthday": "Birthday",
"sortAge": "Age",
"age": "Age",
"openTasks": "Open tasks",
"noOpenTasks": "No open tasks",
"taskVerifyForm": "Verify form",
"taskReviewTrialStatus": "Review trial status",
"taskCheckTrainingStatus": "Review training status",
"taskCheckClickTt": "Review Click-TT eligibility",
"taskActionVerify": "Verify",
"taskActionMarkRegular": "Mark regular",
"taskActionRequest": "Request",
"toggleSortDirection": "Toggle sort direction",
"sortLastTraining": "Last training",
"sortOpenTasks": "Open tasks",
"exportPreview": "Export preview",
"exportMembersSelected": "members currently selected",
"exportPhones": "Phone",
"exportReachableByPhone": "with phone number",
"exportEmails": "Email",
"exportReachableByEmail": "with email address",
"exportPreviewNames": "Preview",
"exportPreviewEmpty": "No members in the current selection",
"exportCsv": "Export CSV",
"exportCsvFile": "member-selection.csv",
"copyPhones": "Copy phones",
"copyEmails": "Copy emails",
"copyPhonesSuccess": "Phone list copied to clipboard.",
"copyPhonesEmpty": "There are no phone numbers in the current selection.",
"copyEmailsSuccess": "Email list copied to clipboard.",
"copyEmailsEmpty": "There are no email addresses in the current selection.",
"composeEmail": "Compose email",
"copyContactSummary": "Copy contact summary",
"copyContactSummarySuccess": "Contact summary copied to clipboard."
}
}

File diff suppressed because it is too large Load Diff