diff --git a/backend/controllers/notificationController.js b/backend/controllers/notificationController.js index 0d0a9376..089df68b 100644 --- a/backend/controllers/notificationController.js +++ b/backend/controllers/notificationController.js @@ -1,4 +1,6 @@ import notificationService from '../services/notificationService.js'; +import Member from '../models/Member.js'; +import Club from '../models/Club.js'; const serialize = (recipient) => { const event = recipient.event?.toJSON?.() || recipient.event || {}; @@ -21,7 +23,18 @@ const serialize = (recipient) => { export const listNotifications = async (req, res) => { try { const items = await notificationService.listForUser(req.user.id, req.query); - res.json(items.map(serialize)); + const serialized = await Promise.all(items.map(async (item) => { + const result = serialize(item); + const club = result.clubId ? await Club.findByPk(result.clubId, { attributes: ['name'] }) : null; + if (result.type === 'member.rating_changed' && result.payload?.memberId) { + const member = await Member.findByPk(result.payload.memberId, { attributes: ['firstName', 'lastName'] }); + const memberName = [member?.firstName, member?.lastName].filter(Boolean).join(' '); + if (memberName) result.title = memberName; + } + result.context = club?.name || ''; + return result; + })); + res.json(serialized); } catch (error) { res.status(500).json({ error: 'Posteingang konnte nicht geladen werden.' }); } }; diff --git a/backend/services/memberService.js b/backend/services/memberService.js index 397a985a..7728bf85 100755 --- a/backend/services/memberService.js +++ b/backend/services/memberService.js @@ -807,7 +807,7 @@ class MemberService { priority: 'normal', resourceType: 'member', resourceId: String(member.id), - title: `(Q)TTR geändert: ${firstName} ${lastName}`, + title: `${firstName} ${lastName}`, body: changes.join(', '), route: '/members', payload: { memberId: member.id, clubId: Number(clubId), oldTtr, newTtr: member.ttr, oldQttr, newQttr: member.qttr }, diff --git a/frontend/I18N_TODO.md b/frontend/I18N_TODO.md index c5dcac4d..d34d1907 100755 --- a/frontend/I18N_TODO.md +++ b/frontend/I18N_TODO.md @@ -10,7 +10,7 @@ Stand der Kennzahlen: **2026-05-15** (Basis `de.json`: **2435** Blatt-Strings, ` | Befehl / Skript | Zweck | |-----------------|--------| -| `cd frontend && npm run i18n:status` | Batch-/Namespace-Status (Kernbereiche) | +| `cd frontend && npm run i18n:status` | Batch-/Namespace-Status (inklusive `schedule`) | | `cd frontend && npm run i18n:audit -- ` | Fehlende Keys, `= de`, deutsche Marker, Platzhalter | | `node scripts/check-i18n-completeness.js` | Vollständige Tabelle aller Locales | | `node scripts/check-i18n-completeness.js --locale fil --top 25` | Top-Namespace + EN-Leak-Beispiele pro Locale | @@ -70,7 +70,7 @@ Stand der Kennzahlen: **2026-05-15** (Basis `de.json`: **2435** Blatt-Strings, ` ### Aufgaben - [ ] Neue Features immer zuerst in `de.json` pflegen. -- [ ] Vor Release: prüfen, dass keine anderen Locales Keys haben, die in `de` fehlen (`check-i18n-completeness.js` / Audit). +- [ ] Vor Release: `npm run i18n:status` und `node ../scripts/check-i18n-completeness.js` prüfen; bei Änderungen an `schedule` die abhängigen Locales aktualisieren. - [ ] Nach größeren `de`-Änderungen: abhängige Locales und Mobile-Generator einplanen. --- diff --git a/frontend/scripts/audit-i18n.js b/frontend/scripts/audit-i18n.js index d532055c..81b91f43 100755 --- a/frontend/scripts/audit-i18n.js +++ b/frontend/scripts/audit-i18n.js @@ -10,6 +10,7 @@ const CORE_NAMESPACES = [ 'club', 'members', 'diary', + 'schedule', 'trainingStats', 'courtDrawingTool' ]; diff --git a/frontend/scripts/translation-status.js b/frontend/scripts/translation-status.js index d352b5f2..d1180872 100755 --- a/frontend/scripts/translation-status.js +++ b/frontend/scripts/translation-status.js @@ -10,6 +10,7 @@ const CORE_NAMESPACES = [ 'club', 'members', 'diary', + 'schedule', 'trainingStats', 'courtDrawingTool' ]; diff --git a/frontend/src/components/NotificationBell.vue b/frontend/src/components/NotificationBell.vue index 20371feb..cec6d361 100644 --- a/frontend/src/components/NotificationBell.vue +++ b/frontend/src/components/NotificationBell.vue @@ -10,7 +10,7 @@

Keine neuen Benachrichtigungen.

@@ -69,7 +69,7 @@ export default { .notification-menu { position: relative; } .notification-bell { position: relative; border: 0; background: transparent; font-size: 1.25rem; cursor: pointer; padding: .45rem; } .notification-badge { position: absolute; top: 0; right: -.15rem; min-width: 1.15rem; padding: .05rem .25rem; border-radius: 1rem; background: #c72c41; color: #fff; font: 700 .7rem/1.1 sans-serif; } -.notification-popover { position: absolute; right: 0; top: calc(100% + .35rem); z-index: 30; box-sizing: border-box; width: min(390px, calc(100vw - 1.5rem)); max-height: 70vh; overflow-x: hidden; overflow-y: auto; padding: .75rem; border: 1px solid #d8dee8; border-radius: .7rem; background: #fff; box-shadow: 0 12px 30px rgba(15, 23, 42, .18); } +.notification-popover { position: absolute; right: 0; top: calc(100% + .35rem); z-index: 30; box-sizing: border-box; width: min(390px, calc(100vw - 1.5rem)); max-height: 70vh; overflow-x: hidden; overflow-y: auto; padding: .75rem; border: 1px solid #d8dee8; border-radius: .7rem; background: #fff; color: #1f2937; box-shadow: 0 12px 30px rgba(15, 23, 42, .18); } .notification-popover header { display: flex; justify-content: space-between; align-items: center; margin-bottom: .5rem; }.notification-popover header button,.all-notifications { border: 0; background: none; color: #185fa5; cursor: pointer; font: inherit; } -.notification-item { display: flex; gap: .55rem; box-sizing: border-box; width: 100%; padding: .6rem; border: 0; border-radius: .45rem; background: transparent; text-align: left; cursor: pointer; }.notification-item > span:last-child { min-width: 0; overflow-wrap: anywhere; }.notification-item:hover,.notification-item.unread { background: #eef6ff; }.notification-item strong,.notification-item small { display: block; }.notification-item small { margin-top: .18rem; color: #52606d; }.priority-dot { width: .5rem; height: .5rem; flex: 0 0 auto; margin-top: .35rem; border-radius: 50%; background: #5c7080; }.priority-dot.high,.priority-dot.critical { background: #c72c41; }.notification-empty { color: #667085; }.all-notifications { box-sizing: border-box; width: 100%; padding-top: .65rem; text-align: center; } +.notification-item { display: flex; justify-content: flex-start; align-items: flex-start; gap: .55rem; box-sizing: border-box; width: 100%; padding: .6rem; border: 0; border-radius: .45rem; background: transparent; color: inherit; text-align: left; cursor: pointer; }.notification-item > span:last-child { min-width: 0; overflow-wrap: anywhere; }.notification-item:hover,.notification-item.unread { background: #eef6ff; }.notification-item strong,.notification-item small { display: block; }.notification-item strong { color: #1f2937; }.notification-item small { margin-top: .18rem; color: #52606d; }.priority-dot { width: .5rem; height: .5rem; flex: 0 0 auto; margin-top: .35rem; border-radius: 50%; background: #5c7080; }.priority-dot.high,.priority-dot.critical { background: #c72c41; }.notification-empty { color: #667085; }.all-notifications { box-sizing: border-box; width: 100%; padding-top: .65rem; text-align: center; } diff --git a/frontend/src/i18n/locales/de-CH.json b/frontend/src/i18n/locales/de-CH.json index d0425263..8e1d9985 100755 --- a/frontend/src/i18n/locales/de-CH.json +++ b/frontend/src/i18n/locales/de-CH.json @@ -1,33 +1,22 @@ { - "app": { - "name": "Trainingstagebuch", - "title": "Trainingstagebuch" - }, "common": { - "period": "Zeitraum", - "loading": "Lade...", "save": "Speichere", - "saved": "Gespeichert", "cancel": "Abbreche", "delete": "Lösche", "edit": "Bearbeite", "add": "Hinzufüge", "close": "Schliessen", "confirm": "Bestätige", - "yes": "Ja", "no": "Nei", "search": "Suche", - "filter": "Filter", "actions": "Aktione", "back": "Zrugg", "next": "Wiiter", "previous": "Zrugg", "submit": "Abschicke", "reset": "Zruggsetze", - "all": "Alle", "today": "Hüt", "time": "Zyt", - "new": "Neu", "update": "Aktualisiere", "move": "Verschiebe", "refresh": "Neu lade", @@ -38,181 +27,57 @@ "choose": "Wähle", "apply": "Aawände", "clear": "Lösche", - "details": "Details", "view": "Aazeige", - "name": "Name", - "date": "Datum", - "status": "Status", - "type": "Typ", "description": "Beschrieb", - "active": "Aktiv", - "inactive": "Inaktiv", - "enabled": "Aktiviert", - "disabled": "Deaktiviert", - "required": "Erforderlich", - "optional": "Optional", - "in": "in", - "min": "Min", "minutes": "Minute", "hours": "Stunde", "days": "Täg", "weeks": "Wuche", "months": "Monat", - "years": "Jahr", - "ok": "OK", - "saving": "Speichere..." + "years": "Jahr" }, "calendar": { - "eyebrow": "Vereinskalender", - "title": "Kalender", - "description": "Trainingstage, Vereinsturniere und Punktspiele in einer Monatsansicht.", - "today": "Heute", - "loading": "Kalenderdaten werden geladen...", - "noClub": "Bitte zuerst einen Verein auswählen.", - "loadError": "Kalenderdaten konnten nicht geladen werden.", - "sourceWarning": "{source} konnte nicht geladen werden", - "agendaTitle": "Termine im Monat", - "agendaEmpty": "Keine Termine in diesem Monat.", "recurringTrainingTime": "Regelmässige Trainingszeit", - "participants": "{count} Teilnehmer", - "starts": "{count} Starts", - "options": { - "title": "Optionen", - "subtitle": "Ausfälle & eigene Termine" - }, - "legend": { - "training": "Training", - "tournament": "Turnier", - "officialTournament": "Teilnahme", - "match": "Punktspiel", - "holiday": "Feiertag", - "schoolHoliday": "Ferien", - "trainingCancellation": "Ausfall", - "customEvent": "Termin" - }, "cancellation": { - "title": "Training fällt aus", - "description": "Blendet regelmässige Trainingszeiten aus.", - "date": "Datum", - "untilOptional": "Bis optional", - "trainingGroups": "Trainingsgruppen", - "reasonPlaceholder": "Grund (optional)", - "saving": "Speichern...", - "submit": "Eintragen", - "fallbackTitle": "Training fällt aus", - "subtitle": "Trainingsausfall" - }, - "customEvent": { - "title": "Eigene Termine", - "description": "Kreistage, Sitzungen, interne Meetings, ...", - "titlePlaceholder": "Titel", - "categoryPlaceholder": "Kategorie (optional)", - "saving": "Speichern...", - "submit": "Anlegen", - "subtitleFallback": "Eigener Termin" - }, - "quickCancellation": { - "title": "Trainingsausfall", - "message": "„{title}“ als Trainingsausfall markieren?", - "useWholeRange": "Für den gesamten Zeitraum ({start} bis {end}) eintragen", - "trainingGroups": "Betroffene Trainingsgruppen", - "confirm": "Ausfall eintragen", - "noGroups": "Es sind keine Trainingsgruppen mit Trainingszeiten vorhanden." - }, - "sources": { - "trainingDays": "Trainingstage", - "trainingTimes": "Trainingszeiten", - "trainingCancellations": "Trainingsausfälle", - "customEvents": "Eigene Termine", - "tournaments": "Turniere", - "officialTournaments": "Turnierteilnahmen", - "matches": "Punktspiele", - "holidays": "Ferien/Feiertage" - }, - "eventTitles": { - "training": "Training", - "tournament": "Turnier", - "officialTournament": "Turnierteilnahme", - "match": "Punktspiel" - }, - "tournament": { - "open": "Offenes Turnier", - "club": "Vereinsturnier" - }, - "match": { - "home": "Heim", - "guest": "Gast" - }, - "holidayTypes": { - "holiday": "Feiertag", - "schoolHoliday": "Schulferien" - }, - "weekdays": { - "monday": "Mo", - "tuesday": "Di", - "wednesday": "Mi", - "thursday": "Do", - "friday": "Fr", - "saturday": "Sa", - "sunday": "So" - }, - "cancelCancellation": { - "title": "Trainingsausfall stornieren", - "message": "Trainingsausfall „{title}“ am {date} wirklich stornieren?", - "confirm": "Ausfall stornieren" + "description": "Blendet regelmässige Trainingszeiten aus." } }, - "unknown": "Unbekannt", "navigation": { - "home": "Startseite", "members": "Mitglider", "billing": "Abrechnig", "orders": "Bestellige", "diary": "Tagebuech", "approvals": "Freigabe", - "statistics": "Trainings-Statistik", "tournaments": "Turnier", - "clubTournaments": "Vereinsturniere", - "tournamentParticipations": "Offizielle Turniere & Teilnahmen", "schedule": "Spielplän", "clubSettings": "Vereinsiistellige", "predefinedActivities": "Vordefinierte Aktivitäte", "teamManagement": "Team-Verwaltig", "permissions": "Berechtigunge", - "logs": "System-Logs", "memberTransfer": "Mitgliderübertragig", - "myTischtennisAccount": "myTischtennis-Account", "clickTtAccount": "HTTV / click-TT-Account", - "clickTtBrowser": "HTTV / click-TT", "personalSettings": "Persönlichi Iistellige", "logout": "Abmelde", "login": "Aamelde", "register": "Registriere", "dailyBusiness": "Tagesgschäft", "competitions": "Wettbewerb", - "settings": "Iistellige", - "backToHome": "Zur Startseite" + "settings": "Iistellige" }, "club": { "select": "Verein uswähle", "selectPlaceholder": "Verein wähle...", "new": "Neue Verein", "load": "Lade", - "name": "Vereinsname", "create": "Verein erstelle", "createTitle": "Verein aalege", - "members": "Mitglieder", - "trainingDiary": "Trainingstagebuch", "noAccess": "Für diesen Verein isch no kei Zugriff freigschaltet.", "requestAccess": "Zugriff beantrage", "openRequests": "Offeni Zugriffsafrage", - "title": "Verein", "openAccessRequests": "Offeni Zugriffsafrage", - "diary": "Trainingstagebuch", "accessDenied": "Zugriff uf de Verein verweigeret.", "errorLoadingRequests": "Fehler bim Lade vo de offene Afroge", "accessRequested": "Zugriff isch aagfragt worde.", - "accessRequestPending": "Der Zugriff auf diesen Verein ist beantragt. Bitte haben Sie etwas Geduld.", "accessRequestFailed": "Zugriffsafrag het nöd chönne gstellt werde.", "mobileSelectHint": "Bitte wähl zerscht en Verein us, zum d App uf em Smartphone z nutze." }, @@ -220,15 +85,12 @@ "login": "Aamelde", "logout": "Abmelde", "register": "Registriere", - "email": "E-Mail", - "password": "Passwort", "forgotPassword": "Passwort vergesse?", "rememberMe": "Aagmeldet bliibe", "loginSuccess": "Erfolgriich aagmeldet", "logoutSuccess": "Erfolgriich abgmeldet", "sessionExpired": "Dini Sitzig isch abglaufe. Du wirsch abgmeldet.", "noAccount": "No kei Konto?", - "toLogin": "Zum Login", "loginFailed": "Login fehlgschlage. Bitte Zuegangsdaten prüefe.", "activationFailed": "Aktivierig fehlgschlage. Bitte de Link überprüefe.", "forgotPasswordDescription": "Gib dini E-Mail-Adrässe ii. Du bechunsch en Link, zum dis Passwort zruggsetze.", @@ -256,42 +118,56 @@ }, "languages": { "de": "Deutsch (Dütsch)", - "en-GB": "English (Englisch (GB))", - "en-US": "English (Englisch (US))", - "en-AU": "English (Englisch (AU))", "de-CH": "Schwiizerdütsch", - "fr": "Français (Französisch)", - "es": "Español (Spanisch)", - "it": "Italiano (Italienisch)", - "pl": "Polski (Polnisch)", - "ja": "日本語 (Japanisch)", - "zh": "中文 (Chinesisch)", "tl": "Tagalog", - "th": "ไทย (Thai)", - "fil": "Filipino", - "ceb": "Cebuano (Bisaya)" + "fil": "Filipino" }, "messages": { - "success": "Erfolg", - "error": "Fehler", "warning": "Warnig", - "info": "Information", "confirm": "Bestätige", "cancel": "Abbreche", "fileTooLarge": "Datei zu gross", "imageMaxSize": "Das Bild darf maximal 5 MB gross sein." }, + "members": { + "street": "Strasse", + "wantsToPlay": "Will spiele", + "closeEditor": "Editor schliessen", + "dataIssueStreet": "Strasse fehlt" + }, + "orders": { + "title": "Bestellige", + "memberTitle": "Bestellige: {name}", + "globalTitle": "Bestellige aller Vereine", + "globalSubtitle": "Da chasch alli Bestellige vereinsübergreifend aluege und verwalte.", + "loading": "Bestellige werde glade...", + "errorLoading": "Bestellige hend nöd chöne glade werde.", + "errorSaving": "Bestellig het nöd chöne gspeicheret werde.", + "searchPlaceholder": "Nach Verein, Mitgliid oder Artikel sueche", + "filterAllStatuses": "Alli Status", + "filterAllClubs": "Alli Vereine", + "statusRequested": "gwünscht", + "statusOrdered": "bstellt", + "statusArrived": "Artikel achoo", + "statusHandedOver": "Artikel usghändigt", + "cost": "Chöschte", + "open": "No offe", + "statusDate": "Letschti Änderig", + "addOrder": "Bestellig aalege", + "dateAutoHint": "S Datum wird automatisch gsetzt und jedi Änderig mit em Datum protokolliert.", + "noOrdersMember": "Für das Mitgliid git's no kei Bestellige.", + "noOrdersGlobal": "Aktuell git's kei Bestellige.", + "member": "Mitgliid" + }, + "diary": { + "quickCreateNoSlot": "Kein freier Trainingstermin gefunden (gemäss Gruppenzeiten, ein Jahr voraus)." + }, "tournaments": { - "internalStatsTitle": "Statistik interne Turniere (Einzel)", - "internalStatsOpenButton": "Turnierstatistik (Einzel)", "internalStatsAgeFilter": "Altersklassä & Gschlächt (Einzel)", "internalStatsFilterAgeBands": "Altersklassä", "internalStatsFilterGenderColumn": "Gschlächt", "internalStatsGenderScopeAll": "Alli", - "internalStatsGenderScopeGirls": "Mädchen", - "tournamentClassGenderFemale": "Weiblich", "tournamentClassGenderOpen": "Alli", - "internalStatsTtAdult": "Erwachsene", "internalStatsAgeNoClass": "Ohni Klassäzuordnig", "internalStatsAgeSelectAll": "Alli", "internalStatsAgeSelectNone": "Keini", @@ -304,16 +180,9 @@ "internalStatsTournamentsInPeriod": "{count} Turnier(e) im Ziitruum (ohni Minimeisterschafte).", "internalStatsPointsExplain": "Wertig: Pro Gruppe wird d Platzierig als Prozentzahl usdrückt (bi N Teilnehmer mit Platzierig: 1. = 100 %, Letschte = 0 %, dzwüsche linear; gliichi Platzierig = gliiche Wert). N umfasst alli Platzierte ide Gruppe (inkl. Gäscht). Bi nume einem Teilnehmer: 100 %. Wer d K.-o.-Rundi erreicht, bechunnt de höchschte Gruppewert vo de Chlass plus 1, deno no 1 Punkt pro gwunne K.-o.-Spiel. Nur Veräinsmitglieder (Einzel).", "internalStatsAbsoluteRank": "Rangliste Gsamtwertig", - "internalStatsAverageRank": "Rangliste Durchschnitt (pro Turnier)", - "internalStatsPoints": "Summe", - "internalStatsAvgPoints": "Ø", "internalStatsEmpty": "Kei uswertbari Date im gwählte Ziitruum.", "numberOfTables": "Aazahl Tisch", - "table": "Tisch", - "playerOne": "Spieler 1", - "playerTwo": "Spieler 2", "groupsLabel": "Gruppe", - "knockoutLabel": "KO", "distributeTables": "Freii Tisch verteile", "distributeTablesResult": "Tischverteilig", "noFreeTables": "Kei freie Tisch verfüegbar.", @@ -329,15 +198,11 @@ "missingDataPDFTitleTop3": "Fehlendi Date – Top 3 Minimeisterschaft", "missingDataPDFSubtitleTop3": "Fehlendi Date vo de erschte 3 (markiert mit ____) bitte nochfroge und do notiere.", "address": "Adrässe", - "phone": "Telefon", - "generatingPDF": "PDF wird erstellt...", "page": "Siite", + "doublesTournamentHint": "Schaltet alle vorhandenen Klassen auf Doppel und legt neue Klassen standardmässig als Doppel an.", "statusOpen": "Offe", - "statusLive": "Live", - "statusFinished": "Fertig", + "maxGroupSize": "Maximale Gruppengrösse", "dataNotRecorded": "No nid erfasst", - "resultsRanking": "Rangliste", - "newSetPlaceholder": "Satz", "finishMatch": "Abschliessen", "correctMatch": "Korrigiere", "markMatchLive": "Als laufend markiere", @@ -345,28 +210,56 @@ "stageConfigTitle": "Zwüscherunde & Endrunde", "stageConfigLoading": "Lade Rundenkonfiguration …", "stageConfigIntro": "D'Zwüscherunde isch optional. Wenn du sie aktiviersch, git's nacher immer e Endrunde. E KO-Endrunde wird als eis einzelnes Feld erzeugt.", + "stageConfigCurrentSetup": "Aktuelli Struktur", + "stageFlowWithIntermediate": "Vorrundi -> Zwüscherundi ({stage2}) -> Endrundi ({final})", + "stageFlowDirectFinal": "Vorrundi -> Endrundi ({final})", + "stageStep1Title": "Zwüscherundi festlege", + "stageStep1Description": "Entscheid zerscht, ob nach dr Vorrundi no e zusätzlechi Rundi gspielt werde söll.", + "stageStep2Description": "Leg fescht, wie d Zwüscherundi uusgseh söll und wie viu Gruppe sie brucht.", + "stageFinalDescription": "Leg fescht, ob d Endrundi als Gruppe oder direkt als K.-o.-Fäld gspielt wird.", "useIntermediateStage": "Zwüscherunde verwände", "intermediateRound": "Zwüscherunde (Runde 2)", - "finalRound": "Endrunde", "playThirdPlace": "Um Platz 3 spiele", - "roundMode": "Modus", "roundGroupCount": "Aazahl Gruppe", "promotionRule12": "Wiitercho: Vorrunde → Zwüscherunde (1→2)", "promotionRuleFinal": "Wiitercho: Runde {from} → Runde {to}", + "promotionRuleDescription12": "Da legsch fescht, weli Plätz us jedere Vorrundegruppe i d Zwüscherundi chömed.", + "promotionRuleDescriptionFinalKnockout": "Da legsch fescht, weli Plätz us dr vorherige Rundi is K.-o.-Fäld chömed.", + "promotionRuleDescriptionFinalGroups": "Da legsch fescht, weli Plätz us dr vorherige Rundi i d Gruppe vo dr Endrundi chömed.", + "poolRuleLabel": "Regle {number}", + "poolRuleSummary": "Plätz {places} gönd i {target}", + "poolRulePreview": "Us jedere Gruppe gönd Platz {places} wiiter i {target}.", + "poolRulePlacesLabel": "Weli Plätz chömed wiiter?", + "poolRulePlacesHelp": "Bispiel: 1 oder 1,2", + "poolRuleTargetLabel": "Wohi gönd die Plätz?", + "poolRuleQuickExamples": "Schnällbispiel:", + "targetGroupsLabel": "{count} Gruppe", + "poolRuleTargetKnockout": "s K.-o.-Fäld", + "poolRuleTargetGroupsDetailed": "{count} Zielgruppe", "addPoolRule": "Pool-Regle hinzufüege", "noPoolRulesYet12": "No kei Regle. Biispil: Plätz 1 und 2 -> oberi Runde-2-Gruppe.", "noPoolRulesYetFinal": "No kei Regle. Biispil: Plätz 1 und 2 -> Endrunde.", "placesFromEachGroup": "Plätz us jeder Gruppe (z. B. 1,2)", - "target": "Ziel", "targetGroupCount": "Ziel-Gruppenaazahl", "saveRounds": "Runde speichere", "createFinalFromPreliminary": "Endrunde us Vorrunde erstelle", "createIntermediateFromPreliminary": "Zwüscherunde us Vorrunde erstelle", "createFinalFromIntermediate": "Endrunde us Zwüscherunde erstelle", + "transferQualifiedToFinalFromPreliminary": "Qualifizierti Spieler direkt i d Endrundi übernäh", + "transferQualifiedToIntermediate": "Qualifizierti Spieler i d Zwüscherundi übernäh", + "transferQualifiedToFinalFromIntermediate": "Qualifizierti Spieler i d Endrundi übernäh", + "transferQualifiedToFinalFromPreliminaryDesc": "Brucht d Regle Vorrundi -> Endrundi und erstellt det direkt d qualifizierti Spieler.", + "transferQualifiedToIntermediateDesc": "Brucht d Regle Vorrundi -> Zwüscherundi und übernimmt d qualifizierti Spieler.", + "transferQualifiedToFinalFromIntermediateDesc": "Brucht d Regle Zwüscherundi -> Endrundi und übernimmt d qualifizierti Spieler.", + "stageActionsTitle": "Nächsti Aktione", + "stageActionsDescription": "Die Schritt übernähmed qualifizierti Spieler i d nöchsti Rundi.", + "stageActionRun": "Jetzt uusfüehre", + "stageActionMissingRulesHint": "Leg zerscht mindestens eini Witercho-Regle aa, bevor du Spieler i d nöchsti Rundi übernimmst.", "stageConfigMissingIds": "Cha nid speichere: Vereins- oder Turnier-ID fählt.", "stageConfigLoadError": "Fehler bim Lade vo de Rundenkonfiguration.", "stageConfigBadServerResponse": "Ungültigi Server-Antwort.", "stageCreated": "Runde {round} isch erstellt worde.", + "stageParticipantsTransferred": "Qualifizierti Spieler sind i {round} überno worde.", "atLeastOnePoolRule": "Bitte mindestens e Pool-Regle für {label} aalege (z. B. Plätz 1,2).", "enterMiniLocation": "Bitte gib en Ort ii.", "selectTournamentFirst": "Bitte wähl zerscht es Turnier us.", @@ -388,12 +281,12 @@ "minimumParticipantsForPairings": "Mindestens 2 Teilnehmer für Paarige nötig.", "deleteExistingPairingsConfirm": "Bestehendi Paarige wärde glöscht. Wiitermache?", "pairingsCreatedWithErrors": "{successCount} Paarige erstellt, {errorCount} Fehler.", + "outOfCompetition": "Spieler aus A ausser Konkurrenz", "participantsNeedClassAssignment": "{count} Teilnehmendi sind no keire Klass zuegordnet. Die sötted zerscht zueteilt werde.", "autoAssignableParticipantsHint": "{count} devo chönd automatisch zuegordnet werde.", "assignmentReviewTitle": "{count} Teilnehmendi bruuched e Uuswahl:", "conflictSuggestionLabel": "Vorschläg:", "workspaceProblemsTitle": "{count} offeni Pünkt", - "problemConfigTitle": "Konfiguration unvollständig", "problemConfigDescription": "Prüef Datum, Name und Gwünnsätz.", "problemUnassignedTitle": "{count} Teilnehmendi ohni Klass", "problemUnassignedDescription": "Die Teilnehmendi bruuched no e manuelli Klassenzuewisig.", @@ -403,8 +296,6 @@ "problemDoublesTitle": "{count} offeni Doppelpartner", "problemDoublesDescription": "Ei oder meh Doppelklasse bruuched no Partnerzuewisige.", "problemDoublesAutoDescription": "D offeni Doppelklass cha direkt automatisch paarlet werde.", - "doublesTournament": "Doppel-Turnier", - "doublesTournamentHint": "Schaltet alle vorhandenen Klassen auf Doppel und legt neue Klassen standardmässig als Doppel an.", "problemGroupsMissingTitle": "Gruppe no nid erstellt", "problemGroupsMissingDescription": "Für s Gruppeturnier muesed zerscht Gruppe aagleit werde.", "problemGroupMatchesTitle": "Gruppespiel no nid erzeugt", @@ -431,16 +322,13 @@ "participantConflicts": "Konflikt", "unpairedDoubles": "Doppel ohni Partner", "noEligibleClass": "Kei passendi Klass gfunde.", - "eligibleClassesHint": "Passt zu: {classes}", "warningClassMissing": "Klass nid gfunde", "warningGenderMismatch": "Gschlächt passt nid zur Klass", "warningGenderMissing": "Gschlächt fehlt für die Klass", "warningBirthDateMissing": "Geburtsdatum fehlt für die Klass", "warningTooOldForClass": "Z'alt für die Klass", "warningTooYoungForClass": "Z'jung für die Klass", - "warningMissingPairing": "Doppelpartner fehlt", "statusConfigReady": "Konfiguration parat", - "statusConfigIncomplete": "Konfiguration unvollständig", "statusParticipantsUnassigned": "{count} ohni Klass", "statusParticipantsConflicts": "{count} Teilnehmendi mit Konflikt", "statusParticipantsReady": "{count} Teilnehmendi ohni Konflikt", @@ -450,682 +338,12 @@ "statusGroupsRunning": "Gruppenphase lauft", "statusKnockoutReady": "K.-o.-Rundi startklar", "statusKnockoutRunning": "K.-o.-Rundi lauft", - "statusTournamentCompleted": "Turnier abgeschlossen", "statusActionAssign": "Zuewise", "statusActionReview": "Prüefe", "statusActionPair": "Paar bilde", "statusActionCreate": "Erstelle", "statusActionGenerate": "Erzüüge", - "statusActionStart": "Starte", - "stageConfigCurrentSetup": "Aktuelli Struktur", - "stageFlowWithIntermediate": "Vorrundi -> Zwüscherundi ({stage2}) -> Endrundi ({final})", - "stageFlowDirectFinal": "Vorrundi -> Endrundi ({final})", - "stageStep1": "Schritt 1", - "stageStep2": "Schritt 2", - "stageStep3": "Schritt 3", - "stageStep1Title": "Zwüscherundi festlege", - "stageStep1Description": "Entscheid zerscht, ob nach dr Vorrundi no e zusätzlechi Rundi gspielt werde söll.", - "stageStep2Description": "Leg fescht, wie d Zwüscherundi uusgseh söll und wie viu Gruppe sie brucht.", - "stageFinalDescription": "Leg fescht, ob d Endrundi als Gruppe oder direkt als K.-o.-Fäld gspielt wird.", - "promotionRuleDescription12": "Da legsch fescht, weli Plätz us jedere Vorrundegruppe i d Zwüscherundi chömed.", - "promotionRuleDescriptionFinalKnockout": "Da legsch fescht, weli Plätz us dr vorherige Rundi is K.-o.-Fäld chömed.", - "promotionRuleDescriptionFinalGroups": "Da legsch fescht, weli Plätz us dr vorherige Rundi i d Gruppe vo dr Endrundi chömed.", - "poolRuleLabel": "Regle {number}", - "poolRuleSummary": "Plätz {places} gönd i {target}", - "poolRulePlacesLabel": "Weli Plätz chömed wiiter?", - "poolRulePlacesHelp": "Bispiel: 1 oder 1,2", - "poolRuleTargetLabel": "Wohi gönd die Plätz?", - "poolRuleQuickExamples": "Schnällbispiel:", - "targetGroupsLabel": "{count} Gruppe", - "transferQualifiedToFinalFromPreliminary": "Qualifizierti Spieler direkt i d Endrundi übernäh", - "transferQualifiedToIntermediate": "Qualifizierti Spieler i d Zwüscherundi übernäh", - "transferQualifiedToFinalFromIntermediate": "Qualifizierti Spieler i d Endrundi übernäh", - "stageParticipantsTransferred": "Qualifizierti Spieler sind i {round} überno worde.", - "transferQualifiedToFinalFromPreliminaryDesc": "Brucht d Regle Vorrundi -> Endrundi und erstellt det direkt d qualifizierti Spieler.", - "transferQualifiedToIntermediateDesc": "Brucht d Regle Vorrundi -> Zwüscherundi und übernimmt d qualifizierti Spieler.", - "transferQualifiedToFinalFromIntermediateDesc": "Brucht d Regle Zwüscherundi -> Endrundi und übernimmt d qualifizierti Spieler.", - "stageActionsTitle": "Nächsti Aktione", - "stageActionsDescription": "Die Schritt übernähmed qualifizierti Spieler i d nöchsti Rundi.", - "stageActionRun": "Jetzt uusfüehre", - "stageActionMissingRulesHint": "Leg zerscht mindestens eini Witercho-Regle aa, bevor du Spieler i d nöchsti Rundi übernimmst.", - "poolRulePreview": "Us jedere Gruppe gönd Platz {places} wiiter i {target}.", - "poolRuleTargetKnockout": "s K.-o.-Fäld", - "poolRuleTargetGroupsDetailed": "{count} Zielgruppe", - "stageValidationTitle": "Konfiguration prüfen", - "stageValidationDescription": "Diese Punkte solltest du vor dem Speichern oder Übernehmen der nächsten Runde korrigieren.", - "stageValidationGroupCountRequired": "Bitte mindestens eine gültige Gruppenanzahl festlegen.", - "stageValidationNoRules": "Für {stage} ist noch keine Weiterkommens-Regel angelegt.", - "stageValidationRulePlacesRequired": "Trage mindestens einen Platz ein, der weiterkommen soll.", - "stageValidationRulePlacesInvalid": "Die Platzangabe ist ungültig. Erlaubt sind nur positive ganze Zahlen wie 1 oder 1,2.", - "stageValidationRulePlacesDuplicate": "Eine Regel darf denselben Platz nicht mehrfach enthalten.", - "stageValidationRulesOverlap": "Platz {place} ist doppelt vergeben, nämlich in Regel {first} und Regel {second}.", - "stageValidationTargetGroupsRequired": "Bitte eine gültige Anzahl von Zielgruppen angeben.", - "stageValidationKnockoutTargetOnly": "Bei einer K.-o.-Endrunde ist hier nur das K.-o.-Feld als Ziel erlaubt.", - "stageValidationSaveBlocked": "Bitte zuerst die markierten Konfigurationsfehler korrigieren.", - "stageValidationSuggestion": "Vorschlag: {value}", - "stageValidationRulePlacesGap": "Die Platzangabe hat Lücken. Meist ist eine zusammenhängende Reihenfolge wie 1,2 oder 1,2,3 gemeint.", - "stageValidationTargetGroupCountMismatch": "Die Anzahl der Zielgruppen muss zur Zielrunde passen. Erwartet: {expected}.", - "stageValidationTargetTypeMismatch": "Das Ziel dieser Regel muss zur Zielrunde passen. Erwartet: {target}.", - "stageValidationApplyFix": "Übernehmen", - "stageValidationApplyTargetTypeFix": "Auf {target} umstellen", - "stageValidationApplyTargetGroupFix": "Auf {count} Zielgruppen setzen", - "ruleStatusOk": "Passt", - "ruleStatusReview": "Prüfen", - "ruleStatusBlocked": "Blockiert", - "ruleStatusOkDescription": "Diese Regel passt zur aktuellen Zielrunde und kann so verwendet werden.", - "stageFlowHealthOk": "Rundenlogik passt", - "stageFlowHealthOkDescription": "Die Übergänge zwischen den Runden sind vollständig konfiguriert und aktuell stimmig.", - "stageFlowHealthIncomplete": "Rundenlogik unvollständig", - "stageFlowHealthMissingRules": "Mindestens ein Übergang hat noch keine vollständige Weiterkommens-Regel.", - "stageFlowHealthReviewDescription": "Die Rundenlogik ist grundsätzlich nutzbar, sollte aber wegen offener Hinweise noch geprüft werden.", - "stageFlowHealthBlocked": "Rundenlogik widersprüchlich", - "stageFlowHealthBlockedDescription": "Mindestens eine Regel passt aktuell nicht zur Zielrunde oder enthält blockierende Konfigurationsfehler.", - "stageFlowBreakdownOk": "Konfiguration passt", - "stageFlowBreakdownWarnings": "{count} Hinweis(e) offen", - "stageFlowBreakdownErrors": "{count} Fehler blockieren", - "stageFlowBreakdownMissingRule": "Noch keine vollständige Regel angelegt", - "stageFlowBreakdownActionAddRule": "Regel anlegen", - "stageFlowBreakdownActionReview": "Fehler prüfen", - "stageFlowBreakdownActionOpen": "Regel öffnen", - "stageValidationApplyAllFixes": "{count} Schnellkorrektur(en) anwenden", - "stageFlowRecommendationTitle": "Empfohlener nächster Schritt", - "stageFlowRecommendationFixes": "Die typischen Konfigurationsprobleme können direkt automatisch bereinigt werden.", - "stageFlowRecommendationMissingRule": "Für {label} fehlt noch eine vollständige Regel. Lege am besten damit los.", - "stageFlowRecommendationError": "Prüfe zuerst den ersten blockierenden Fehler in der Rundenlogik.", - "stageFlowRecommendationWarnings": "Es gibt noch Hinweise, die du vor dem Speichern prüfen solltest.", - "stageFlowRecommendationSave": "Die Rundenlogik ist stimmig. Du kannst die Konfiguration jetzt speichern.", - "stageFlowPreviewMissing": "Noch keine Regel konfiguriert.", - "stageFlowPreviewRule": "Plätze {places} gehen in {target}", - "stageValidationKnockoutNeedsTwoPlayers": "Für ein K.-o.-Feld werden mindestens 2 Qualifizierte benötigt.", - "stageValidationKnockoutByesLikely": "Mit voraussichtlich {count} Qualifizierten wird das K.-o.-Feld sehr wahrscheinlich Freilose enthalten.", - "stageValidationNotEnoughQualifiersForGroups": "Mit nur {count} Qualifizierten für {groups} Zielgruppen würden leere Gruppen entstehen.", - "stageValidationThinGroupsLikely": "Mit {count} Qualifizierten auf {groups} Zielgruppen werden die Gruppen vermutlich sehr klein.", - "stageFlowPreviewRuleWithCount": "{base} (voraussichtlich {count} Qualifizierte)", - "stageFlowReadinessNoGroups": "Noch keine passenden Gruppen vorhanden", - "stageFlowReadinessIncompleteGroups": "{count} Gruppe(n) sind noch nicht vollständig entschieden", - "stageFlowReadinessReady": "Übergang ist fachlich startklar", - "stageFlowQualifiedPreviewTitle": "Aktuell qualifiziert", - "stageFlowQualifiedPreviewEntry": "G{group} · Platz {position} · {name}", - "maxGroupSize": "Maximale Gruppengrösse", - "outOfCompetition": "Spieler aus A ausser Konkurrenz" - }, - "members": { - "title": "Mitglieder", - "memberInfo": "Mitglieder-Info", - "activeMembers": "Aktive Mitglieder", - "testMembers": "Testmitglieder", - "inactiveMembers": "Inaktive Mitglieder", - "generatePhoneList": "Telefonliste generieren", - "groupPhotoCrop": "Gruppenfoto verarbeiten", - "groupPhotoCropSaved": "Mitgliedsfoto aus Gruppenfoto gespeichert.", - "onlyActiveMembers": "Es werden nur aktive Mitglieder ausgegeben", - "updateRatings": "TTR/QTTR von myTischtennis aktualisieren", - "updating": "Aktualisiere...", - "transferMembers": "Mitglieder übertragen", - "newMember": "Neues Mitglied", - "editMember": "Mitglied bearbeiten", - "createNewMember": "Neues Mitglied anlegen", - "firstName": "Vorname", - "lastName": "Nachname", - "street": "Strasse", - "postalCode": "PLZ", - "city": "Ort", - "birthdate": "Geburtsdatum", - "phones": "Telefonnummern", - "emails": "E-Mail-Adressen", - "addPhone": "Telefonnummer hinzufügen", - "addEmail": "E-Mail-Adresse hinzufügen", - "phoneNumber": "Telefonnummer", - "emailAddress": "E-Mail-Adresse", - "parent": "Elternteil", - "parentName": "Name (z.B. Mutter, Vater)", - "primary": "Primär", - "gender": "Geschlecht", - "genderUnknown": "Unbekannt", - "genderMale": "Männlich", - "genderFemale": "Weiblich", - "genderDiverse": "Divers", - "picsInInternetAllowed": "Pics in Internet erlaubt", - "testMembership": "Testmitgliedschaft", - "memberFormHandedOver": "Mitgliedsformular ausgehändigt", - "adultReleaseApproved": "Freigabe Erwachsene", - "adultReserveApproved": "Ersatz bei Erwachsenen", - "wantsToPlay": "Will spiele", - "trainingGroups": "Trainingsgruppen", - "noGroupsAssigned": "Keine Gruppen zugeordnet", - "noGroupsAvailable": "Keine Gruppen verfügbar", - "addGroup": "Gruppe hinzufügen...", - "remove": "Entfernen", - "image": "Bild", - "selectFile": "Datei auswählen", - "camera": "Kamera", - "imagePreview": "Vorschau des Mitgliedsbildes", - "change": "Ändern", - "create": "Anlegen", - "clearFields": "Felder leeren", - "showInactiveMembers": "Inaktive Mitglieder anzeigen", - "showTrainingParticipationsColumn": "Spalte „Trainingsteilnahmen“ anzeigen", - "ageGroup": "Altersklasse", - "ttSeasonFilter": "Saison (Stichtag)", - "ttSeasonCurrentTag": "aktuell", - "ttSeasonNextTag": "kommend", - "ttStichtagHint": "Stichtag 1.1. (DTTB). Jungen: nur J-Klassen. Mädchen: J und M möglich.", - "lastTrainingFilter": "Letztes Training", - "lastTrainingFilterHasDate": "Mit erfasstem Datum", - "lastTrainingFilterNoDate": "Ohne letztes Training", - "lastTrainingFilterNotInTraining": "„Nicht mehr im Training“", - "lastTrainingFilterHint": "AK-Spalte: laufende und nächste Saison. Weitere Details (letztes Training, Teilnahmen) auch beim Überfahren der Zeile.", - "rowTooltipSeparator": "·", - "ttAgeClassCol": "AK (TT)", - "ttAdult": "Erwachsene (kein Jugend nach Stichtag)", - "ttFilterGroupJ": "Mädchen & Jungen (gemischt)", - "ttFilterGroupM": "Mädchen (nur weiblich)", - "adults": "Erwachsene (18+)", - "j19": "J19", - "j17": "J17 (17 und jünger)", - "j15": "J15", - "j13": "J13", - "j11": "J11", - "j9": "J9", - "m19": "M19", - "m15": "M15", - "m13": "M13", - "m11": "M11", - "m9": "M9", - "clearFilters": "Filter zurücksetzen", - "imageInternet": "Bild (Inet?)", - "testMember": "Testm.", - "name": "Name, Vorname", - "ttrQttr": "TTR / QTTR", - "address": "Adresse", - "active": "Aktiv", - "actions": "Aktionen", - "phoneNumberShort": "Telefon-Nr.", - "emailAddressShort": "Email-Adresse", - "trainingParticipations": "Trainingsteilnahmen", - "memberImage": "Mitgliedsbild", - "inactive": "inaktiv", - "sixOrMoreParticipations": "6 oder mehr Trainingsteilnahmen", - "threeOrMoreParticipations": "3 oder mehr Trainingsteilnahmen", - "noTestMembership": "Keine Testmitgliedschaft mehr", - "formHandedOver": "Mitgliedsformular ausgehändigt", - "deactivateMember": "Mitglied deaktivieren", - "notes": "Notizen", - "exercises": "Übungen", - "memberImages": "Mitgliedsbilder", - "testMembershipRemoved": "Testmitgliedschaft entfernt.", - "errorRemovingTestMembership": "Fehler beim Entfernen der Testmitgliedschaft.", - "formMarkedAsHandedOver": "Mitgliedsformular als ausgehändigt markiert.", - "errorMarkingForm": "Fehler beim Markieren des Formulars.", - "deactivateMemberTitle": "Mitglied deaktivieren", - "deactivateMemberConfirm": "Möchten Sie \"{name}\" wirklich deaktivieren?", - "memberDeactivated": "Mitglied deaktiviert", - "errorDeactivatingMember": "Fehler beim Deaktivieren des Mitglieds", - "errorSavingMember": "Fehler beim Speichern des Mitglieds", - "errorAddingToGroup": "Fehler beim Hinzufügen zur Gruppe", - "errorRemovingFromGroup": "Fehler beim Entfernen aus der Gruppe", - "imageUpdated": "Bild wurde aktualisiert", - "errorRotatingImage": "Fehler beim Drehen des Bildes", - "imageDeleted": "Bild wurde gelöscht.", - "errorDeletingImage": "Bild konnte nicht gelöscht werden", - "primaryImageUpdated": "Hauptbild wurde aktualisiert.", - "errorSettingPrimaryImage": "Hauptbild konnte nicht gesetzt werden", - "errorUploadingImage": "Bild konnte nicht hochgeladen werden", - "errorLoadingImage": "Fehler beim Laden des Bildes", - "phoneList": "Telefonliste.pdf", - "errorLoadingTrainingParticipations": "Fehler beim Laden der Trainingsteilnahmen", - "errorUpdatingRatings": "Fehler beim Aktualisieren der TTR/QTTR-Werte", - "errorTransfer": "Fehler bei der Übertragung", - "subtitle": "Mitglieder suchen, filtern und direkt bearbeiten.", - "closeEditor": "Editor schliessen", - "visibleMembers": "Sichtbare Mitglieder", - "search": "Suche", - "searchPlaceholder": "Name, Ort, Telefon oder E-Mail suchen", - "memberScope": "Mitgliedsbereich", - "scopeAll": "Alle", - "scopeActive": "Aktiv", - "scopeTest": "Probe", - "scopeActiveTest": "Aktiv + Probe", - "scopeNeedsForm": "Formular ungeprüft", - "scopeActiveDataIncomplete": "Aktiv + Daten unvollständig", - "scopeDataIncomplete": "Daten unvollständig", - "scopeInactive": "Inaktiv", - "searchAndFilter": "Suche und Filter", - "bulkActions": "Sammelaktionen", - "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.", - "editorAssignTrainingGroupHint": "Bitte mindestens eine Trainingsgruppe zuordnen.", - "editorRecommendedEntry": "Empfohlener Eintrag", - "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", - "sortQttr": "QTTR-Wert", - "ageRange": "Alter von - bis", - "ageFromPlaceholder": "von", - "ageToPlaceholder": "bis", - "age": "Alter", - "dataQuality": "Datenqualität", - "dataQualityComplete": "Daten vollständig", - "dataIssueBirthdate": "Geburtsdatum fehlt", - "dataIssuePhone": "Telefon fehlt", - "dataIssueEmail": "E-Mail fehlt", - "dataIssueAddress": "Adresse fehlt", - "dataIssueStreet": "Strasse fehlt", - "dataIssuePostalCode": "PLZ fehlt", - "dataIssueCity": "Ort fehlt", - "dataIssueGender": "Geschlecht ungeklärt", - "dataIssueTrainingGroup": "Trainingsgruppe fehlt", - "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", - "taskAssignTrainingGroup": "Trainingsgruppe zuordnen", - "taskCheckClickTt": "Click-TT-Spielberechtigung prüfen", - "taskActionVerify": "Prüfen", - "taskActionMarkRegular": "Regulär setzen", - "taskActionReview": "Öffnen", - "taskActionRequest": "Anfragen", - "toggleSortDirection": "Sortierrichtung wechseln", - "showTtrHistory": "TTR-Historie anzeigen", - "missingTtrHistoryId": "Keine myTischtennis-ID hinterlegt", - "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." - }, - "orders": { - "title": "Bestellige", - "memberTitle": "Bestellige: {name}", - "globalTitle": "Bestellige aller Vereine", - "globalSubtitle": "Da chasch alli Bestellige vereinsübergreifend aluege und verwalte.", - "loading": "Bestellige werde glade...", - "errorLoading": "Bestellige hend nöd chöne glade werde.", - "errorSaving": "Bestellig het nöd chöne gspeicheret werde.", - "searchPlaceholder": "Nach Verein, Mitgliid oder Artikel sueche", - "filterAllStatuses": "Alli Status", - "filterAllClubs": "Alli Vereine", - "item": "Was", - "itemPlaceholder": "z. B. Trikot, Hoodie oder Schlägerhülle", - "status": "Status", - "statusRequested": "gwünscht", - "statusOrdered": "bstellt", - "statusArrived": "Artikel achoo", - "statusHandedOver": "Artikel usghändigt", - "cost": "Chöschte", - "paid": "Bezahlt", - "open": "No offe", - "history": "Verlauf", - "orderDate": "Erfasst am", - "statusDate": "Letschti Änderig", - "addOrder": "Bestellig aalege", - "dateAutoHint": "S Datum wird automatisch gsetzt und jedi Änderig mit em Datum protokolliert.", - "noOrdersMember": "Für das Mitgliid git's no kei Bestellige.", - "noOrdersGlobal": "Aktuell git's kei Bestellige.", - "club": "Verein", - "member": "Mitgliid" - }, - "diary": { - "title": "Trainingstagebuch", - "date": "Datum", - "noEntries": "Keine Einträge", - "deleteDate": "Datum löschen", - "createNew": "Neu anlegen", - "quickCreate": "Schnellanlegen", - "quickCreateNoSlot": "Kein freier Trainingstermin gefunden (gemäss Gruppenzeiten, ein Jahr voraus).", - "quickCreateFailed": "Der Trainingstag konnte nicht angelegt werden.", - "gallery": "Mitglieder-Galerie", - "galleryCreating": "Galerie wird erstellt…", - "selectTrainingGroup": "Trainingsgruppe auswählen", - "selectTrainingGroupPlaceholder": "Bitte wählen...", - "suggestion": "Vorschlag", - "nextAppointment": "Nächster Termin", - "applySuggestion": "Vorschlag übernehmen", - "skipSuggestion": "Ohne Vorschlag fortfahren", - "createNewDate": "Neues Datum anlegen", - "activeTrainingDay": "Aktiver Trainingstag", - "trainingDaySection": "Trainingstag", - "trainingDayChecklist": "Abschlusscheck", - "trainingStart": "Trainingsbeginn", - "trainingEnd": "Trainingsende", - "trainingWindow": "Trainingsfenster", - "trainingWindowUnset": "Noch nicht gesetzt", - "groupsLabel": "Gruppen", - "groupsSection": "Gruppen", - "createDate": "Datum anlegen", - "editTrainingTimes": "Trainingszeiten bearbeiten", - "updateTimes": "Zeiten aktualisieren", - "groupManagement": "Gruppenverwaltung", - "createGroups": "Gruppen erstellen", - "trainingPlan": "Trainingsplan", - "planActivitiesCount": "Plan-Aktivitäten", - "timeblocksCount": "Zeitblöcke", - "planEmptyState": "Im Trainingsplan ist noch nichts eingetragen.", - "planAddHint": "Neue Plan-Elemente fügst du über die Aktionen oben hinzu.", - "startTime": "Startzeit", - "group": "Gruppe...", - "timeblock": "Zeitblock", - "assignParticipants": "Teilnehmer zuordnen", - "addTimeblock": "Zeitblock", - "activities": "Aktivitäten", - "freeActivities": "Freie Aktivitäten", - "noFreeActivitiesYet": "Noch keine freien Aktivitäten erfasst.", - "addActivity": "Aktivität hinzufügen", - "bookAccident": "Unfall buchen", - "activity": "Aktivität", - "duration": "Dauer", - "activityImage": "Aktivitätsbild", - "activityDrawing": "Aktivitätszeichnung", - "today": "Heute", - "existingGroups": "Vorhandene Gruppen", - "leader": "Leiter", - "deleteGroup": "Gruppe löschen", - "numberOfGroups": "Anzahl Gruppen", - "addGroup": "Gruppe hinzufügen", - "activityOrTimeblock": "Aktivität / Zeitblock", - "durationMinutes": "Dauer (Min)", - "standardActivities": "Standard-Aktivitäten", - "standardDurationShort": "Min", - "standardActivityAddError": "Standard-Aktivität konnte nicht hinzugefügt werden.", - "addGroupActivity": "Gruppen-Aktivität hinzufügen", - "addGroupButton": "+ Gruppe", - "all": "Alle", - "selectGroup": "Gruppe auswählen...", - "activityPlaceholder": "Aktivität", - "assignShort": "Zuordnen", - "statusReadyShort": "Bereit", - "statusOpenShort": "Offen", - "openPlanItemsLabel": "Plan-Status", - "openPlanItems": "{count} offen", - "unassignedPlanItems": "{count} offen", - "durationExampleLong": "z.B. 2x7 oder 3*5", - "durationExampleShort": "z.B. 2x7", - "showImage": "Bild/Zeichnung anzeigen", - "participants": "Teilnehmer", - "excusedParticipants": "Entschuldigt", - "availableParticipants": "Anwesend möglich", - "activeMembers": "Aktive Mitglieder", - "searchParticipants": "Teilnehmer suchen", - "filterAll": "Alle", - "filterPresent": "Anwesend", - "filterAbsent": "Abwesend", - "filterExcused": "Entschuldigt", - "filterTest": "Probe", - "participantStatusNone": "Kein Status", - "participantStatusExcused": "Entschuldigt", - "participantStatusCancelled": "Abgesagt", - "quickAdd": "+ Schnell hinzufügen", - "selectTags": "Tags auswählen", - "createDrawing": "Übungszeichnung erstellen", - "overallActivity": "Gesamt-Aktivität", - "editActivity": "Aktivität bearbeiten", - "editGroupActivity": "Gruppen-Aktivität bearbeiten", - "assignParticipantsForGroupActivity": "Teilnehmer für Gruppen-Aktivität zuordnen", - "delete": "Löschen", - "min": "Min", - "errorLoadingPredefinedActivities": "Fehler beim Laden der vordefinierten Aktivitäten", - "selectParticipantAndNote": "Bitte wählen Sie einen Teilnehmer aus und geben Sie einen Notiztext ein.", - "selectGroupAndActivity": "Bitte wählen Sie eine Gruppe und geben Sie eine Aktivität ein.", - "dateCannotBeDeleted": "Datum kann nicht gelöscht werden", - "dateCannotBeDeletedDetails": "Es sind noch Inhalte vorhanden (Trainingplan, Teilnehmer, Aktivitäten, Unfälle oder Notizen).", - "confirmDelete": "Löschen bestätigen", - "confirmDeleteDate": "Möchten Sie dieses Datum wirklich löschen?", - "confirmDeleteDateDetails": "Alle zugehörigen Daten werden ebenfalls gelöscht.", - "noParticipants": "Keine Teilnehmer für diesen Trainingstag vorhanden.", - "mustCreateAtLeastTwoGroups": "Beim ersten Erstellen müssen mindestens 2 Gruppen erstellt werden!", - "oneGroupAdded": "1 Gruppe wurde erfolgreich hinzugefügt!", - "groupsCreated": "{count} Gruppen wurden erfolgreich erstellt!", - "errorCreatingGroups": "Fehler beim Erstellen der Gruppen", - "confirmDeleteGroup": "Möchten Sie die Gruppe \"{name}\" wirklich löschen?", - "groupDeletedSuccessfully": "Gruppe wurde erfolgreich gelöscht!", - "errorDeletingGroup": "Fehler beim Löschen der Gruppe", - "errorCreatingActivity": "Fehler beim Erstellen der Aktivität", - "trainingPlanAsPDF": "Trainingsplan als PDF", - "trainingPlanPdfShort": "Ablaufplan als PDF", - "trainingDayAsPDF": "Trainingstag als PDF herunterladen", - "trainingDayAsPDFShort": "Trainingstag als PDF", - "trainingDaySummaryPdfShort": "Teilnehmerübersicht als PDF", - "minutes": "Minuten", - "formHandedOver": "Mitgliedsformular ausgehändigt", - "errorOccurred": "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.", - "trainingTimesUpdated": "Trainingszeiten erfolgreich aktualisiert.", - "noActiveTrainingDay": "Kein Trainingstag ausgewählt.", - "statusReady": "Zeiten und Trainingsplan sind gepflegt.", - "statusEmpty": "Dieser Trainingstag ist noch leer.", - "statusInProgress": "Dieser Trainingstag ist teilweise vorbereitet.", - "formMarkedAsHandedOver": "Mitgliedsformular als ausgehändigt markiert", - "errorMarkingForm": "Fehler beim Markieren des Mitgliedsformulars", - "dateNoLongerCurrent": "Ausgewähltes Datum war nicht mehr aktuell. Bitte erneut versuchen.", - "activityRequired": "Bitte geben Sie eine Aktivität ein.", - "activityNotFound": "Aktivität nicht gefunden. Bitte wählen Sie eine aus der Liste aus." - }, - "trainingStats": { - "title": "Trainings-Statistik", - "activeMembers": "Aktive Mitglieder", - "averageParticipationCurrentMonth": "Durchschnittliche Teilnahme (aktueller Monat)", - "averageParticipationLastMonth": "Durchschnittliche Teilnahme (letzter Monat)", - "averageParticipationQuarter": "Durchschnittliche Teilnahme (Quartal)", - "averageParticipationHalfYear": "Durchschnittliche Teilnahme (Halbjahr)", - "averageParticipationYear": "Durchschnittliche Teilnahme (Jahr)", - "trainingDays": "Trainingstage (letzte 12 Monate)", - "trainingDayFilter": "Trainingstag", - "allTrainingDays": "Alle Trainingstage", - "memberParticipations": "Mitglieder-Teilnahmen", - "date": "Datum", - "weekday": "Wochentag", - "participants": "Teilnehmer", - "attendingMembers": "Anwesende Mitglieder", - "noParticipants": "Keine Teilnehmer", - "name": "Name", - "ttr": "TTR", - "qttr": "QTTR", - "birthdate": "Geburtsdatum", - "participations12Months": "Teilnahmen (12 Monate)", - "participations3Months": "Teilnahmen (3 Monate)", - "participationsTotal": "Teilnahmen (Gesamt)", - "lastTraining": "Letztes Training", - "actions": "Aktionen", - "showDetails": "Details anzeigen", - "panelSummary": "Kennzahlen (Filter)", - "panelMonthlyTrend": "Monatlicher Verlauf", - "panelWeekdayStats": "Trainingstage nach Wochentag", - "panelMemberStructure": "Mitgliederstruktur", - "panelBestDay": "Stärkster Trainingstag", - "panelGroupPerformance": "Entwicklung pro Gruppe", - "panelAgeGroups": "Anwesenheit nach Altersklasse" - }, - "courtDrawingTool": { - "title": "Tischtennis-Übungszeichnung", - "configureExercise": "Übung konfigurieren", - "stepStartPosition": "1. Startposition", - "stepStartPositionHint": "Aus welcher Aufschlagposition startet die Übung?", - "stepFirstStroke": "2. 1. Schlag", - "stepFirstStrokeHint": "Schlagseite und Rotation für den ersten Ball festlegen.", - "stepTarget": "3. Ziel", - "stepTargetHint": "Zielzone für den ersten Schlag auswählen.", - "stepAdditionalStrokes": "4. Folgeschläge", - "stepAdditionalStrokesHint": "Optional weitere Bälle als Liste aufbauen.", - "noAdditionalStrokes": "Noch keine Folgeschläge angelegt.", - "service": "Aufschlag:", - "serviceTitle": "Aufschlag", - "forehand": "Vorhand", - "backhand": "Rückhand", - "spin": "Schnitt:", - "underspin": "Unterschnitt", - "topspin": "Überschnitt", - "sidespin": "Seitschnitt", - "sideUnderspin": "Seitunterschnitt", - "counterSpin": "Gegenläufer", - "targetPosition": "Zielposition:", - "targetPositionLabel": "Zielposition", - "strokeSide": "Seite", - "strokeTypeLabel": "Schlagart", - "addStroke": "Schlag hinzufügen", - "preview": "Vorschau", - "previewHint": "Die Grafik erscheint, sobald der erste Schlag vollständig gesetzt ist.", - "completeFirstStroke": "1. Schlag vervollständigen", - "completeFirstStrokeHint": "Wähle Startposition, Schlagseite, Rotation und Ziel. Danach erscheint die grafische Darstellung.", - "codeLabel": "Kürzel", - "titleLabel": "Titel", - "startLeft": "links", - "startMiddle": "mitte", - "startRight": "rechts", - "strokeTypePush": "Schupf", - "strokeTypeCounter": "Konter", - "strokeTypeTopspin": "Topspin", - "strokeTypeFlip": "Flip", - "strokeTypeBlock": "Block", - "strokeTypeSmash": "Schuss", - "strokeTypeChopDefense": "Schnittabwehr", - "strokeTypeLobDefense": "Ballonabwehr", - "targetForehandLong": "Vorhand lang", - "targetMiddleLong": "Mitte lang", - "targetBackhandLong": "Rückhand lang", - "targetForehandHalfLong": "Vorhand halblang", - "targetMiddleHalfLong": "Mitte halblang", - "targetBackhandHalfLong": "Rückhand halblang", - "targetForehandShort": "Vorhand kurz", - "targetMiddleShort": "Mitte kurz", - "targetBackhandShort": "Rückhand kurz", - "toTarget": "nach" - }, - "teamManagement": { - "title": "Team-Verwaltig", - "subtitle": "Teams uswähle, Konfiguration prüefe und Ligadate a eim Ort pflege.", - "teams": "Teams", - "season": "Saison", - "seasonUnknown": "unbekannt", - "searchTeams": "Team sueche", - "filterAll": "Alle", - "filterConfigured": "Konfiguriert", - "filterNeedsAttention": "Prüefe", - "filterNoLeague": "Ohni Liga", - "createNewTeam": "Neues Team aalege", - "newTeam": "Neues Team", - "editTeam": "Team bearbeite", - "teamName": "Team-Name", - "noLeague": "Kei Spielklass", - "planningTitle": "Mannschaftsplanig", - "planningSubtitle": "Mitglieder uf geplannti Teams verteile, Riähefoug feschtlege und offeni Zuordnige aluege.", - "searchMembers": "Mitglied sueche", - "playersWantToPlay": "Wänd spiele", - "playersPoolSubtitle": "Alli aktive Mitglieder mit Spielinteresse", - "unassignedMembers": "No nid zugeordnet", - "unassignedMembersSubtitle": "Mitglieder ohni Team-Zuordnig", - "allMembersAssigned": "Alli Mitglieder sind aktuell zugeordnet.", - "addPlanningTeam": "Planigs-Team hinzuefüege", - "noMembersInPool": "Kei passende Mitglieder gfunde.", - "noPlannedLeague": "Kei geplannti Spielklass", - "selectMember": "Mitglied uswähle", - "selectTeam": "Team uswähle", - "assignMemberToTeam": "Zum Team hinzuefüege", - "markAsInterested": "Als interessiert markiere", - "autoSaved": "Automatisch gspeicheret", - "autoSaveError": "Automatischs Speichere isch fehlgschlage", - "sortFirstLast": "Sortierig: Vorname Nachname", - "sortLastFirst": "Sortierig: Nachname Vorname", - "lineupProposal": "Mannschaftsmeldung nach QTTR", - "eligibility": "Einsatz", - "eligibilityRegular": "Regulär", - "eligibilityAdultRelease": "Freigabe Erwachsene", - "eligibilityAdultReserve": "Ersatz Erwachsene", - "eligibilityAdultReleaseAndReserve": "Freigabe + Ersatz Erwachsene", - "selectedLineup": "Gemeldete Spieler", - "availableLineupMembers": "Verfügbare Spieler", - "lineupEmpty": "Noch keine Spieler für diese Mannschaft gemeldet.", - "exportLineupPdf": "Aufstellung als PDF", - "lineupPdfEmpty": "Es sind keine Spieler in der Aufstellung – PDF kann nicht erstellt werden.", - "lineupPdfFilePrefix": "Aufstellung", - "plannedLeague": "Geplante Spielklasse", - "plannedLeaguePlaceholder": "z. B. Bezirksliga, nach nächster Meldung …", - "plannedLeagueHint": "Optional. Unabhängig von der gemeldeten Liga (MyTischtennis).", - "lineupSaveError": "Mannschaftsmeldung konnte nicht gespeichert werden.", - "lineupValidationTooLargeGap": "{higher} hat mehr als 30 QTTR Punkte Vorsprung vor {lower}. Diese Reihenfolge bitte korrigieren.", - "firstHalf": "Vorrunde", - "firstHalfFull": "Vorrunde (Juli - Dezember)", - "secondHalf": "Rückrunde", - "secondHalfFull": "Rückrunde (ab 1. Januar)", - "missingConfigSummary": "Fehlende Angaben:", - "leagueFieldRequired": "Bitte eine Spielklasse auswählen und speichern.", - "myTischtennisUrlRequired": "MyTischtennis-URL einfügen und parsen, um Team-ID und Ligendaten zu übernehmen.", - "fileTooLargeTitle": "Datei zu gross", - "fileTooLarge": "{label} darf maximal 10 MB gross sein." - }, - "pdfGenerator": { - "teamLineupTitle": "Mannschaftsaufstellung", - "clubLabel": "Verein:", - "teamNameLabel": "Mannschaft:", - "leagueLabel": "Spielklasse:", - "seasonLabel": "Saison:", - "periodLabel": "Meldung für:", - "teamGenderLabel": "Team Geschlecht:", - "teamAgeGroupLabel": "Team Altersklasse:", - "generatedAt": "Erstellt:", - "lineupQttr": "(Q)TTR", - "plannedLeagueLabel": "Geplante Spielklasse:", - "noWhiteJersey": "Kein weisses Trikot", - "sportShorts": "Sportshorts (oder Sportröckchen), am besten auch nicht weiss" + "statusActionStart": "Starte" }, "clubSettings": { "greetingText": "Begrüssungstext", @@ -1139,6 +357,37 @@ "schedule": { "imageSize": "Bildgrösse" }, + "teamManagement": { + "title": "Team-Verwaltig", + "subtitle": "Teams uswähle, Konfiguration prüefe und Ligadate a eim Ort pflege.", + "editTeam": "Team bearbeite", + "createNewTeam": "Neues Team aalege", + "noLeague": "Kei Spielklass", + "planningTitle": "Mannschaftsplanig", + "planningSubtitle": "Mitglieder uf geplannti Teams verteile, Riähefoug feschtlege und offeni Zuordnige aluege.", + "searchMembers": "Mitglied sueche", + "playersWantToPlay": "Wänd spiele", + "playersPoolSubtitle": "Alli aktive Mitglieder mit Spielinteresse", + "unassignedMembers": "No nid zugeordnet", + "unassignedMembersSubtitle": "Mitglieder ohni Team-Zuordnig", + "allMembersAssigned": "Alli Mitglieder sind aktuell zugeordnet.", + "addPlanningTeam": "Planigs-Team hinzuefüege", + "selectMember": "Mitglied uswähle", + "selectTeam": "Team uswähle", + "assignMemberToTeam": "Zum Team hinzuefüege", + "markAsInterested": "Als interessiert markiere", + "autoSaved": "Automatisch gspeicheret", + "autoSaveError": "Automatischs Speichere isch fehlgschlage", + "sortFirstLast": "Sortierig: Vorname Nachname", + "sortLastFirst": "Sortierig: Nachname Vorname", + "noMembersInPool": "Kei passende Mitglieder gfunde.", + "noPlannedLeague": "Kei geplannti Spielklass", + "searchTeams": "Team sueche", + "filterNeedsAttention": "Prüefe", + "filterNoLeague": "Ohni Liga", + "fileTooLargeTitle": "Datei zu gross", + "fileTooLarge": "{label} darf maximal 10 MB gross sein." + }, "memberTransfer": { "bulkWrapperDescription": "Optional können Sie die äussere Struktur definieren, in die die Mitglieder-Array eingefügt wird. Verwenden Sie PLACEHOLDER_MEMBERS als Platzhalter für das Array der Mitglieder.", "bulkModeActiveDescription": "Das Template definiert das Format für ein einzelnes Mitglied. Die Mitglieder werden automatisch in ein Array gewrappt. Die äussere Struktur können Sie optional im \"Bulk-Wrapper-Template\" definieren (siehe unten).", @@ -1179,5 +428,9 @@ "simpleModalText2": "Klicken Sie ausserhalb oder auf das X, um zu schliessen.", "largeModalTitle": "Grosser Modal Dialog", "largeModalText": "Dies ist ein grosser modaler Dialog." + }, + "pdfGenerator": { + "noWhiteJersey": "Kein weisses Trikot", + "sportShorts": "Sportshorts (oder Sportröckchen), am besten auch nicht weiss" } } diff --git a/frontend/src/i18n/locales/en-AU.json b/frontend/src/i18n/locales/en-AU.json index 9866d46e..64b4e577 100755 --- a/frontend/src/i18n/locales/en-AU.json +++ b/frontend/src/i18n/locales/en-AU.json @@ -268,8 +268,7 @@ "ja": "日本語 (Japanese)", "zh": "中文 (Chinese)", "tl": "Tagalog", - "fil": "Filipino", - "ceb": "Cebuano (Bisaya)" + "fil": "Filipino" }, "messages": { "success": "Success", @@ -284,6 +283,7 @@ "invalidFile": "Invalid file", "pleaseSelectImageFile": "Please select an image file.", "fileTooLarge": "File too large", + "imageMaxSize": "The image must be a maximum of 5 MB.", "note": "Notice" }, "members": { @@ -332,6 +332,22 @@ "noGroupsAssigned": "No groups assigned", "noGroupsAvailable": "No groups available", "addGroup": "Add group...", + "bankAccountSection": "Bank account / SEPA", + "bankAccountLoading": "Loading bank details...", + "accountHolder": "Account holder", + "mandateReference": "Mandate reference", + "signedOn": "Signed on", + "validFrom": "Valid from", + "bankAccountStatus": "status", + "bankAccountStatusActive": "Active", + "bankAccountStatusPending": "Pending", + "bankAccountStatusRevoked": "Revoked", + "bankAccountNote": "Note", + "saveBankAccount": "Save bank account", + "bankAccountSaved": "Bank account saved successfully.", + "bankAccountLoadError": "Bank account could not be loaded.", + "bankAccountSaveError": "Bank account could not be saved.", + "bankAccountMissingAfterSave": "The bank account could not be found again after saving.", "remove": "Remove", "image": "Image", "selectFile": "Select file", @@ -713,6 +729,9 @@ "durationExampleShort": "e.g. 2x7", "showImage": "Show image/drawing", "participants": "Participants", + "excusedParticipants": "Disabled", + "availableParticipants": "Possible to be present", + "activeMembers": "Active members", "searchParticipants": "Search participants", "filterAll": "All", "filterPresent": "Present", @@ -1437,7 +1456,35 @@ "title": "Schedules", "subtitle": "Select teams, review fixtures and keep league tables in view.", "importSchedule": "Import schedule", + "addMatch": "Add match", + "manualMatchDescription": "Manually maintained matches appear alongside imported Click-TT fixtures.", + "fixtureType": "Fixture type:", + "regularMatch": "Regular match", + "cupMatch": "Cup match", + "friendlyMatch": "Friendly match", + "fixtureTypeDescription": { + "league": "Regular and cup matches are stored in the schedule.", + "cup": "Regular and cup matches are stored in the schedule.", + "friendly": "Friendly matches are managed separately; the details are transferred to the appropriate form." + }, + "ownTeam": "Own team", + "selectTeam": "Select team", + "opponent": "Opponent", + "opponentPlaceholder": "Opponent team name", + "venue": "Venue", + "address": "Address", + "zip": "Postal code", + "city": "City", + "location": "Location", "matchCredentials": "Match credentials (optional)", + "notes": "Notes", + "saving": "Saving…", + "manualMatchRequired": "Please fill in the team, opponent, date and time.", + "manualMatchSaved": { + "league": "Regular match added.", + "cup": "Cup match added." + }, + "manualMatchSaveFailed": "Cup match could not be saved.", "galleryLoading": "Loading gallery…", "gallery": "Member gallery", "overallSchedule": "Overall schedule", @@ -1466,6 +1513,16 @@ "homeTeam": "Home team", "guestTeam": "Away team", "result": "Result", + "homeGame": "Home", + "participants": "Participants", + "swapButton": "Swap", + "away": "Outward", + "homeLabel": "Home", + "awayLabel": "Away", + "swapSuccess": "Home/Away Swapped", + "swapFailed": "Home/Away could not be swapped.", + "plannedShort": "planned", + "readyShort": "prepared", "ageClass": "Age group", "homePin": "Home PIN", "guestPin": "Away PIN", diff --git a/frontend/src/i18n/locales/en-GB.json b/frontend/src/i18n/locales/en-GB.json index 1e121e16..fb071e44 100755 --- a/frontend/src/i18n/locales/en-GB.json +++ b/frontend/src/i18n/locales/en-GB.json @@ -268,8 +268,7 @@ "ja": "日本語 (Japanese)", "zh": "中文 (Chinese)", "tl": "Tagalog", - "fil": "Filipino", - "ceb": "Cebuano (Bisaya)" + "fil": "Filipino" }, "messages": { "success": "Success", @@ -333,6 +332,22 @@ "noGroupsAssigned": "No groups assigned", "noGroupsAvailable": "No groups available", "addGroup": "Add group...", + "bankAccountSection": "Bank account / SEPA", + "bankAccountLoading": "Loading bank details...", + "accountHolder": "Account holder", + "mandateReference": "Mandate reference", + "signedOn": "Signed on", + "validFrom": "Valid from", + "bankAccountStatus": "status", + "bankAccountStatusActive": "Active", + "bankAccountStatusPending": "Pending", + "bankAccountStatusRevoked": "Revoked", + "bankAccountNote": "Note", + "saveBankAccount": "Save bank account", + "bankAccountSaved": "Bank account saved successfully.", + "bankAccountLoadError": "Bank account could not be loaded.", + "bankAccountSaveError": "Bank account could not be saved.", + "bankAccountMissingAfterSave": "The bank account could not be found again after saving.", "remove": "Remove", "image": "Image", "selectFile": "Select file", @@ -714,6 +729,9 @@ "durationExampleShort": "e.g. 2x7", "showImage": "Show image/drawing", "participants": "Participants", + "excusedParticipants": "Disabled", + "availableParticipants": "Possible to be present", + "activeMembers": "Active members", "searchParticipants": "Search participants", "filterAll": "All", "filterPresent": "Present", @@ -1438,7 +1456,35 @@ "title": "Schedules", "subtitle": "Select teams, review fixtures and keep league tables in view.", "importSchedule": "Import schedule", + "addMatch": "Add match", + "manualMatchDescription": "Manually maintained matches appear alongside imported Click-TT fixtures.", + "fixtureType": "Fixture type:", + "regularMatch": "Regular match", + "cupMatch": "Cup match", + "friendlyMatch": "Friendly match", + "fixtureTypeDescription": { + "league": "Regular and cup matches are stored in the schedule.", + "cup": "Regular and cup matches are stored in the schedule.", + "friendly": "Friendly matches are managed separately; the details are transferred to the appropriate form." + }, + "ownTeam": "Own team", + "selectTeam": "Select team", + "opponent": "Opponent", + "opponentPlaceholder": "Opponent team name", + "venue": "Venue", + "address": "Address", + "zip": "Postal code", + "city": "City", + "location": "Location", "matchCredentials": "Match credentials (optional)", + "notes": "Notes", + "saving": "Saving…", + "manualMatchRequired": "Please fill in the team, opponent, date and time.", + "manualMatchSaved": { + "league": "Regular match added.", + "cup": "Cup match added." + }, + "manualMatchSaveFailed": "Cup match could not be saved.", "galleryLoading": "Loading gallery…", "gallery": "Member gallery", "overallSchedule": "Overall schedule", @@ -1467,6 +1513,16 @@ "homeTeam": "Home team", "guestTeam": "Away team", "result": "Result", + "homeGame": "Home", + "participants": "Participants", + "swapButton": "Swap", + "away": "Outward", + "homeLabel": "Home", + "awayLabel": "Away", + "swapSuccess": "Home/Away Swapped", + "swapFailed": "Home/Away could not be swapped.", + "plannedShort": "planned", + "readyShort": "prepared", "ageClass": "Age group", "homePin": "Home PIN", "guestPin": "Away PIN", diff --git a/frontend/src/i18n/locales/en-US.json b/frontend/src/i18n/locales/en-US.json index 4f7c87ca..3198d2db 100755 --- a/frontend/src/i18n/locales/en-US.json +++ b/frontend/src/i18n/locales/en-US.json @@ -268,8 +268,7 @@ "ja": "日本語 (Japanese)", "zh": "中文 (Chinese)", "tl": "Tagalog", - "fil": "Filipino", - "ceb": "Cebuano (Bisaya)" + "fil": "Filipino" }, "messages": { "success": "Success", @@ -336,12 +335,10 @@ "bankAccountSection": "Bank account / SEPA", "bankAccountLoading": "Loading bank details...", "accountHolder": "Account holder", - "iban": "IBAN", - "bic": "BIC", "mandateReference": "Mandate reference", "signedOn": "Signed on", "validFrom": "Valid from", - "bankAccountStatus": "Status", + "bankAccountStatus": "status", "bankAccountStatusActive": "Active", "bankAccountStatusPending": "Pending", "bankAccountStatusRevoked": "Revoked", @@ -732,6 +729,9 @@ "durationExampleShort": "e.g. 2x7", "showImage": "Show image/drawing", "participants": "Participants", + "excusedParticipants": "Disabled", + "availableParticipants": "Possible to be present", + "activeMembers": "Active members", "searchParticipants": "Search participants", "filterAll": "All", "filterPresent": "Present", @@ -1513,6 +1513,16 @@ "homeTeam": "Home team", "guestTeam": "Away team", "result": "Result", + "homeGame": "Home", + "participants": "Participants", + "swapButton": "Swap", + "away": "Outward", + "homeLabel": "Home", + "awayLabel": "Away", + "swapSuccess": "Home/Away Swapped", + "swapFailed": "Home/Away could not be swapped.", + "plannedShort": "planned", + "readyShort": "prepared", "ageClass": "Age group", "homePin": "Home PIN", "guestPin": "Away PIN", diff --git a/frontend/src/i18n/locales/es.json b/frontend/src/i18n/locales/es.json index 3c0bcb76..070908fb 100755 --- a/frontend/src/i18n/locales/es.json +++ b/frontend/src/i18n/locales/es.json @@ -37,6 +37,7 @@ "choose": "Elegir", "apply": "Aplicar", "clear": "Borrar", + "details": "Detalles", "view": "Ver", "name": "nombre", "date": "Fecha", @@ -48,6 +49,8 @@ "enabled": "Habilitado", "disabled": "Deshabilitado", "required": "Obligatorio", + "optional": "Opcional", + "in": "en", "min": "mín.", "minutes": "minutos", "hours": "horas", @@ -55,6 +58,7 @@ "weeks": "semanas", "months": "meses", "years": "años", + "ok": "DE ACUERDO", "period": "Periodo", "saving": "Guardando..." }, @@ -179,6 +183,7 @@ "memberTransfer": "Transferencia de miembros", "myTischtennisAccount": "Cuenta myTischtennis", "clickTtAccount": "Cuenta HTTV / click-TT", + "clickTtBrowser": "HTTV / clic-TT", "personalSettings": "Configuración personal", "logout": "Cerrar sesión", "login": "Iniciar sesión", @@ -270,7 +275,7 @@ "tl": "Tagalog (Tagalo)", "th": "ไทย (Tailandés)", "fil": "filipino", - "ceb": "Cebuano (Bisaya)" + "ceb": "Cebuano (Vizcaya)" }, "messages": { "success": "Éxito", @@ -285,6 +290,7 @@ "invalidFile": "Archivo no válido", "pleaseSelectImageFile": "Seleccione un archivo de imagen.", "fileTooLarge": "Archivo demasiado grande", + "imageMaxSize": "La imagen debe tener un tamaño máximo de 5 MB.", "note": "Aviso" }, "members": { @@ -333,6 +339,22 @@ "noGroupsAssigned": "No hay grupos asignados", "noGroupsAvailable": "No hay grupos disponibles", "addGroup": "Añadir grupo...", + "bankAccountSection": "Bank account / SEPA", + "bankAccountLoading": "Loading bank details...", + "accountHolder": "Account holder", + "mandateReference": "Mandate reference", + "signedOn": "Signed on", + "validFrom": "Valid from", + "bankAccountStatus": "estado", + "bankAccountStatusActive": "Activo", + "bankAccountStatusPending": "Pendiente", + "bankAccountStatusRevoked": "Revoked", + "bankAccountNote": "Note", + "saveBankAccount": "Save bank account", + "bankAccountSaved": "Bank account saved successfully.", + "bankAccountLoadError": "Bank account could not be loaded.", + "bankAccountSaveError": "Bank account could not be saved.", + "bankAccountMissingAfterSave": "The bank account could not be found again after saving.", "remove": "Quitar", "image": "Imagen", "selectFile": "Seleccionar archivo", @@ -353,6 +375,7 @@ "lastTrainingFilterNoDate": "Sin último entrenamiento", "lastTrainingFilterNotInTraining": "« Ya no entrena »", "lastTrainingFilterHint": "Tabla: temporada actual en la columna de edad. Detalle completo (ambas temporadas, último entrenamiento, participaciones) al pasar el ratón por la fila.", + "rowTooltipSeparator": null, "ttAgeClassCol": "Cat. edad (TT)", "ttAdult": "Adultos (no juvenil según corte)", "ttFilterGroupJ": "Niños y niñas (mixto)", @@ -660,6 +683,7 @@ "trainingDayChecklist": "Lista de control final", "trainingStart": "Inicio del entrenamiento", "trainingEnd": "Fin del entrenamiento", + "excludeFromBilling": "Exclude from billing", "trainingWindow": "Franja de entrenamiento", "trainingWindowUnset": "Aún no definido", "groupsLabel": "Grupos", @@ -697,6 +721,7 @@ "activityOrTimeblock": "Actividad / bloque horario", "durationMinutes": "Duración (min)", "standardActivities": "Actividades estándar", + "standardDurationShort": "Mín.", "standardActivityAddError": "No se pudo añadir la actividad estándar.", "addGroupActivity": "Añadir actividad de grupo", "addGroupButton": "+ Grupo", @@ -713,6 +738,9 @@ "durationExampleShort": "p. ej. 2x7", "showImage": "Mostrar imagen/dibujo", "participants": "Participantes", + "excusedParticipants": "Discapacitado", + "availableParticipants": "Posibilidad de estar presente", + "activeMembers": "Miembros activos", "searchParticipants": "Buscar participantes", "filterAll": "Todos", "filterPresent": "Presente", @@ -730,6 +758,7 @@ "editGroupActivity": "Editar actividad de grupo", "assignParticipantsForGroupActivity": "Asignar participantes a la actividad de grupo", "delete": "Eliminar", + "min": "Mín.", "errorLoadingPredefinedActivities": "Error al cargar las actividades predefinidas", "selectParticipantAndNote": "Selecciona un participante e introduce una nota.", "selectGroupAndActivity": "Selecciona un grupo e introduce una actividad.", @@ -919,8 +948,6 @@ "tournamentName": "Nombre del torneo", "winningSets": "Tasas ganadoras", "numberOfTables": "Número de mesas", - "confirmDeleteSetTitle": "Eliminar set", - "confirmDeleteSet": "¿Está seguro de que desea eliminar este set?", "table": "Mesa", "playerOne": "Jugador 1", "playerTwo": "Jugador 2", @@ -959,6 +986,7 @@ "doublesTournament": "Torneo de dobles", "doublesTournamentHint": "Cambia todas las clases existentes a dobles y crea nuevas clases como dobles de forma predeterminada.", "genderAll": "Todo", + "genderMixed": "Mezclado", "minBirthYear": "Nacido en el año o después", "selectClass": "Seleccionar clase", "tabConfig": "Configuración", @@ -966,6 +994,8 @@ "tabParticipants": "Participantes", "tabResults": "Resultados", "tabPlacements": "Colocaciones", + "confirmDeleteSetTitle": "Eliminar set", + "confirmDeleteSet": "¿Está seguro de que desea eliminar este set?", "finalPlacements": "Colocaciones finales", "groupPlacements": "Colocaciones grupales", "noPlacementsYet": "Aún no hay ubicaciones disponibles.", @@ -988,6 +1018,7 @@ "addExternalParticipant": "Agregar participante externo", "firstName": "Nombre de pila", "lastName": "Apellido", + "optional": "opcional", "birthdate": "Fecha de nacimiento", "addClubMember": "Agregar miembro del club", "advancersPerGroup": "Promotores por grupo", @@ -1005,10 +1036,12 @@ "resetGroups": "Restablecer grupos", "groupsOverview": "Resumen de grupos", "groupNumber": "Grupo", + "index": "índice", "position": "la plaza", "player": "patinadores", "points": "Agujas", "sets": "frases", + "diff": "diferencia", "pointsRatio": "Puntos de juego", "livePosition": "asiento en vivo", "pairings": "Emparejamientos dobles", @@ -1261,6 +1294,7 @@ "statusActionStart": "Comenzar" }, "myTischtennis": { + "title": "mi cuenta de tenis de mesa", "linkedAccount": "Cuenta vinculada", "passwordSaved": "Contraseña guardada", "yes": "Sí", @@ -1422,7 +1456,8 @@ "uploadNote": "Nota: La imagen no se cargará hasta que se guarde la actividad.", "uploadedImages": "Vídeo(s) subido(s):", "delete": "Borrar", - "cancel": "Cancelar" + "cancel": "Cancelar", + "min": "mín." }, "accident": { "reportAccident": "Reportar accidentes", @@ -1438,6 +1473,35 @@ "title": "Horarios", "subtitle": "Seleccione equipos, revise los partidos y mantenga a la vista las tablas de clasificación.", "importSchedule": "Calendario de importación", + "addMatch": "Add match", + "manualMatchDescription": "Manually maintained matches appear alongside imported Click-TT fixtures.", + "fixtureType": "Fixture type:", + "regularMatch": "Regular match", + "cupMatch": "Cup match", + "friendlyMatch": "Friendly match", + "fixtureTypeDescription": { + "league": "Regular and cup matches are stored in the schedule.", + "cup": "Regular and cup matches are stored in the schedule.", + "friendly": "Friendly matches are managed separately; the details are transferred to the appropriate form." + }, + "ownTeam": "Equipo propio", + "selectTeam": "Seleccionar equipo", + "opponent": "Opponent", + "opponentPlaceholder": "Opponent team name", + "venue": "Venue", + "address": "DIRECCIÓN", + "zip": "Postal code", + "city": "City", + "location": "Ubicación", + "matchCredentials": "Match credentials (optional)", + "notes": "Notas", + "saving": "Saving…", + "manualMatchRequired": "Please fill in the team, opponent, date and time.", + "manualMatchSaved": { + "league": "Regular match added.", + "cup": "Cup match added." + }, + "manualMatchSaveFailed": "Cup match could not be saved.", "galleryLoading": "Cargando galería…", "gallery": "Galería de miembros", "overallSchedule": "Calendario general", @@ -1467,12 +1531,25 @@ "homeTeam": "Equipo local", "guestTeam": "Equipo de fuera", "result": "Resultado", + "homeGame": "Hogar", + "participants": "Participantes", + "swapButton": "Intercambiar", + "away": "Saliente", + "homeLabel": "Hogar", + "awayLabel": "Lejos", + "swapSuccess": "Home/Away Swapped", + "swapFailed": "Home/Away no se ha podido intercambiar.", + "plannedShort": "planeado", + "readyShort": "preparados", "ageClass": "grupo de edad", + "code": "código", "homePin": "PIN de inicio", "guestPin": "PIN Ausente", "noGames": "No hay coincidencias disponibles", "leagueTable": "tabla de liga", "position": "Posición", + "team": "equipo", + "teams": "equipos", "matches": "partidos", "completedShort": "Terminado", "pendingShort": "Abierto", @@ -1551,6 +1628,7 @@ "plannedLeague": "Liga prevista", "plannedLeaguePlaceholder": "p. ej. liga regional, tras la próxima inscripción …", "plannedLeagueHint": "Opcional. Independiente de la liga registrada (MyTischtennis).", + "team": "equipo", "teamId": "ID del equipo", "groupId": "ID de grupo", "association": "Asociación", @@ -1615,6 +1693,7 @@ "noIssues": "No hay problemas de configuración abiertos.", "parseUrlAction": "Comprobar URL", "myTischtennisUrlPlaceholder": "URL de miTischtennis...", + "teams": "equipos", "planningTitle": "Planificación del equipo", "planningSubtitle": "Distribuya miembros a equipos programados, establezca el orden y vea las tareas abiertas.", "searchMembers": "Buscar miembro", @@ -1715,6 +1794,7 @@ "title": "Solicitudes de usuario pendientes", "firstName": "Nombre de pila", "lastName": "Apellido", + "email": "Correo electrónico", "actions": "Comportamiento", "approve": "Aprobar", "reject": "Despedir", @@ -1732,6 +1812,7 @@ "loadingMembers": "Invitando miembros...", "availableRoles": "Roles disponibles", "clubMembers": "Miembros del club", + "email": "Correo electrónico", "role": "Role", "status": "estado", "actions": "Comportamiento", @@ -1883,6 +1964,7 @@ "executionTime": "tiempo de ejecución", "errorLabel": "Error", "actions": "Comportamiento", + "details": "Detalles", "previous": "Anterior", "next": "Próximo", "page": "Página", @@ -1929,10 +2011,12 @@ }, "dialogs": { "info": { - "title": "información" + "title": "información", + "ok": "DE ACUERDO" }, "confirm": { "title": "Confirmación", + "ok": "DE ACUERDO", "cancel": "Cancelar" } }, @@ -1953,7 +2037,10 @@ "noConfigMessage": "Primero configure la transferencia de miembros en la configuración.", "goToSettings": "Configuración ¿Hacia dónde?", "transferConfiguration": "Configuración de transmisión", + "server": "servidor", + "endpoint": "Punto final", "method": "Método", + "format": "formato", "mode": "modo", "bulkImport": "Importación masiva", "single": "Soltero", @@ -2009,6 +2096,7 @@ "leagueTables": "Clasificación de JoomSport", "playersUpdated": "Jugador actualizado", "results": "Resultados", + "teams": "equipos", "neverFetched": "Nunca recuperado", "refreshStatistics": "Recargar estadísticas", "errorLoadingAccount": "Error al cargar la cuenta myTischtennis", @@ -2068,6 +2156,7 @@ "title": "Notas para", "phone": "Número de teléfono.", "memberImage": "Miembro de imagen", + "tags": "etiquetas", "selectTags": "Seleccionar etiquetas", "newNote": "Nueva nota", "add": "Agregar", @@ -2171,6 +2260,7 @@ "courtDrawing": { "title": "Configurar ejercicio de tenis de mesa", "cancel": "Cancelar", + "ok": "DE ACUERDO", "durationMinutes": "Duración (minutos)", "durationText": "Duración (texto)", "durationTextPlaceholder": "p.ej. 2x5", @@ -2377,6 +2467,7 @@ "strokeTypeCounter": "Contragolpe", "strokeTypeTopspin": "Giro superior", "strokeTypeFlip": "voltear", + "strokeTypeBlock": "Bloc", "strokeTypeSmash": "Remate", "strokeTypeChopDefense": "Defensa cortada", "strokeTypeLobDefense": "Defensa alta", @@ -2396,6 +2487,7 @@ "animationRunning": "Animación en progreso..." }, "nuscoreAnalyzer": { + "title": "🔍 analizador nuscore", "description": "Analiza y descarga recursos de nuscore para uso local.", "analyze": "🔍 análisis nuscore", "analyzing": "Analizando...", @@ -2549,6 +2641,7 @@ "player": "patinadores", "points": "Agujas", "sets": "frases", + "diff": "diferencia", "groupMatrices": "Matrices de grupo", "allGames": "Todas las ciudades", "noActivities": "No se registraron actividades para este día de entrenamiento.", diff --git a/frontend/src/i18n/locales/fil.json b/frontend/src/i18n/locales/fil.json index 74974814..9ab8f75e 100755 --- a/frontend/src/i18n/locales/fil.json +++ b/frontend/src/i18n/locales/fil.json @@ -37,6 +37,7 @@ "choose": "Pumili", "apply": "Ilapat", "clear": "Burahin", + "details": "Mga Detalye", "view": "Tingnan", "name": "pangalan", "date": "Petsa", @@ -48,6 +49,8 @@ "enabled": "Pinagana", "disabled": "Hindi pinagana", "required": "Kinakailangan", + "optional": "Opsyonal", + "in": "sa", "min": "min", "minutes": "Minuto", "hours": "Oras", @@ -55,6 +58,7 @@ "weeks": "Linggo", "months": "Buwan", "years": "Taon", + "ok": "Sinop ko ba ito?", "period": "Panahon", "saving": "Sine-save..." }, @@ -179,6 +183,7 @@ "memberTransfer": "Paglipat ng miyembro", "myTischtennisAccount": "myTischtennis Account", "clickTtAccount": "HTTV / click-TT account", + "clickTtBrowser": "HTTV / click - TT", "personalSettings": "Mga personal na setting", "logout": "Mag-logout", "login": "Mag-login", @@ -269,8 +274,7 @@ "zh": "中文 (Intsik)", "tl": "Tagalog", "th": "Thai (ไทย)", - "fil": "Filipino", - "ceb": "Cebuano (Bisaya)" + "fil": "Filipino" }, "messages": { "success": "Tagumpay", @@ -334,6 +338,22 @@ "noGroupsAssigned": "Walang grupong nakatalaga", "noGroupsAvailable": "Walang available na grupo", "addGroup": "Magdagdag ng grupo...", + "bankAccountSection": "Bank account / SEPA", + "bankAccountLoading": "Loading bank details...", + "accountHolder": "Account holder", + "mandateReference": "Mandate reference", + "signedOn": "Signed on", + "validFrom": "Valid from", + "bankAccountStatus": "katayuan", + "bankAccountStatusActive": "Aktibo", + "bankAccountStatusPending": "Nakabinbin", + "bankAccountStatusRevoked": "Revoked", + "bankAccountNote": "Note", + "saveBankAccount": "Save bank account", + "bankAccountSaved": "Bank account saved successfully.", + "bankAccountLoadError": "Bank account could not be loaded.", + "bankAccountSaveError": "Bank account could not be saved.", + "bankAccountMissingAfterSave": "The bank account could not be found again after saving.", "remove": "Alisin", "image": "Larawan", "selectFile": "Pumili ng file", @@ -354,6 +374,7 @@ "lastTrainingFilterNoDate": "Walang huling training", "lastTrainingFilterNotInTraining": "Flag na “hindi na nagte-training”", "lastTrainingFilterHint": "Table: kasalukuyang season sa AK. Buong detalye (dalawang season, huling training, participations) kapag-hover sa hilera.", + "rowTooltipSeparator": null, "ttAgeClassCol": "Edad (TT)", "ttAdult": "Adulto (hindi youth sa cutoff)", "ttFilterGroupJ": "Babae at lalaki (halo)", @@ -661,6 +682,7 @@ "trainingDayChecklist": "Checklist ng pagkumpleto", "trainingStart": "Simula ng pagsasanay", "trainingEnd": "Pagtatapos ng pagsasanay", + "excludeFromBilling": "Exclude from billing", "trainingWindow": "Oras ng pagsasanay", "trainingWindowUnset": "Hindi pa naitakda", "groupsLabel": "Mga grupo", @@ -714,6 +736,9 @@ "durationExampleShort": "hal. 2x7", "showImage": "Ipakita ang larawan/guhit", "participants": "Mga kalahok", + "excusedParticipants": "Naka-disable", + "availableParticipants": "Posibleng naroroon", + "activeMembers": "Mga aktibong miyembro", "searchParticipants": "Maghanap ng kalahok", "filterAll": "Lahat", "filterPresent": "Dumalo", @@ -920,8 +945,6 @@ "tournamentName": "Pangalan ng tournament", "winningSets": "Mga rate ng panalong", "numberOfTables": "Bilang ng mesa", - "confirmDeleteSetTitle": "Tanggalin ang set", - "confirmDeleteSet": "Sigurado ka bang tatanggalin ang set na ito?", "table": "Mesa", "playerOne": "Manlalaro 1", "playerTwo": "Manlalaro 2", @@ -960,6 +983,7 @@ "doublesTournament": "Dobleng paligsahan", "doublesTournamentHint": "Ginagawang doble ang lahat ng umiiral na klase at gagawa ng mga bagong klase bilang mga doble bilang default.", "genderAll": "Lahat", + "genderMixed": "Halu - halo", "minBirthYear": "Ipinanganak sa taon o mas bago", "selectClass": "Piliin ang Klase", "tabConfig": "Configuration", @@ -967,6 +991,8 @@ "tabParticipants": "Mga kalahok", "tabResults": "Mga resulta", "tabPlacements": "Mga paglalagay", + "confirmDeleteSetTitle": "Tanggalin ang set", + "confirmDeleteSet": "Sigurado ka bang tatanggalin ang set na ito?", "finalPlacements": "Mga huling placement", "groupPlacements": "Mga Placement ng Grupo", "noPlacementsYet": "Wala pang available na mga placement.", @@ -989,6 +1015,7 @@ "addExternalParticipant": "Magdagdag ng Panlabas na Kalahok", "firstName": "Pangalan", "lastName": "Apelyido", + "optional": "opsyonal", "birthdate": "Petsa ng kapanganakan", "addClubMember": "Magdagdag ng Miyembro ng Club", "advancersPerGroup": "Mga promoter bawat grupo", @@ -1006,6 +1033,7 @@ "resetGroups": "I-reset ang Mga Grupo", "groupsOverview": "Pangkalahatang-ideya ng mga pangkat", "groupNumber": "Grupo", + "index": "Password:", "position": "Ang parisukat", "player": "Mga skater", "points": "Mga puntos", @@ -1262,6 +1290,7 @@ "statusActionStart": "Magsimula" }, "myTischtennis": { + "title": "myTischtennis - Account", "linkedAccount": "Naka-link na Account", "passwordSaved": "Na-save ang password", "yes": "Oo", @@ -1316,6 +1345,7 @@ "trainingData": "Data ng pagsasanay", "tournamentData": "Data ng Tournament", "myTischtennisData": "Data ng MyTischtennis", + "cookies": "Cookies/Lokal na Imbakan", "logData": "Mga logfile", "recipients": "tatanggap" }, @@ -1438,6 +1468,35 @@ "title": "Mga iskedyul", "subtitle": "Pumili ng mga koponan, suriin ang mga fixture at panatilihing nakikita ang mga talahanayan ng liga.", "importSchedule": "Iskedyul ng pag-import", + "addMatch": "Add match", + "manualMatchDescription": "Manually maintained matches appear alongside imported Click-TT fixtures.", + "fixtureType": "Fixture type:", + "regularMatch": "Regular match", + "cupMatch": "Cup match", + "friendlyMatch": "Friendly match", + "fixtureTypeDescription": { + "league": "Regular and cup matches are stored in the schedule.", + "cup": "Regular and cup matches are stored in the schedule.", + "friendly": "Friendly matches are managed separately; the details are transferred to the appropriate form." + }, + "ownTeam": "Sariling team", + "selectTeam": "Pumili ng koponan", + "opponent": "Opponent", + "opponentPlaceholder": "Opponent team name", + "venue": "Venue", + "address": "Address", + "zip": "Postal code", + "city": "City", + "location": "Lokasyon", + "matchCredentials": "Match credentials (optional)", + "notes": "Mga Tala", + "saving": "Saving…", + "manualMatchRequired": "Please fill in the team, opponent, date and time.", + "manualMatchSaved": { + "league": "Regular match added.", + "cup": "Cup match added." + }, + "manualMatchSaveFailed": "Cup match could not be saved.", "galleryLoading": "Nilo-load ang gallery…", "gallery": "Gallery ng miyembro", "overallSchedule": "Pangkalahatang iskedyul", @@ -1451,6 +1510,7 @@ "noSelectionMessage": "Piliin ang pangkalahatang iskedyul, ang iskedyul ng pang-adulto o isang koponan mula sa kaliwa.", "scheduleTab": "Iskedyul", "tableTab": "mesa", + "downloadPDF": "I - download ang PDF", "refreshTable": "I-refresh ang talahanayan", "tableLoading": "Nilo-load ang talahanayan…", "fetchTeamData": "Kunin ang iskedyul at mga resulta", @@ -1466,12 +1526,25 @@ "homeTeam": "Home team", "guestTeam": "Ang away team", "result": "Resulta", + "homeGame": "Bahay", + "participants": "Mga kalahok", + "swapButton": "I-swap", + "away": "Sa Labas", + "homeLabel": "Bahay", + "awayLabel": "Malayo", + "swapSuccess": "Username or email address *", + "swapFailed": "Hindi maaaring palitan ang Home/Away.", + "plannedShort": "Naplano", + "readyShort": "pasaway", "ageClass": "pangkat ng edad", + "code": "code", "homePin": "PIN ng tahanan", "guestPin": "Away PIN", "noGames": "Walang available na mga tugma", "leagueTable": "Mesa ng liga", "position": "Posisyon", + "team": "pangkat", + "teams": "Mga Koponan", "matches": "mga posporo", "completedShort": "Nakumpleto", "pendingShort": "Bukas", @@ -1492,6 +1565,7 @@ "imageSize": "Laki ng larawan", "noMembersWithImages": "Walang nakitang mga miyembro na may mga larawan.", "playerSelection": "Pagpili ng manlalaro", + "vs": "kumpara sa", "loadingMembers": "Nilo-load ang mga miyembro...", "player": "Manlalaro", "ready": "handa na", @@ -1550,6 +1624,7 @@ "plannedLeague": "Plano na liga", "plannedLeaguePlaceholder": "hal. district league, pagkatapos ng susunod na rehistro …", "plannedLeagueHint": "Opsyonal. Hiwalay sa nakarehistrong liga (MyTischtennis).", + "team": "pangkat", "teamId": "ID ng Team", "groupId": "Group ID", "association": "Samahan", @@ -1614,6 +1689,7 @@ "noIssues": "Walang bukas na mga isyu sa configuration.", "parseUrlAction": "Suriin ang URL", "myTischtennisUrlPlaceholder": "myTischtennis URL...", + "teams": "Mga Koponan", "planningTitle": "Pagpaplano ng pangkat", "planningSubtitle": "Ipamahagi ang mga miyembro sa mga nakaiskedyul na koponan, itakda ang pagkakasunud-sunod, at tingnan ang mga bukas na takdang-aralin.", "searchMembers": "Maghanap ng miyembro", @@ -1714,6 +1790,7 @@ "title": "Nakabinbing Mga Kahilingan ng User", "firstName": "Pangalan", "lastName": "Apelyido", + "email": "E-mail", "actions": "Mga aksyon", "approve": "Aprubahan", "reject": "I-dismiss", @@ -1731,6 +1808,7 @@ "loadingMembers": "Iniimbitahan ang mga miyembro...", "availableRoles": "Mga Magagamit na Tungkulin", "clubMembers": "Mga miyembro ng club", + "email": "E-mail", "role": "Tungkulin", "status": "katayuan", "actions": "Mga aksyon", @@ -1851,6 +1929,7 @@ "subtitle": "Pangkalahatang-ideya ng lahat ng kahilingan, tugon at pagpapatupad ng API", "backend": "Mga Setting ng Backend", "all": "Lahat", + "mytischtennis": "myTable Tennis", "ownBackend": "Sariling backend", "logType": "Uri ng Log", "apiRequests": "Mga Kahilingan sa API", @@ -1878,6 +1957,7 @@ "executionTime": "Oras ng pagpapatupad", "errorLabel": "Error", "actions": "Mga aksyon", + "details": "Mga Detalye", "previous": "Nakaraang", "next": "Susunod", "page": "Pahina", @@ -1901,7 +1981,9 @@ "status": "katayuan", "executionTime": "Oras ng pagpapatupad", "schedulerJob": "Trabaho ng Scheduler", - "error": "Error" + "error": "Error", + "requestBody": "Humiling ng Katawan", + "responseBody": "Katawan ng Tugon" } }, "csvImport": { @@ -1922,10 +2004,12 @@ }, "dialogs": { "info": { - "title": "impormasyon" + "title": "impormasyon", + "ok": "Sinop ko ba ito?" }, "confirm": { "title": "Kumpirmasyon", + "ok": "Sinop ko ba ito?", "cancel": "Kanselahin" } }, @@ -1946,7 +2030,9 @@ "noConfigMessage": "Mangyaring i-configure muna ang paglipat ng miyembro sa mga setting.", "goToSettings": "Mga Setting Saan pupunta?", "transferConfiguration": "Configuration ng Transmission", + "server": "Servers", "method": "Pamamaraan", + "format": "pormat", "mode": "mode", "bulkImport": "Bultuhang Pag-import", "single": "Walang asawa", @@ -2002,6 +2088,7 @@ "leagueTables": "JoomSport Standings", "playersUpdated": "Na-update ang Manlalaro", "results": "Mga resulta", + "teams": "Mga Koponan", "neverFetched": "Never Retrieved", "refreshStatistics": "I-reload ang Stats", "errorLoadingAccount": "Error sa paglo-load ng myTischtennis account", @@ -2061,6 +2148,7 @@ "title": "Mga tala para sa", "phone": "Telepono no.", "memberImage": "Miyembro ng Larawan", + "tags": "Mga Tag", "selectTags": "Piliin ang Mga Tag", "newNote": "Bagong tala", "add": "Idagdag", @@ -2081,6 +2169,7 @@ "greeting": "Pagtanggap", "result": "Pagpasok ng mga resulta", "completion": "Pagkumpleto", + "vs": "kumpara sa", "startTime": "oras ng pagsisimula", "endTime": "oras ng pagtatapos", "setCurrentTime": "Itakda ang kasalukuyang oras", @@ -2164,6 +2253,7 @@ "courtDrawing": { "title": "I-configure ang ehersisyo ng table tennis", "cancel": "Kanselahin", + "ok": "Sinop ko ba ito?", "durationMinutes": "Tagal (minuto)", "durationText": "Tagal (teksto)", "durationTextPlaceholder": "hal. 2x5", @@ -2282,6 +2372,7 @@ "modalDialogs": "Mga Modal na Dialogue", "simpleModal": "Simpleng Modal", "largeModal": "Malaking Modal", + "fullscreenModal": "Modal ng Fullscreen", "nonModalDialogs": "Mga di-modal na diyalogo", "nonModalDialog": "Di-modal na diyalogo", "multipleDialogs": "Maramihang Dialog", @@ -2301,6 +2392,7 @@ "largeModalText": "Ito ay isang mahusay na modal dialogue.", "largeModalText2": "Nag-aalok ito ng mas maraming espasyo para sa nilalaman.", "scrollArea": "Mag-scroll area para sa maraming content...", + "fullscreenModalTitle": "Fullscreen modal dialog", "fullscreenModalText": "Ito ay isang fullscreen na dialog.", "fullscreenModalText2": "Sinasakop nito ang halos buong screen (90vw x 90vh).", "nonModalTitle": "Di-modal na diyalogo", @@ -2368,6 +2460,7 @@ "strokeTypeCounter": "Kontra", "strokeTypeTopspin": "Top spin", "strokeTypeFlip": "pitik", + "strokeTypeBlock": "I - block", "strokeTypeSmash": "Basagin", "strokeTypeChopDefense": "Chop defense", "strokeTypeLobDefense": "Lob defense", @@ -2387,6 +2480,7 @@ "animationRunning": "Kasalukuyang ginagawa ang animation..." }, "nuscoreAnalyzer": { + "title": "🔍 nuscore analyzer", "description": "Sinusuri at dina-download ang mga mapagkukunan ng nuscore para sa lokal na paggamit", "analyze": "🔍 nuscore analysis", "analyzing": "Sinusuri...", diff --git a/frontend/src/i18n/locales/fr.json b/frontend/src/i18n/locales/fr.json index 290e47b0..b098a750 100755 --- a/frontend/src/i18n/locales/fr.json +++ b/frontend/src/i18n/locales/fr.json @@ -37,6 +37,7 @@ "choose": "Choisir", "apply": "Appliquer", "clear": "Effacer", + "details": "Détails", "view": "Afficher", "name": "nom", "date": "Date", @@ -48,6 +49,8 @@ "enabled": "Activé", "disabled": "Désactivé", "required": "Obligatoire", + "optional": "option", + "in": "à", "min": "min", "minutes": "minutes", "hours": "heures", @@ -270,7 +273,7 @@ "tl": "Tagalog", "th": "ไทย (Thaï)", "fil": "Philippin", - "ceb": "Cebuano (Bisaya)" + "ceb": "Cebuano (Biscaye)" }, "messages": { "success": "Succès", @@ -334,6 +337,22 @@ "noGroupsAssigned": "Aucun groupe attribué", "noGroupsAvailable": "Aucun groupe disponible", "addGroup": "Ajouter un groupe...", + "bankAccountSection": "Bank account / SEPA", + "bankAccountLoading": "Loading bank details...", + "accountHolder": "Account holder", + "mandateReference": "Mandate reference", + "signedOn": "Signed on", + "validFrom": "Valid from", + "bankAccountStatus": "statut", + "bankAccountStatusActive": "Actif", + "bankAccountStatusPending": "En attente", + "bankAccountStatusRevoked": "Revoked", + "bankAccountNote": "Note", + "saveBankAccount": "Save bank account", + "bankAccountSaved": "Bank account saved successfully.", + "bankAccountLoadError": "Bank account could not be loaded.", + "bankAccountSaveError": "Bank account could not be saved.", + "bankAccountMissingAfterSave": "The bank account could not be found again after saving.", "remove": "Retirer", "image": "Image", "selectFile": "Choisir un fichier", @@ -660,6 +679,7 @@ "trainingDayChecklist": "Liste de contrôle finale", "trainingStart": "Début de l'entraînement", "trainingEnd": "Fin de l'entraînement", + "excludeFromBilling": "Exclude from billing", "trainingWindow": "Plage d'entraînement", "trainingWindowUnset": "Pas encore défini", "groupsLabel": "Groupes", @@ -713,6 +733,9 @@ "durationExampleShort": "p. ex. 2x7", "showImage": "Afficher image/schéma", "participants": "Participants", + "excusedParticipants": "Handicapé", + "availableParticipants": "Possibilité d'être présent", + "activeMembers": "Les membres actifs ou adhérents", "searchParticipants": "Rechercher des participants", "filterAll": "Tous", "filterPresent": "Présent", @@ -956,6 +979,7 @@ "doublesTournament": "Tournoi de double", "doublesTournamentHint": "Bascule toutes les classes existantes en doubles et crée de nouvelles classes en doubles par défaut.", "genderAll": "Tous", + "genderMixed": "Mixte", "minBirthYear": "Né dans l'année ou plus tard", "selectClass": "Sélectionnez une classe", "tabConfig": "Configuration", @@ -987,6 +1011,7 @@ "addExternalParticipant": "Ajouter un participant externe", "firstName": "Prénom", "lastName": "Nom de famille", + "optional": "facultatif", "birthdate": "Date de naissance", "addClubMember": "Ajouter un membre du club", "advancersPerGroup": "Promoteurs par groupe", @@ -1004,10 +1029,12 @@ "resetGroups": "Réinitialiser les groupes", "groupsOverview": "Aperçu des groupes", "groupNumber": "Groupe", + "index": "indice", "position": "La place", "player": "Patineurs", "points": "Points", "sets": "phrases", + "diff": "Différence", "pointsRatio": "Points de jeu", "livePosition": "Siège en direct", "pairings": "Doubles appariements", @@ -1260,6 +1287,7 @@ "statusActionStart": "Commencer" }, "myTischtennis": { + "title": "mon compte tennis de table", "linkedAccount": "Compte lié", "passwordSaved": "Mot de passe enregistré", "yes": "Oui", @@ -1437,6 +1465,34 @@ "title": "Horaires", "subtitle": "Sélectionnez les équipes, examinez les calendriers et gardez les classements en vue.", "importSchedule": "Calendrier d'importation", + "addMatch": "Add match", + "manualMatchDescription": "Manually maintained matches appear alongside imported Click-TT fixtures.", + "fixtureType": "Fixture type:", + "regularMatch": "Regular match", + "cupMatch": "Cup match", + "friendlyMatch": "Friendly match", + "fixtureTypeDescription": { + "league": "Regular and cup matches are stored in the schedule.", + "cup": "Regular and cup matches are stored in the schedule.", + "friendly": "Friendly matches are managed separately; the details are transferred to the appropriate form." + }, + "ownTeam": "Propre équipe", + "selectTeam": "Sélectionner une équipe", + "opponent": "Opponent", + "opponentPlaceholder": "Opponent team name", + "venue": "Venue", + "zip": "Postal code", + "city": "City", + "location": "Emplacement", + "matchCredentials": "Match credentials (optional)", + "notes": "Remarques", + "saving": "Saving…", + "manualMatchRequired": "Please fill in the team, opponent, date and time.", + "manualMatchSaved": { + "league": "Regular match added.", + "cup": "Cup match added." + }, + "manualMatchSaveFailed": "Cup match could not be saved.", "galleryLoading": "Chargement de la galerie…", "gallery": "Galerie des membres", "overallSchedule": "Calendrier global", @@ -1466,12 +1522,25 @@ "homeTeam": "Équipe à domicile", "guestTeam": "Équipe à l'extérieur", "result": "Résultat", + "homeGame": "Maison", + "participants": "Participants", + "swapButton": "Swap", + "away": "Sortants", + "homeLabel": "Maison", + "awayLabel": "Loin", + "swapSuccess": "Accueil/Extérieur Échangé", + "swapFailed": "Accueil/Absent n'a pas pu être échangé.", + "plannedShort": "planifié", + "readyShort": "préparé par", "ageClass": "Tranche d'âge", + "code": "code", "homePin": "Code PIN Accueil", "guestPin": "Code PIN absent", "noGames": "Aucun match disponible", "leagueTable": "Tableau de la ligue", "position": "Position", + "team": "équipe", + "teams": "équipes", "matches": "matchs", "completedShort": "Complété", "pendingShort": "Ouvrir", @@ -1492,6 +1561,7 @@ "imageSize": "Taille de l'image", "noMembersWithImages": "Aucun membre avec des images trouvé.", "playerSelection": "Sélection des joueurs", + "vs": "contre", "loadingMembers": "Chargement des membres...", "player": "Joueur", "ready": "Prêt", @@ -1549,6 +1619,7 @@ "plannedLeague": "Ligue prévue", "plannedLeaguePlaceholder": "ex. ligue de district, après la prochaine inscription …", "plannedLeagueHint": "Facultatif. Indépendant de la ligue enregistrée (MyTischtennis).", + "team": "équipe", "teamId": "ID d'équipe", "groupId": "Identifiant du groupe", "association": "Association", @@ -1612,6 +1683,7 @@ "noIssues": "Aucun problème de configuration ouvert.", "parseUrlAction": "Vérifier l'URL", "myTischtennisUrlPlaceholder": "URL de myTischtennis...", + "teams": "équipes", "planningTitle": "Planification d'équipe", "planningSubtitle": "Répartissez les membres dans les équipes planifiées, définissez l'ordre et consultez les affectations ouvertes.", "searchMembers": "Rechercher un membre", @@ -1712,6 +1784,7 @@ "title": "Demandes d'utilisateurs en attente", "firstName": "Prénom", "lastName": "Nom de famille", + "email": "E-mail", "actions": "Actes", "approve": "Approuver", "reject": "Rejeter", @@ -1729,6 +1802,7 @@ "loadingMembers": "Inviter les membres...", "availableRoles": "Rôles disponibles", "clubMembers": "Membres du club", + "email": "E-mail", "role": "Rôle", "status": "statut", "actions": "Actes", @@ -1879,6 +1953,7 @@ "executionTime": "Temps d'exécution", "errorLabel": "Erreur", "actions": "Actes", + "details": "Détails", "previous": "Précédent", "next": "Suivant", "page": "Page", @@ -1949,7 +2024,10 @@ "noConfigMessage": "Veuillez d'abord configurer le transfert de membre dans les paramètres.", "goToSettings": "Paramètres Où aller ?", "transferConfiguration": "Configuration de transmission", + "server": "serveur", + "endpoint": "Point de terminaison", "method": "Méthode", + "format": "format", "mode": "mode", "bulkImport": "Importation en masse", "single": "Célibataire", @@ -2005,6 +2083,7 @@ "leagueTables": "Classement JoomSport", "playersUpdated": "Joueur mis à jour", "results": "Résultats", + "teams": "équipes", "neverFetched": "Jamais récupéré", "refreshStatistics": "Recharger les statistiques", "errorLoadingAccount": "Erreur de chargement du compte myTischtennis", @@ -2064,6 +2143,7 @@ "title": "Remarques pour", "phone": "N° de téléphone", "memberImage": "Membre d'image", + "tags": "balises", "selectTags": "Sélectionnez les balises", "newNote": "Nouvelle remarque", "add": "Ajouter", @@ -2084,6 +2164,7 @@ "greeting": "Accueillant", "result": "Saisie des résultats", "completion": "Achèvement", + "vs": "contre", "startTime": "heure de début", "endTime": "heure de fin", "setCurrentTime": "Régler l'heure actuelle", @@ -2372,6 +2453,7 @@ "strokeTypeCounter": "Contre", "strokeTypeTopspin": "Rotation supérieure", "strokeTypeFlip": "retourner", + "strokeTypeBlock": "Bloc", "strokeTypeSmash": "Frappe", "strokeTypeChopDefense": "Défense coupée", "strokeTypeLobDefense": "Défense lobée", @@ -2391,6 +2473,7 @@ "animationRunning": "Animation en cours..." }, "nuscoreAnalyzer": { + "title": "🔍 analyseur nuscore", "description": "Analyse et télécharge les ressources nuscore pour une utilisation locale", "analyze": "🔍 analyse nuscore", "analyzing": "Analyser...", @@ -2544,6 +2627,7 @@ "player": "Patineurs", "points": "Points", "sets": "phrases", + "diff": "Différence", "groupMatrices": "Matrices de groupe", "allGames": "Toutes les villes", "noActivities": "Aucune activité enregistrée pour cette journée de formation.", diff --git a/frontend/src/i18n/locales/it.json b/frontend/src/i18n/locales/it.json index c0a283ab..79313c44 100755 --- a/frontend/src/i18n/locales/it.json +++ b/frontend/src/i18n/locales/it.json @@ -37,6 +37,7 @@ "choose": "Scegli", "apply": "Applica", "clear": "Cancella", + "details": "Dettagli", "view": "Visualizza", "name": "nome", "date": "Data", @@ -48,6 +49,8 @@ "enabled": "Abilitato", "disabled": "Disabilitato", "required": "Obbligatorio", + "optional": "Opzionale", + "in": "In", "min": "min", "minutes": "minuti", "hours": "ore", @@ -179,6 +182,7 @@ "memberTransfer": "Trasferimento membri", "myTischtennisAccount": "Account myTischtennis", "clickTtAccount": "Account HTTV / click-TT", + "clickTtBrowser": "HTTV/clic-TT", "personalSettings": "Impostazioni personali", "logout": "Disconnetti", "login": "Accedi", @@ -269,8 +273,7 @@ "zh": "中文 (Cinese)", "tl": "Tagalog", "th": "ไทย (Tailandese)", - "fil": "filippino", - "ceb": "Cebuano (Bisaya)" + "fil": "filippino" }, "messages": { "success": "Successo", @@ -334,6 +337,22 @@ "noGroupsAssigned": "Nessun gruppo assegnato", "noGroupsAvailable": "Nessun gruppo disponibile", "addGroup": "Aggiungi gruppo...", + "bankAccountSection": "Bank account / SEPA", + "bankAccountLoading": "Loading bank details...", + "accountHolder": "Account holder", + "mandateReference": "Mandate reference", + "signedOn": "Signed on", + "validFrom": "Valid from", + "bankAccountStatus": "stato", + "bankAccountStatusActive": "Attivo", + "bankAccountStatusPending": "In attesa di", + "bankAccountStatusRevoked": "Revoked", + "bankAccountNote": "Note", + "saveBankAccount": "Save bank account", + "bankAccountSaved": "Bank account saved successfully.", + "bankAccountLoadError": "Bank account could not be loaded.", + "bankAccountSaveError": "Bank account could not be saved.", + "bankAccountMissingAfterSave": "The bank account could not be found again after saving.", "remove": "Rimuovi", "image": "Immagine", "selectFile": "Seleziona file", @@ -354,6 +373,7 @@ "lastTrainingFilterNoDate": "Senza ultimo allenamento", "lastTrainingFilterNotInTraining": "« Non più in allenamento »", "lastTrainingFilterHint": "Tabella: stagione corrente nella colonna AK. Dettaglio completo (entrambe le stagioni, ultimo allenamento, partecipazioni) al passaggio del mouse sulla riga.", + "rowTooltipSeparator": null, "ttAgeClassCol": "Classe (TT)", "ttAdult": "Adulti (non giovanili secondo la data)", "ttFilterGroupJ": "Ragazze e ragazzi (misto)", @@ -661,6 +681,7 @@ "trainingDayChecklist": "Checklist finale", "trainingStart": "Inizio allenamento", "trainingEnd": "Fine allenamento", + "excludeFromBilling": "Exclude from billing", "trainingWindow": "Fascia di allenamento", "trainingWindowUnset": "Non ancora impostato", "groupsLabel": "Gruppi", @@ -714,6 +735,9 @@ "durationExampleShort": "es. 2x7", "showImage": "Mostra immagine/disegno", "participants": "Partecipanti", + "excusedParticipants": "Disabilito", + "availableParticipants": "Possibilità di essere presenti", + "activeMembers": "Membri attivi", "searchParticipants": "Cerca partecipanti", "filterAll": "Tutti", "filterPresent": "Presente", @@ -920,8 +944,6 @@ "tournamentName": "Nome del torneo", "winningSets": "Tariffe vincenti", "numberOfTables": "Numero di tavoli", - "confirmDeleteSetTitle": "Elimina set", - "confirmDeleteSet": "Eliminare questo set?", "table": "Tavolo", "playerOne": "Giocatore 1", "playerTwo": "Giocatore 2", @@ -960,6 +982,7 @@ "doublesTournament": "Torneo di doppio", "doublesTournamentHint": "Cambia tutte le classi esistenti in doppie e crea nuove classi come doppie per impostazione predefinita.", "genderAll": "Tutto", + "genderMixed": "Misto", "minBirthYear": "Nato nell'anno o successivo", "selectClass": "Seleziona Classe", "tabConfig": "Configurazione", @@ -967,6 +990,8 @@ "tabParticipants": "Partecipanti", "tabResults": "Risultati", "tabPlacements": "Posizionamenti", + "confirmDeleteSetTitle": "Elimina set", + "confirmDeleteSet": "Eliminare questo set?", "finalPlacements": "Posizionamenti finali", "groupPlacements": "Posizionamenti di gruppo", "noPlacementsYet": "Nessun posizionamento ancora disponibile.", @@ -989,6 +1014,7 @@ "addExternalParticipant": "Aggiungi partecipante esterno", "firstName": "Nome di battesimo", "lastName": "Cognome", + "optional": "opzionale", "birthdate": "Data di nascita", "addClubMember": "Aggiungi membro del club", "advancersPerGroup": "Promotori per gruppo", @@ -1006,6 +1032,7 @@ "resetGroups": "Reimposta gruppi", "groupsOverview": "Panoramica dei gruppi", "groupNumber": "Gruppo", + "index": "indice", "position": "La piazza", "player": "Pattinatori", "points": "Punti", @@ -1262,6 +1289,7 @@ "statusActionStart": "Inizio" }, "myTischtennis": { + "title": "il mio account di ping-pong", "linkedAccount": "Conto collegato", "passwordSaved": "Password salvata", "yes": "SÌ", @@ -1439,6 +1467,35 @@ "title": "Orari", "subtitle": "Seleziona le squadre, rivedi le partite e tieni sotto controllo le classifiche.", "importSchedule": "Importa pianificazione", + "addMatch": "Add match", + "manualMatchDescription": "Manually maintained matches appear alongside imported Click-TT fixtures.", + "fixtureType": "Fixture type:", + "regularMatch": "Regular match", + "cupMatch": "Cup match", + "friendlyMatch": "Friendly match", + "fixtureTypeDescription": { + "league": "Regular and cup matches are stored in the schedule.", + "cup": "Regular and cup matches are stored in the schedule.", + "friendly": "Friendly matches are managed separately; the details are transferred to the appropriate form." + }, + "ownTeam": "La propria squadra", + "selectTeam": "Seleziona squadra", + "opponent": "Opponent", + "opponentPlaceholder": "Opponent team name", + "venue": "Venue", + "address": "Indirizzo", + "zip": "Postal code", + "city": "City", + "location": "Posizione", + "matchCredentials": "Match credentials (optional)", + "notes": "Note", + "saving": "Saving…", + "manualMatchRequired": "Please fill in the team, opponent, date and time.", + "manualMatchSaved": { + "league": "Regular match added.", + "cup": "Cup match added." + }, + "manualMatchSaveFailed": "Cup match could not be saved.", "galleryLoading": "Caricamento galleria…", "gallery": "Galleria dei membri", "overallSchedule": "Programma generale", @@ -1468,12 +1525,25 @@ "homeTeam": "Squadra di casa", "guestTeam": "Squadra ospite", "result": "Risultato", + "homeGame": "Casa", + "participants": "Partecipanti", + "swapButton": "Scambia", + "away": "Outward", + "homeLabel": "Casa", + "awayLabel": "Lontano", + "swapSuccess": "Home/Away Swapped", + "swapFailed": "Non è stato possibile scambiare Home/Away.", + "plannedShort": "previsto", + "readyShort": "preparato", "ageClass": "Gruppo di età", + "code": "codice", "homePin": "PIN di casa", "guestPin": "PIN di assenza", "noGames": "Nessuna corrispondenza disponibile", "leagueTable": "Classifica della lega", "position": "Posizione", + "team": "squadra", + "teams": "squadre", "matches": "partite", "completedShort": "Completato", "pendingShort": "Aprire", @@ -1494,6 +1564,7 @@ "imageSize": "Dimensione dell'immagine", "noMembersWithImages": "Nessun membro con immagini trovato.", "playerSelection": "Selezione del giocatore", + "vs": "contro", "loadingMembers": "Caricamento membri...", "player": "Giocatore", "ready": "Pronto", @@ -1552,6 +1623,7 @@ "plannedLeague": "Campionato previsto", "plannedLeaguePlaceholder": "es. campionato di zona, dopo la prossima iscrizione …", "plannedLeagueHint": "Facoltativo. Indipendente dal campionato registrato (MyTischtennis).", + "team": "squadra", "teamId": "Identificativo della squadra", "groupId": "Identificativo del gruppo", "association": "Associazione", @@ -1616,6 +1688,7 @@ "noIssues": "Nessun problema di configurazione aperto.", "parseUrlAction": "Controlla l'URL", "myTischtennisUrlPlaceholder": "URL di myTischtennis...", + "teams": "squadre", "planningTitle": "Pianificazione del gruppo", "planningSubtitle": "Distribuisci i membri ai team pianificati, imposta l'ordine e visualizza i compiti aperti.", "searchMembers": "Cerca membro", @@ -1716,6 +1789,7 @@ "title": "Richieste utente in sospeso", "firstName": "Nome di battesimo", "lastName": "Cognome", + "email": "E-mail", "actions": "Azioni", "approve": "Approvare", "reject": "Congedare", @@ -1733,6 +1807,7 @@ "loadingMembers": "Invito dei membri...", "availableRoles": "Ruoli disponibili", "clubMembers": "Membri del club", + "email": "E-mail", "role": "Ruolo", "status": "stato", "actions": "Azioni", @@ -1882,6 +1957,7 @@ "executionTime": "Tempo di esecuzione", "errorLabel": "Errore", "actions": "Azioni", + "details": "Dettagli", "previous": "Precedente", "next": "Prossimo", "page": "Pagina", @@ -1952,7 +2028,10 @@ "noConfigMessage": "Configura prima il trasferimento del membro nelle impostazioni.", "goToSettings": "Impostazioni Dove si va?", "transferConfiguration": "Configurazione della trasmissione", + "server": "server", + "endpoint": "Punto finale", "method": "Metodo", + "format": "formato", "mode": "modalità", "bulkImport": "Importazione in blocco", "single": "Separare", @@ -2008,6 +2087,7 @@ "leagueTables": "Classifica JoomSport", "playersUpdated": "Giocatore aggiornato", "results": "Risultati", + "teams": "squadre", "neverFetched": "Mai recuperato", "refreshStatistics": "Ricarica le statistiche", "errorLoadingAccount": "Errore durante il caricamento dell'account myTischtennis", @@ -2067,6 +2147,7 @@ "title": "Note per", "phone": "Telefono n.", "memberImage": "Membro immagine", + "tags": "tag", "selectTags": "Seleziona Tag", "newNote": "Nuova nota", "add": "Aggiungere", @@ -2087,6 +2168,7 @@ "greeting": "Accogliente", "result": "Immissione dei risultati", "completion": "Completamento", + "vs": "contro", "startTime": "ora di inizio", "endTime": "ora di fine", "setCurrentTime": "Imposta l'ora corrente", @@ -2376,6 +2458,7 @@ "strokeTypeCounter": "Contro", "strokeTypeTopspin": "Rotazione superiore", "strokeTypeFlip": "capovolgere", + "strokeTypeBlock": "Blocco", "strokeTypeSmash": "Schiacciata", "strokeTypeChopDefense": "Difesa tagliata", "strokeTypeLobDefense": "Difesa alta", @@ -2395,6 +2478,7 @@ "animationRunning": "Animazione in corso..." }, "nuscoreAnalyzer": { + "title": "🔍analizzatore nuscore", "description": "Analizza e scarica le risorse nuscore per uso locale", "analyze": "🔍analisi nuscore", "analyzing": "Analizzando...", diff --git a/frontend/src/i18n/locales/ja.json b/frontend/src/i18n/locales/ja.json index 55b30bb4..9b826911 100755 --- a/frontend/src/i18n/locales/ja.json +++ b/frontend/src/i18n/locales/ja.json @@ -37,6 +37,7 @@ "choose": "選択", "apply": "適用", "clear": "クリア", + "details": "詳細", "view": "表示", "name": "名前", "date": "日付", @@ -48,6 +49,8 @@ "enabled": "有効", "disabled": "無効", "required": "必須", + "optional": "オプション", + "in": "ニ", "min": "分", "minutes": "分", "hours": "時間", @@ -55,6 +58,7 @@ "weeks": "週間", "months": "か月", "years": "年", + "ok": "わかりました", "period": "期間", "saving": "保存中..." }, @@ -179,6 +183,7 @@ "memberTransfer": "メンバー転送", "myTischtennisAccount": "myTischtennisアカウント", "clickTtAccount": "HTTV / click-TT アカウント", + "clickTtBrowser": "HTTV / クリックTT", "personalSettings": "個人設定", "logout": "ログアウト", "login": "ログイン", @@ -270,7 +275,7 @@ "tl": "Tagalog (タガログ語)", "th": "ไทย (タイ語)", "fil": "Filipino (フィリピン語)", - "ceb": "Cebuano (Bisaya)" + "ceb": "セブアノ(ビサヤ)" }, "messages": { "success": "成功", @@ -334,6 +339,22 @@ "noGroupsAssigned": "グループ未割り当て", "noGroupsAvailable": "利用可能なグループがありません", "addGroup": "グループを追加...", + "bankAccountSection": "Bank account / SEPA", + "bankAccountLoading": "Loading bank details...", + "accountHolder": "Account holder", + "mandateReference": "Mandate reference", + "signedOn": "Signed on", + "validFrom": "Valid from", + "bankAccountStatus": "状態", + "bankAccountStatusActive": "アクティブ", + "bankAccountStatusPending": "保留中", + "bankAccountStatusRevoked": "Revoked", + "bankAccountNote": "Note", + "saveBankAccount": "Save bank account", + "bankAccountSaved": "Bank account saved successfully.", + "bankAccountLoadError": "Bank account could not be loaded.", + "bankAccountSaveError": "Bank account could not be saved.", + "bankAccountMissingAfterSave": "The bank account could not be found again after saving.", "remove": "削除", "image": "画像", "selectFile": "ファイルを選択", @@ -354,6 +375,7 @@ "lastTrainingFilterNoDate": "最終参加なし", "lastTrainingFilterNotInTraining": "「参加なし」フラグ", "lastTrainingFilterHint": "表:AK列は今シーズン。列にマウスを乗せると両シーズン・最終参加・参加回数(分かる場合)を表示。", + "rowTooltipSeparator": null, "ttAgeClassCol": "年齢(TT)", "ttAdult": "一般(基準日でジュニアではない)", "ttFilterGroupJ": "男女混合", @@ -661,6 +683,7 @@ "trainingDayChecklist": "完了チェック", "trainingStart": "練習開始", "trainingEnd": "練習終了", + "excludeFromBilling": "Exclude from billing", "trainingWindow": "練習時間帯", "trainingWindowUnset": "未設定", "groupsLabel": "グループ", @@ -714,6 +737,9 @@ "durationExampleShort": "例: 2x7", "showImage": "画像/図を表示", "participants": "参加者", + "excusedParticipants": "無効", + "availableParticipants": "出席可能", + "activeMembers": "すべてのメンバー", "searchParticipants": "参加者を検索", "filterAll": "すべて", "filterPresent": "出席", @@ -920,8 +946,6 @@ "tournamentName": "大会名", "winningSets": "勝率", "numberOfTables": "卓数", - "confirmDeleteSetTitle": "セットを削除", - "confirmDeleteSet": "このセットを本当に削除しますか?", "table": "卓", "playerOne": "選手 1", "playerTwo": "選手 2", @@ -960,6 +984,7 @@ "doublesTournament": "ダブルストーナメント", "doublesTournamentHint": "既存のクラスをすべて double に切り替え、デフォルトで新しいクラスを double として作成します。", "genderAll": "全て", + "genderMixed": "混合", "minBirthYear": "年以降生まれ", "selectClass": "クラスの選択", "tabConfig": "構成", @@ -967,6 +992,8 @@ "tabParticipants": "参加者", "tabResults": "結果", "tabPlacements": "配置", + "confirmDeleteSetTitle": "セットを削除", + "confirmDeleteSet": "このセットを本当に削除しますか?", "finalPlacements": "最終順位", "groupPlacements": "グループの配置", "noPlacementsYet": "まだ利用可能な配置はありません。", @@ -989,6 +1016,7 @@ "addExternalParticipant": "外部参加者の追加", "firstName": "ファーストネーム", "lastName": "姓", + "optional": "オプション", "birthdate": "生年月日", "addClubMember": "クラブメンバーを追加", "advancersPerGroup": "グループごとのプロモーター", @@ -1006,10 +1034,12 @@ "resetGroups": "グループのリセット", "groupsOverview": "グループの概要", "groupNumber": "グループ", + "index": "索引", "position": "広場", "player": "スケーター", "points": "ポイント", "sets": "フレーズ", + "diff": "差分", "pointsRatio": "ゲームポイント", "livePosition": "ライブシート", "pairings": "ダブルペアリング", @@ -1262,6 +1292,7 @@ "statusActionStart": "始める" }, "myTischtennis": { + "title": "私の卓球アカウント", "linkedAccount": "リンクされたアカウント", "passwordSaved": "パスワードが保存されました", "yes": "はい", @@ -1423,7 +1454,8 @@ "uploadNote": "注: アクティビティが保存されるまで、画像はアップロードされません。", "uploadedImages": "アップロードされたビデオ:", "delete": "消去", - "cancel": "キャンセル" + "cancel": "キャンセル", + "min": "分" }, "accident": { "reportAccident": "事故の報告", @@ -1439,6 +1471,35 @@ "title": "スケジュール", "subtitle": "チームを選択し、試合日程を確認し、リーグ表を常に表示します。", "importSchedule": "輸入スケジュール", + "addMatch": "Add match", + "manualMatchDescription": "Manually maintained matches appear alongside imported Click-TT fixtures.", + "fixtureType": "Fixture type:", + "regularMatch": "Regular match", + "cupMatch": "Cup match", + "friendlyMatch": "Friendly match", + "fixtureTypeDescription": { + "league": "Regular and cup matches are stored in the schedule.", + "cup": "Regular and cup matches are stored in the schedule.", + "friendly": "Friendly matches are managed separately; the details are transferred to the appropriate form." + }, + "ownTeam": "自分のチーム", + "selectTeam": "チームを選択", + "opponent": "Opponent", + "opponentPlaceholder": "Opponent team name", + "venue": "Venue", + "address": "住所", + "zip": "Postal code", + "city": "City", + "location": "位置", + "matchCredentials": "Match credentials (optional)", + "notes": "注意事項", + "saving": "Saving…", + "manualMatchRequired": "Please fill in the team, opponent, date and time.", + "manualMatchSaved": { + "league": "Regular match added.", + "cup": "Cup match added." + }, + "manualMatchSaveFailed": "Cup match could not be saved.", "galleryLoading": "ギャラリーを読み込み中…", "gallery": "メンバーギャラリー", "overallSchedule": "全体スケジュール", @@ -1468,12 +1529,25 @@ "homeTeam": "ホームチーム", "guestTeam": "アウェイチーム", "result": "結果", + "homeGame": "家", + "participants": "参加者", + "swapButton": "交換", + "away": "外側", + "homeLabel": "家", + "awayLabel": "離れて", + "swapSuccess": "ホーム/アウェイススワップ済み", + "swapFailed": "ホーム/アウェイは交換できませんでした。", + "plannedShort": "計画済み", + "readyShort": "Prepared", "ageClass": "年齢層", + "code": "コード", "homePin": "ホームPIN", "guestPin": "アウェイPIN", "noGames": "利用可能な一致はありません", "leagueTable": "順位表", "position": "位置", + "team": "チーム", + "teams": "チーム", "matches": "マッチ", "completedShort": "完了", "pendingShort": "開ける", @@ -1494,6 +1568,7 @@ "imageSize": "画像サイズ", "noMembersWithImages": "画像のあるメンバーは見つかりませんでした。", "playerSelection": "選手の選択", + "vs": "対", "loadingMembers": "メンバーを読み込んでいます...", "player": "プレーヤー", "ready": "準備ができて", @@ -1552,6 +1627,7 @@ "plannedLeague": "予定リーグ", "plannedLeaguePlaceholder": "例:地区リーグ、次回登録後 …", "plannedLeagueHint": "任意。登録済みリーグ(MyTischtennis)とは別です。", + "team": "チーム", "teamId": "チームID", "groupId": "グループID", "association": "協会", @@ -1616,6 +1692,7 @@ "noIssues": "未解決の構成の問題はありません。", "parseUrlAction": "URLを確認する", "myTischtennisUrlPlaceholder": "myTischtennis URL...", + "teams": "チーム", "planningTitle": "チーム計画", "planningSubtitle": "スケジュールされたチームにメンバーを割り当て、順序を設定し、未解決の割り当てを確認します。", "searchMembers": "メンバーを検索", @@ -1716,6 +1793,7 @@ "title": "保留中のユーザーリクエスト", "firstName": "ファーストネーム", "lastName": "姓", + "email": "電子メール", "actions": "アクション", "approve": "承認する", "reject": "却下する", @@ -1733,6 +1811,7 @@ "loadingMembers": "メンバーを招待中...", "availableRoles": "利用可能な役割", "clubMembers": "クラブ会員", + "email": "電子メール", "role": "役割", "status": "状態", "actions": "アクション", @@ -1883,6 +1962,7 @@ "executionTime": "実行時間", "errorLabel": "エラー", "actions": "アクション", + "details": "詳細", "previous": "前の", "next": "次", "page": "ページ", @@ -1929,10 +2009,12 @@ }, "dialogs": { "info": { - "title": "情報" + "title": "情報", + "ok": "わかりました" }, "confirm": { "title": "確認", + "ok": "わかりました", "cancel": "キャンセル" } }, @@ -1953,7 +2035,10 @@ "noConfigMessage": "最初に設定でメンバーの移行を設定してください。", "goToSettings": "設定 どこへ?", "transferConfiguration": "送信構成", + "server": "サーバ", + "endpoint": "終点", "method": "方法", + "format": "形式", "mode": "モード", "bulkImport": "一括インポート", "single": "シングル", @@ -2009,6 +2094,7 @@ "leagueTables": "JoomSport 順位表", "playersUpdated": "プレーヤーが更新されました", "results": "結果", + "teams": "チーム", "neverFetched": "決して取得されない", "refreshStatistics": "統計をリロードする", "errorLoadingAccount": "myTischtennis アカウントの読み込みエラー", @@ -2068,6 +2154,7 @@ "title": "注意事項", "phone": "電話番号", "memberImage": "画像メンバー", + "tags": "タグ", "selectTags": "タグの選択", "newNote": "新しいメモ", "add": "追加", @@ -2088,6 +2175,7 @@ "greeting": "歓迎する", "result": "結果の入力", "completion": "完了", + "vs": "対", "startTime": "開始時間", "endTime": "終了時間", "setCurrentTime": "現在時刻を設定する", @@ -2171,6 +2259,7 @@ "courtDrawing": { "title": "卓球の練習を構成する", "cancel": "キャンセル", + "ok": "わかりました", "durationMinutes": "継続時間 (分)", "durationText": "期間(テキスト)", "durationTextPlaceholder": "例えば2x5", @@ -2377,6 +2466,7 @@ "strokeTypeCounter": "カウンター", "strokeTypeTopspin": "トップスピン", "strokeTypeFlip": "フリップ", + "strokeTypeBlock": "ブロック", "strokeTypeSmash": "スマッシュ", "strokeTypeChopDefense": "カット守備", "strokeTypeLobDefense": "ロブ守備", @@ -2396,6 +2486,7 @@ "animationRunning": "アニメーション進行中..." }, "nuscoreAnalyzer": { + "title": "🔍 nuscore アナライザー", "description": "ローカルで使用するために nuscore リソースを分析してダウンロードします", "analyze": "🔍 ヌスコア分析", "analyzing": "分析中...", @@ -2549,6 +2640,7 @@ "player": "スケーター", "points": "ポイント", "sets": "フレーズ", + "diff": "差分", "groupMatrices": "グループ行列", "allGames": "すべての都市", "noActivities": "このトレーニング日のアクティビティは記録されませんでした。", @@ -2583,6 +2675,7 @@ "teamGenderLabel": "チーム性別:", "teamAgeGroupLabel": "チーム年齢区分:", "generatedAt": "作成日時:", + "lineupQttr": "(問)TTR", "plannedLeagueLabel": "予定リーグ:" } } diff --git a/frontend/src/i18n/locales/pl.json b/frontend/src/i18n/locales/pl.json index 3bfde991..50d9a344 100755 --- a/frontend/src/i18n/locales/pl.json +++ b/frontend/src/i18n/locales/pl.json @@ -37,6 +37,7 @@ "choose": "Wybierz", "apply": "Zastosuj", "clear": "Wyczyść", + "details": "Bliższe dane", "view": "Pokaż", "name": "nazwa", "date": "Data", @@ -47,6 +48,8 @@ "enabled": "Włączony", "disabled": "Wyłączony", "required": "Wymagane", + "optional": "Opcjonalnie", + "in": "w", "min": "min", "minutes": "minuty", "hours": "godziny", @@ -178,6 +181,7 @@ "memberTransfer": "Transfer członków", "myTischtennisAccount": "Konto myTischtennis", "clickTtAccount": "Konto HTTV / click-TT", + "clickTtBrowser": "HTTV / kliknij-TT", "personalSettings": "Ustawienia osobiste", "logout": "Wyloguj", "login": "Zaloguj", @@ -269,7 +273,7 @@ "tl": "tagalski", "th": "ไทย (Tajski)", "fil": "Filipiński", - "ceb": "Cebuano (Bisaya)" + "ceb": "Cebuański (Bisaya)" }, "messages": { "success": "Sukces", @@ -333,6 +337,22 @@ "noGroupsAssigned": "Brak przypisanych grup", "noGroupsAvailable": "Brak dostępnych grup", "addGroup": "Dodaj grupę...", + "bankAccountSection": "Bank account / SEPA", + "bankAccountLoading": "Loading bank details...", + "accountHolder": "Account holder", + "mandateReference": "Mandate reference", + "signedOn": "Signed on", + "validFrom": "Valid from", + "bankAccountStatus": "status", + "bankAccountStatusActive": "Aktywny", + "bankAccountStatusPending": "Aż do", + "bankAccountStatusRevoked": "Revoked", + "bankAccountNote": "Note", + "saveBankAccount": "Save bank account", + "bankAccountSaved": "Bank account saved successfully.", + "bankAccountLoadError": "Bank account could not be loaded.", + "bankAccountSaveError": "Bank account could not be saved.", + "bankAccountMissingAfterSave": "The bank account could not be found again after saving.", "remove": "Usuń", "image": "Obraz", "selectFile": "Wybierz plik", @@ -353,6 +373,7 @@ "lastTrainingFilterNoDate": "Bez ostatniego treningu", "lastTrainingFilterNotInTraining": "„Nie trenuje już”", "lastTrainingFilterHint": "Tabela: bieżący sezon w kolumnie AK. Pełne szczegóły (oba sezony, ostatni trening, udziały) po najechaniu na wiersz.", + "rowTooltipSeparator": null, "ttAgeClassCol": "Kategoria (TT)", "ttAdult": "Dorośli (brak juniora wg terminu)", "ttFilterGroupJ": "Dziewczęta i chłopcy (mieszane)", @@ -658,6 +679,7 @@ "trainingDayChecklist": "Lista końcowa", "trainingStart": "Początek treningu", "trainingEnd": "Koniec treningu", + "excludeFromBilling": "Exclude from billing", "trainingWindow": "Okno treningowe", "trainingWindowUnset": "Jeszcze nie ustawiono", "groupsLabel": "Grupy", @@ -711,6 +733,9 @@ "durationExampleShort": "np. 2x7", "showImage": "Pokaż obraz/rysunek", "participants": "Uczestnicy", + "excusedParticipants": "Wył.", + "availableParticipants": "Możliwa obecność", + "activeMembers": "Aktywni użytkownicy", "searchParticipants": "Szukaj uczestników", "filterAll": "Wszystkie", "filterPresent": "Obecny", @@ -917,8 +942,6 @@ "tournamentName": "Nazwa turnieju", "winningSets": "Zwycięskie stawki", "numberOfTables": "Liczba stołów", - "confirmDeleteSetTitle": "Usuń seta", - "confirmDeleteSet": "Czy na pewno usunąć tego seta?", "table": "Stół", "playerOne": "Zawodnik 1", "playerTwo": "Zawodnik 2", @@ -956,6 +979,7 @@ "doublesTournament": "Turniej gry podwójnej", "doublesTournamentHint": "Przełącza wszystkie istniejące klasy na podwójne i domyślnie tworzy nowe klasy jako podwójne.", "genderAll": "Wszystko", + "genderMixed": "Mieszany", "minBirthYear": "Urodzony w roku lub później", "selectClass": "Wybierz klasę", "tabConfig": "Konfiguracja", @@ -963,6 +987,8 @@ "tabParticipants": "Uczestnicy", "tabResults": "Wyniki", "tabPlacements": "Miejsca", + "confirmDeleteSetTitle": "Usuń seta", + "confirmDeleteSet": "Czy na pewno usunąć tego seta?", "finalPlacements": "Ostateczne miejsca docelowe", "groupPlacements": "Miejsca grupowe", "noPlacementsYet": "Nie ma jeszcze dostępnych miejsc docelowych.", @@ -985,6 +1011,7 @@ "addExternalParticipant": "Dodaj uczestnika zewnętrznego", "firstName": "Imię", "lastName": "Nazwisko", + "optional": "fakultatywny", "birthdate": "Data urodzenia", "addClubMember": "Dodaj członka klubu", "advancersPerGroup": "Promotorzy na grupę", @@ -1002,10 +1029,12 @@ "resetGroups": "Zresetuj grupy", "groupsOverview": "Przegląd grup", "groupNumber": "Grupa", + "index": "indeks", "position": "Kwadrat", "player": "Łyżwiarze", "points": "Zwrotnica", "sets": "frazesy", + "diff": "Róż", "pointsRatio": "Punkty gry", "livePosition": "Siedzisko na żywo", "pairings": "Podwójne pary", @@ -1258,6 +1287,7 @@ "statusActionStart": "Start" }, "myTischtennis": { + "title": "moje konto w tenisie stołowym", "linkedAccount": "Połączone konto", "passwordSaved": "Hasło zapisane", "yes": "Tak", @@ -1434,6 +1464,35 @@ "title": "Harmonogramy", "subtitle": "Wybieraj drużyny, przeglądaj mecze i kontroluj tabele ligowe.", "importSchedule": "Harmonogram importu", + "addMatch": "Add match", + "manualMatchDescription": "Manually maintained matches appear alongside imported Click-TT fixtures.", + "fixtureType": "Fixture type:", + "regularMatch": "Regular match", + "cupMatch": "Cup match", + "friendlyMatch": "Friendly match", + "fixtureTypeDescription": { + "league": "Regular and cup matches are stored in the schedule.", + "cup": "Regular and cup matches are stored in the schedule.", + "friendly": "Friendly matches are managed separately; the details are transferred to the appropriate form." + }, + "ownTeam": "Własny zespół", + "selectTeam": "Wybierz zespół", + "opponent": "Opponent", + "opponentPlaceholder": "Opponent team name", + "venue": "Venue", + "address": "Adres", + "zip": "Postal code", + "city": "City", + "location": "Lokalizacja", + "matchCredentials": "Match credentials (optional)", + "notes": "Notatki", + "saving": "Saving…", + "manualMatchRequired": "Please fill in the team, opponent, date and time.", + "manualMatchSaved": { + "league": "Regular match added.", + "cup": "Cup match added." + }, + "manualMatchSaveFailed": "Cup match could not be saved.", "galleryLoading": "Ładowanie galerii…", "gallery": "Galeria członków", "overallSchedule": "Ogólny harmonogram", @@ -1463,12 +1522,25 @@ "homeTeam": "Zespół gospodarzy", "guestTeam": "Zespół wyjazdowy", "result": "Wynik", + "homeGame": "Dom", + "participants": "Uczestnicy", + "swapButton": "Zamień", + "away": "Za granicą", + "homeLabel": "Dom", + "awayLabel": "Z dala", + "swapSuccess": "Zamieniono dom/wyjazd", + "swapFailed": "Nie można zamienić pozycji Home/Away.", + "plannedShort": "planowany", + "readyShort": "sporządzono", "ageClass": "Grupa wiekowa", + "code": "kod", "homePin": "Domowy PIN", "guestPin": "PIN wyjazdowy", "noGames": "Brak dostępnych dopasowań", "leagueTable": "Tabela ligowa", "position": "Pozycja", + "team": "zespół", + "teams": "zespoły", "matches": "zapałki", "completedShort": "Zakończony", "pendingShort": "Otwarte", @@ -1547,6 +1619,7 @@ "plannedLeague": "Planowana klasa rozgrywkowa", "plannedLeaguePlaceholder": "np. klasa okręgowa, po następnej deklaracji …", "plannedLeagueHint": "Opcjonalnie. Niezależnie od zgłoszonej ligi (MyTischtennis).", + "team": "zespół", "teamId": "Identyfikator zespołu", "groupId": "Identyfikator grupy", "association": "Stowarzyszenie", @@ -1611,6 +1684,7 @@ "noIssues": "Żadnych otwartych problemów z konfiguracją.", "parseUrlAction": "Sprawdź adres URL", "myTischtennisUrlPlaceholder": "Adres URL mojego Tischtennis...", + "teams": "zespoły", "planningTitle": "Planowanie zespołu", "planningSubtitle": "Przydzielaj członków zaplanowanym zespołom, ustalaj kolejność i przeglądaj otwarte zadania.", "searchMembers": "Wyszukaj członka", @@ -1711,6 +1785,7 @@ "title": "Oczekujące żądania użytkowników", "firstName": "Imię", "lastName": "Nazwisko", + "email": "E-mail", "actions": "Działania", "approve": "Zatwierdzić", "reject": "Odrzucać", @@ -1728,6 +1803,7 @@ "loadingMembers": "Zapraszanie członków...", "availableRoles": "Dostępne role", "clubMembers": "Członkowie klubu", + "email": "E-mail", "role": "Rola", "status": "status", "actions": "Działania", @@ -1876,6 +1952,7 @@ "executionTime": "Czas wykonania", "errorLabel": "Błąd", "actions": "Działania", + "details": "Bliższe dane", "previous": "Poprzedni", "next": "Następny", "page": "Strona", @@ -1945,7 +2022,10 @@ "noConfigMessage": "Najpierw skonfiguruj przeniesienie członka w ustawieniach.", "goToSettings": "Ustawienia Dokąd?", "transferConfiguration": "Konfiguracja transmisji", + "server": "serwer", + "endpoint": "Punkt końcowy", "method": "Metoda", + "format": "format", "mode": "tryb", "bulkImport": "Import zbiorczy", "single": "Pojedynczy", @@ -2001,6 +2081,7 @@ "leagueTables": "Klasyfikacja JoomSport", "playersUpdated": "Gracz zaktualizowany", "results": "Wyniki", + "teams": "zespoły", "neverFetched": "Nigdy nie odzyskane", "refreshStatistics": "Załaduj ponownie statystyki", "errorLoadingAccount": "Błąd ładowania konta myTischtennis", @@ -2060,6 +2141,7 @@ "title": "Notatki dla", "phone": "Nr telefonu", "memberImage": "Członek obrazu", + "tags": "tagi", "selectTags": "Wybierz Tagi", "newNote": "Nowa notatka", "add": "Dodać", @@ -2368,6 +2450,7 @@ "strokeTypeCounter": "Kontra", "strokeTypeTopspin": "Najlepszy obrót", "strokeTypeFlip": "trzepnięcie", + "strokeTypeBlock": "blok", "strokeTypeSmash": "Smecz", "strokeTypeChopDefense": "Obrona podcięciem", "strokeTypeLobDefense": "Obrona lobem", @@ -2387,6 +2470,7 @@ "animationRunning": "Animacja w toku..." }, "nuscoreAnalyzer": { + "title": "🔍 analizator nuscore", "description": "Analizuje i pobiera zasoby nuscore do użytku lokalnego", "analyze": "🔍 analiza nuscore", "analyzing": "Analizuję...", @@ -2540,6 +2624,7 @@ "player": "Łyżwiarze", "points": "Zwrotnica", "sets": "frazesy", + "diff": "Róż", "groupMatrices": "Macierze grupowe", "allGames": "Wszystkie miasta", "noActivities": "W tym dniu szkoleniowym nie zarejestrowano żadnych działań.", diff --git a/frontend/src/i18n/locales/th.json b/frontend/src/i18n/locales/th.json index 9b5a3006..69a20a29 100755 --- a/frontend/src/i18n/locales/th.json +++ b/frontend/src/i18n/locales/th.json @@ -37,6 +37,7 @@ "choose": "เลือก", "apply": "นำไปใช้", "clear": "ล้าง", + "details": "รายละเอียด", "view": "แสดง", "name": "ชื่อ", "date": "วันที่", @@ -48,6 +49,8 @@ "enabled": "เปิดใช้งาน", "disabled": "ปิดใช้งาน", "required": "จำเป็น", + "optional": "ไม่จำเป็น", + "in": "ใน", "min": "นาที", "minutes": "นาที", "hours": "ชั่วโมง", @@ -55,6 +58,7 @@ "weeks": "สัปดาห์", "months": "เดือน", "years": "ปี", + "ok": "ตกลง", "period": "ช่วงเวลา", "saving": "กำลังบันทึก..." }, @@ -179,6 +183,7 @@ "memberTransfer": "การโอนสมาชิก", "myTischtennisAccount": "บัญชี myTischtennis", "clickTtAccount": "บัญชี HTTV / click-TT", + "clickTtBrowser": "HTTV / คลิก-TT", "personalSettings": "การตั้งค่าส่วนตัว", "logout": "ออกจากระบบ", "login": "เข้าสู่ระบบ", @@ -270,7 +275,7 @@ "tl": "Tagalog (ตากาล็อก)", "th": "ไทย", "fil": "Filipino (ฟิลิปปินส์)", - "ceb": "Cebuano (Bisaya)" + "ceb": "เซบูอาโน (บิซายา)" }, "messages": { "success": "สำเร็จ", @@ -285,6 +290,7 @@ "invalidFile": "ไฟล์ไม่ถูกต้อง", "pleaseSelectImageFile": "กรุณาเลือกไฟล์ภาพ", "fileTooLarge": "ไฟล์มีขนาดใหญ่เกินไป", + "imageMaxSize": "รูปภาพต้องมีขนาดสูงสุด 5 MB", "note": "สังเกต" }, "members": { @@ -333,6 +339,24 @@ "noGroupsAssigned": "ยังไม่ได้กำหนดกลุ่ม", "noGroupsAvailable": "ไม่มีกลุ่มให้เลือก", "addGroup": "เพิ่มกลุ่ม...", + "bankAccountSection": "Bank account / SEPA", + "bankAccountLoading": "Loading bank details...", + "accountHolder": "Account holder", + "iban": "ไอแบน", + "bic": "บีไอซี", + "mandateReference": "Mandate reference", + "signedOn": "Signed on", + "validFrom": "Valid from", + "bankAccountStatus": "สถานะ", + "bankAccountStatusActive": "คล่องแคล่ว", + "bankAccountStatusPending": "รอดำเนินการ", + "bankAccountStatusRevoked": "Revoked", + "bankAccountNote": "Note", + "saveBankAccount": "Save bank account", + "bankAccountSaved": "Bank account saved successfully.", + "bankAccountLoadError": "Bank account could not be loaded.", + "bankAccountSaveError": "Bank account could not be saved.", + "bankAccountMissingAfterSave": "The bank account could not be found again after saving.", "remove": "เอาออก", "image": "รูปภาพ", "selectFile": "เลือกไฟล์", @@ -353,6 +377,7 @@ "lastTrainingFilterNoDate": "ไม่มีการเข้าร่วมล่าสุด", "lastTrainingFilterNotInTraining": "ทำเครื่องหมาย «ไม่เข้าร่วมอีกต่อไป»", "lastTrainingFilterHint": "ตาราง: ฤดูกาลปัจจุบันในคอลัมน์ AK รายละเอียดครบ (สองฤดูกาล, การเข้าร่วมล่าสุด, จำนวนครั้ง) เมื่อชี้ที่แถว", + "rowTooltipSeparator": null, "ttAgeClassCol": "รุ่นอายุ (TT)", "ttAdult": "ผู้ใหญ่ (ไม่ใช่เยาวชนตามวันตัด)", "ttFilterGroupJ": "ชายและหญิง (รวม)", @@ -610,6 +635,7 @@ "monthFrom": "เดือนของ", "monthTo": "เดือนถึง", "selfRecipientName": "ชื่อของตัวเอง", + "iban": "ไอแบน", "ibanWithoutCountry": "โดยไม่มีรหัสประเทศ", "hourlyRate": "เงินเดือนรายชั่วโมง", "hoursTotal": "จำนวนชั่วโมง", @@ -660,6 +686,7 @@ "trainingDayChecklist": "รายการตรวจสอบความครบถ้วน", "trainingStart": "เริ่มฝึกซ้อม", "trainingEnd": "สิ้นสุดการฝึกซ้อม", + "excludeFromBilling": "Exclude from billing", "trainingWindow": "ช่วงเวลาฝึกซ้อม", "trainingWindowUnset": "ยังไม่ได้ตั้งค่า", "groupsLabel": "กลุ่ม", @@ -697,6 +724,7 @@ "activityOrTimeblock": "กิจกรรม / ช่วงเวลา", "durationMinutes": "ระยะเวลา (นาที)", "standardActivities": "กิจกรรมมาตรฐาน", + "standardDurationShort": "นาที", "standardActivityAddError": "ไม่สามารถเพิ่มกิจกรรมมาตรฐานได้", "addGroupActivity": "เพิ่มกิจกรรมของกลุ่ม", "addGroupButton": "+ กลุ่ม", @@ -713,6 +741,9 @@ "durationExampleShort": "เช่น 2x7", "showImage": "แสดงรูป/ภาพวาด", "participants": "ผู้เข้าร่วม", + "excusedParticipants": "พิการ", + "availableParticipants": "เป็นไปได้ที่จะอยู่", + "activeMembers": "สมาชิกที่ใช้งานอยู่", "searchParticipants": "ค้นหาผู้เข้าร่วม", "filterAll": "ทั้งหมด", "filterPresent": "มาเข้าร่วม", @@ -730,6 +761,7 @@ "editGroupActivity": "แก้ไขกิจกรรมกลุ่ม", "assignParticipantsForGroupActivity": "กำหนดผู้เข้าร่วมสำหรับกิจกรรมกลุ่ม", "delete": "ลบ", + "min": "นาที", "errorLoadingPredefinedActivities": "เกิดข้อผิดพลาดในการโหลดกิจกรรมที่กำหนดไว้ล่วงหน้า", "selectParticipantAndNote": "กรุณาเลือกผู้เข้าร่วมและใส่ข้อความบันทึก", "selectGroupAndActivity": "กรุณาเลือกกลุ่มและกรอกกิจกรรม", @@ -919,12 +951,11 @@ "tournamentName": "ชื่อทัวร์นาเมนท์", "winningSets": "อัตราการชนะ", "numberOfTables": "จำนวนโต๊ะ", - "confirmDeleteSetTitle": "ลบเซต", - "confirmDeleteSet": "คุณแน่ใจหรือไม่ว่าต้องการลบเซตนี้?", "table": "โต๊ะ", "playerOne": "ผู้เล่น 1", "playerTwo": "ผู้เล่น 2", "groupsLabel": "กลุ่ม", + "knockoutLabel": "เคโอ", "distributeTables": "จัดสรรโต๊ะว่าง", "distributeTablesResult": "การจัดสรรโต๊ะ", "noFreeTables": "ไม่มีโต๊ะว่าง", @@ -959,6 +990,7 @@ "doublesTournament": "การแข่งขันประเภทคู่", "doublesTournamentHint": "สลับคลาสที่มีอยู่ทั้งหมดเป็นสองเท่าและสร้างคลาสใหม่เป็นสองเท่าตามค่าเริ่มต้น", "genderAll": "ทั้งหมด", + "genderMixed": "ผสม", "minBirthYear": "เกิดในปีหรือหลังจากนั้น", "selectClass": "เลือกชั้นเรียน", "tabConfig": "การกำหนดค่า", @@ -966,6 +998,8 @@ "tabParticipants": "ผู้เข้าร่วม", "tabResults": "ผลลัพธ์", "tabPlacements": "ตำแหน่ง", + "confirmDeleteSetTitle": "ลบเซต", + "confirmDeleteSet": "คุณแน่ใจหรือไม่ว่าต้องการลบเซตนี้?", "finalPlacements": "ตำแหน่งสุดท้าย", "groupPlacements": "ตำแหน่งกลุ่ม", "noPlacementsYet": "ยังไม่มีตำแหน่ง", @@ -988,6 +1022,7 @@ "addExternalParticipant": "เพิ่มผู้เข้าร่วมภายนอก", "firstName": "ชื่อ", "lastName": "นามสกุล", + "optional": "ไม่จำเป็น", "birthdate": "วันเกิด", "addClubMember": "เพิ่มสมาชิกคลับ", "advancersPerGroup": "โปรโมเตอร์ต่อกลุ่ม", @@ -1005,10 +1040,12 @@ "resetGroups": "รีเซ็ตกลุ่ม", "groupsOverview": "ภาพรวมของกลุ่ม", "groupNumber": "กลุ่ม", + "index": "ดัชนี", "position": "จัตุรัส", "player": "นักสเก็ต", "points": "คะแนน", "sets": "วลี", + "diff": "ความแตกต่าง", "pointsRatio": "คะแนนเกม", "livePosition": "ที่นั่งสด", "pairings": "การจับคู่คู่", @@ -1261,6 +1298,7 @@ "statusActionStart": "เริ่ม" }, "myTischtennis": { + "title": "บัญชีเทเบิลเทนนิสของฉัน", "linkedAccount": "บัญชีที่เชื่อมโยง", "passwordSaved": "บันทึกรหัสผ่านแล้ว", "yes": "ใช่", @@ -1315,6 +1353,7 @@ "trainingData": "ข้อมูลการฝึกอบรม", "tournamentData": "ข้อมูลการแข่งขัน", "myTischtennisData": "ข้อมูล MyTischtennis", + "cookies": "คุกกี้/ที่เก็บข้อมูลในเครื่อง", "logData": "ไฟล์บันทึก", "recipients": "ผู้รับ" }, @@ -1336,6 +1375,7 @@ "attendingMembers": "สมาชิกที่เข้าร่วม", "noParticipants": "ไม่มีผู้เข้าร่วม", "name": "ชื่อ", + "ttr": "ทีทีอาร์", "birthdate": "วันเกิด", "participations12Months": "การเข้าร่วม (12 เดือน)", "participations3Months": "การเข้าร่วม (3 เดือน)", @@ -1421,7 +1461,8 @@ "uploadNote": "หมายเหตุ: รูปภาพจะไม่ถูกอัพโหลดจนกว่ากิจกรรมจะถูกบันทึก", "uploadedImages": "วิดีโอที่อัปโหลด:", "delete": "ลบ", - "cancel": "ยกเลิก" + "cancel": "ยกเลิก", + "min": "นาที" }, "accident": { "reportAccident": "แจ้งอุบัติเหตุ", @@ -1437,6 +1478,35 @@ "title": "กำหนดการ", "subtitle": "เลือกทีม ตรวจสอบการแข่งขัน และเก็บตารางลีกไว้ในมุมมอง", "importSchedule": "กำหนดการนำเข้า", + "addMatch": "Add match", + "manualMatchDescription": "Manually maintained matches appear alongside imported Click-TT fixtures.", + "fixtureType": "Fixture type:", + "regularMatch": "Regular match", + "cupMatch": "Cup match", + "friendlyMatch": "Friendly match", + "fixtureTypeDescription": { + "league": "Regular and cup matches are stored in the schedule.", + "cup": "Regular and cup matches are stored in the schedule.", + "friendly": "Friendly matches are managed separately; the details are transferred to the appropriate form." + }, + "ownTeam": "ทีมงานของตัวเอง", + "selectTeam": "เลือกทีม", + "opponent": "Opponent", + "opponentPlaceholder": "Opponent team name", + "venue": "Venue", + "address": "ที่อยู่", + "zip": "Postal code", + "city": "City", + "location": "ที่ตั้ง", + "matchCredentials": "Match credentials (optional)", + "notes": "หมายเหตุ", + "saving": "Saving…", + "manualMatchRequired": "Please fill in the team, opponent, date and time.", + "manualMatchSaved": { + "league": "Regular match added.", + "cup": "Cup match added." + }, + "manualMatchSaveFailed": "Cup match could not be saved.", "galleryLoading": "กำลังโหลดแกลเลอรี...", "gallery": "แกลเลอรี่สมาชิก", "overallSchedule": "กำหนดการโดยรวม", @@ -1450,6 +1520,7 @@ "noSelectionMessage": "เลือกตารางโดยรวม ตารางผู้ใหญ่ หรือทีมจากด้านซ้าย", "scheduleTab": "กำหนดการ", "tableTab": "โต๊ะ", + "downloadPDF": "ดาวน์โหลดไฟล์ PDF", "refreshTable": "รีเฟรชตาราง", "tableLoading": "กำลังโหลดตาราง...", "fetchTeamData": "ดึงข้อมูลกำหนดการและผลลัพธ์", @@ -1465,12 +1536,25 @@ "homeTeam": "ทีมเจ้าบ้าน", "guestTeam": "ทีมเยือน", "result": "ผลลัพธ์", + "homeGame": "บ้าน", + "participants": "ผู้เข้าร่วม", + "swapButton": "แลกเปลี่ยน", + "away": "ภายนอก", + "homeLabel": "บ้าน", + "awayLabel": "ห่างออกไป", + "swapSuccess": "สลับทีมเหย้า/เยือน", + "swapFailed": "เหย้า/เยือนไม่สามารถสลับได้", + "plannedShort": "วางแผนไว้", + "readyShort": "เตรียมไว้", "ageClass": "กลุ่มอายุ", + "code": "รหัส", "homePin": "รหัสประจำตัวที่บ้าน", "guestPin": "PIN ออกไป", "noGames": "ไม่มีการแข่งขัน", "leagueTable": "ตารางลีก", "position": "ตำแหน่ง", + "team": "ทีม", + "teams": "ทีม", "matches": "ไม้ขีด", "completedShort": "สมบูรณ์", "pendingShort": "เปิด", @@ -1491,6 +1575,7 @@ "imageSize": "ขนาดภาพ", "noMembersWithImages": "ไม่พบสมาชิกที่มีรูปภาพ", "playerSelection": "การเลือกผู้เล่น", + "vs": "เทียบกับ", "loadingMembers": "กำลังโหลดสมาชิก...", "player": "ผู้เล่น", "ready": "พร้อม", @@ -1549,6 +1634,7 @@ "plannedLeague": "ลีกที่วางแผน", "plannedLeaguePlaceholder": "เช่น ลีกในเขต หลังการลงทะเบียนครั้งถัดไป …", "plannedLeagueHint": "ไม่บังคับ แยกจากลีกที่ลงทะเบียนแล้ว (MyTischtennis)", + "team": "ทีม", "teamId": "รหัสทีม", "groupId": "รหัสกลุ่ม", "association": "สมาคม", @@ -1613,6 +1699,7 @@ "noIssues": "ไม่มีปัญหาการกำหนดค่าแบบเปิด", "parseUrlAction": "ตรวจสอบ URL", "myTischtennisUrlPlaceholder": "myTischtennis URL...", + "teams": "ทีม", "planningTitle": "การวางแผนทีม", "planningSubtitle": "กระจายสมาชิกไปยังทีมที่กำหนดเวลาไว้ กำหนดลำดับ และดูการมอบหมายงานที่เปิดอยู่", "searchMembers": "ค้นหาสมาชิก", @@ -1713,6 +1800,7 @@ "title": "คำขอของผู้ใช้ที่รอดำเนินการ", "firstName": "ชื่อ", "lastName": "นามสกุล", + "email": "อีเมล", "actions": "การดำเนินการ", "approve": "อนุมัติ", "reject": "อนุญาตให้ออกไป", @@ -1730,6 +1818,7 @@ "loadingMembers": "ขอเชิญสมาชิก...", "availableRoles": "บทบาทที่มีอยู่", "clubMembers": "สมาชิกชมรม", + "email": "อีเมล", "role": "บทบาท", "status": "สถานะ", "actions": "การดำเนินการ", @@ -1771,6 +1860,7 @@ "passwordEncrypted": "รหัสผ่านจะถูกเก็บไว้เข้ารหัส", "transferConfigurationTitle": "การกำหนดค่าการส่ง", "transferEndpointPath": "เส้นทางปลายทางการส่งข้อมูล", + "transferEndpointPlaceholder": "/api/สมาชิก/bulk", "transferEndpointHint": "เส้นทางสัมพัทธ์ไปยังจุดสิ้นสุดการส่งข้อมูล (เช่น /api/members/bulk)", "httpMethod": "วิธี HTTP", "transferFormat": "รูปแบบการส่งสัญญาณ", @@ -1850,6 +1940,7 @@ "subtitle": "ภาพรวมของคำขอ API การตอบกลับ และการดำเนินการทั้งหมด", "backend": "การตั้งค่าแบ็กเอนด์", "all": "ทั้งหมด", + "mytischtennis": "มายเทเบิลเทนนิส", "ownBackend": "แบ็กเอนด์ของตัวเอง", "logType": "ประเภทบันทึก", "apiRequests": "คำขอ API", @@ -1877,6 +1968,7 @@ "executionTime": "เวลาดำเนินการ", "errorLabel": "ข้อผิดพลาด", "actions": "การดำเนินการ", + "details": "รายละเอียด", "previous": "ก่อนหน้า", "next": "ต่อไป", "page": "หน้าหนังสือ", @@ -1899,8 +1991,11 @@ "path": "เส้นทาง", "status": "สถานะ", "executionTime": "เวลาดำเนินการ", + "ip": "ไอพี", "schedulerJob": "งานช่างจัดตารางเวลา", - "error": "ข้อผิดพลาด" + "error": "ข้อผิดพลาด", + "requestBody": "ขอเนื้อความ", + "responseBody": "ร่างกายตอบสนอง" } }, "csvImport": { @@ -1921,10 +2016,12 @@ }, "dialogs": { "info": { - "title": "ข้อมูล" + "title": "ข้อมูล", + "ok": "ตกลง" }, "confirm": { "title": "การยืนยัน", + "ok": "ตกลง", "cancel": "ยกเลิก" } }, @@ -1945,7 +2042,10 @@ "noConfigMessage": "กรุณากำหนดค่าการโอนสมาชิกในการตั้งค่าก่อน", "goToSettings": "การตั้งค่า ไปไหน?", "transferConfiguration": "การกำหนดค่าการส่ง", + "server": "เซิร์ฟเวอร์", + "endpoint": "จุดสิ้นสุด", "method": "วิธี", + "format": "รูปแบบ", "mode": "โหมด", "bulkImport": "การนำเข้าจำนวนมาก", "single": "เดี่ยว", @@ -2001,6 +2101,7 @@ "leagueTables": "อันดับ JoomSport", "playersUpdated": "อัปเดตผู้เล่นแล้ว", "results": "ผลลัพธ์", + "teams": "ทีม", "neverFetched": "ไม่เคยเรียกคืน", "refreshStatistics": "โหลดสถิติใหม่", "errorLoadingAccount": "เกิดข้อผิดพลาดในการโหลดบัญชี myTischtennis", @@ -2060,6 +2161,7 @@ "title": "หมายเหตุสำหรับ", "phone": "หมายเลขโทรศัพท์", "memberImage": "สมาชิกภาพ", + "tags": "แท็ก", "selectTags": "เลือกแท็ก", "newNote": "บันทึกใหม่", "add": "เพิ่ม", @@ -2080,6 +2182,7 @@ "greeting": "ยินดีต้อนรับ", "result": "กำลังเข้าสู่ผลลัพธ์", "completion": "เสร็จสิ้น", + "vs": "เทียบกับ", "startTime": "เวลาเริ่มต้น", "endTime": "เวลาสิ้นสุด", "setCurrentTime": "ตั้งเวลาปัจจุบัน", @@ -2163,6 +2266,7 @@ "courtDrawing": { "title": "กำหนดค่าการออกกำลังกายปิงปอง", "cancel": "ยกเลิก", + "ok": "ตกลง", "durationMinutes": "ระยะเวลา (นาที)", "durationText": "ระยะเวลา (ข้อความ)", "durationTextPlaceholder": "เช่น 2x5", @@ -2281,6 +2385,7 @@ "modalDialogs": "บทสนทนาแบบกิริยา", "simpleModal": "กิริยาที่เรียบง่าย", "largeModal": "โมดัลขนาดใหญ่", + "fullscreenModal": "โมดอลแบบเต็มหน้าจอ", "nonModalDialogs": "บทสนทนาที่ไม่ใช่กิริยาช่วย", "nonModalDialog": "บทสนทนาที่ไม่ใช่กิริยาช่วย", "multipleDialogs": "หลายกล่องโต้ตอบ", @@ -2300,6 +2405,7 @@ "largeModalText": "นี่เป็นบทสนทนาแบบโมดอลที่ยอดเยี่ยม", "largeModalText2": "มันมีพื้นที่มากขึ้นสำหรับเนื้อหา", "scrollArea": "พื้นที่เลื่อนสำหรับเนื้อหามากมาย...", + "fullscreenModalTitle": "กล่องโต้ตอบโมดอลแบบเต็มหน้าจอ", "fullscreenModalText": "นี่คือกล่องโต้ตอบแบบเต็มหน้าจอ", "fullscreenModalText2": "ครอบคลุมพื้นที่เกือบทั้งหน้าจอ (90vw x 90vh)", "nonModalTitle": "บทสนทนาที่ไม่ใช่กิริยาช่วย", @@ -2367,6 +2473,7 @@ "strokeTypeCounter": "เคาน์เตอร์", "strokeTypeTopspin": "สปินชั้นนำ", "strokeTypeFlip": "พลิก", + "strokeTypeBlock": "ปิดกั้น", "strokeTypeSmash": "ตบ", "strokeTypeChopDefense": "รับแบบช็อป", "strokeTypeLobDefense": "รับแบบลอบ", @@ -2386,6 +2493,7 @@ "animationRunning": "กำลังดำเนินการแอนิเมชัน..." }, "nuscoreAnalyzer": { + "title": "🔍 เครื่องวิเคราะห์ nuscore", "description": "วิเคราะห์และดาวน์โหลดทรัพยากร nuscore เพื่อการใช้งานในเครื่อง", "analyze": "🔍 การวิเคราะห์นูสคอร์", "analyzing": "กำลังวิเคราะห์...", @@ -2539,6 +2647,7 @@ "player": "นักสเก็ต", "points": "คะแนน", "sets": "วลี", + "diff": "ความแตกต่าง", "groupMatrices": "เมทริกซ์กลุ่ม", "allGames": "เมืองทั้งหมด", "noActivities": "ไม่มีการบันทึกกิจกรรมในวันอบรมนี้", @@ -2573,6 +2682,7 @@ "teamGenderLabel": "เพศทีม:", "teamAgeGroupLabel": "กลุ่มอายุของทีม:", "generatedAt": "สร้างเมื่อ:", + "lineupQttr": "(ถาม)TTR", "plannedLeagueLabel": "ลีกที่วางแผน:" } } diff --git a/frontend/src/i18n/locales/tl.json b/frontend/src/i18n/locales/tl.json index 6a3ac2f3..26165bb8 100755 --- a/frontend/src/i18n/locales/tl.json +++ b/frontend/src/i18n/locales/tl.json @@ -37,6 +37,7 @@ "choose": "Pumili", "apply": "Ilapat", "clear": "Burahin", + "details": "Mga Detalye", "view": "Tingnan", "name": "pangalan", "date": "Petsa", @@ -48,6 +49,8 @@ "enabled": "Pinagana", "disabled": "Hindi pinagana", "required": "Kinakailangan", + "optional": "Opsyonal", + "in": "sa", "min": "min", "minutes": "Minuto", "hours": "Oras", @@ -179,6 +182,7 @@ "memberTransfer": "Paglipat ng miyembro", "myTischtennisAccount": "myTischtennis Account", "clickTtAccount": "HTTV / click-TT account", + "clickTtBrowser": "HTTP / click-TT", "personalSettings": "Mga personal na setting", "logout": "Mag-logout", "login": "Mag-login", @@ -269,8 +273,7 @@ "zh": "中文 (Intsik)", "tl": "Tagalog", "th": "Thai (ไทย)", - "fil": "Filipino", - "ceb": "Cebuano (Bisaya)" + "fil": "Filipino" }, "messages": { "success": "Tagumpay", @@ -334,6 +337,22 @@ "noGroupsAssigned": "Walang grupong nakatalaga", "noGroupsAvailable": "Walang available na grupo", "addGroup": "Magdagdag ng grupo...", + "bankAccountSection": "Bank account / SEPA", + "bankAccountLoading": "Loading bank details...", + "accountHolder": "Account holder", + "mandateReference": "Mandate reference", + "signedOn": "Signed on", + "validFrom": "Valid from", + "bankAccountStatus": "katayuan", + "bankAccountStatusActive": "Aktibo", + "bankAccountStatusPending": "Nakabinbin", + "bankAccountStatusRevoked": "Revoked", + "bankAccountNote": "Note", + "saveBankAccount": "Save bank account", + "bankAccountSaved": "Bank account saved successfully.", + "bankAccountLoadError": "Bank account could not be loaded.", + "bankAccountSaveError": "Bank account could not be saved.", + "bankAccountMissingAfterSave": "The bank account could not be found again after saving.", "remove": "Alisin", "image": "Larawan", "selectFile": "Pumili ng file", @@ -354,6 +373,7 @@ "lastTrainingFilterNoDate": "Walang huling training", "lastTrainingFilterNotInTraining": "Flag na “hindi na nagte-training”", "lastTrainingFilterHint": "Table: kasalukuyang season sa AK. Buong detalye (dalawang season, huling training, participations) kapag-hover sa hilera.", + "rowTooltipSeparator": null, "ttAgeClassCol": "Edad (TT)", "ttAdult": "Adulto (hindi youth sa cutoff)", "ttFilterGroupJ": "Babae at lalaki (halo)", @@ -661,6 +681,7 @@ "trainingDayChecklist": "Checklist ng pagkumpleto", "trainingStart": "Simula ng pagsasanay", "trainingEnd": "Pagtatapos ng pagsasanay", + "excludeFromBilling": "Exclude from billing", "trainingWindow": "Oras ng pagsasanay", "trainingWindowUnset": "Hindi pa naitakda", "groupsLabel": "Mga grupo", @@ -714,6 +735,9 @@ "durationExampleShort": "hal. 2x7", "showImage": "Ipakita ang larawan/guhit", "participants": "Mga kalahok", + "excusedParticipants": "Hindi pinagana", + "availableParticipants": "Posibleng naroroon", + "activeMembers": "Mga aktibong miyembro", "searchParticipants": "Maghanap ng kalahok", "filterAll": "Lahat", "filterPresent": "Dumalo", @@ -920,8 +944,6 @@ "tournamentName": "Pangalan ng tournament", "winningSets": "Mga rate ng panalong", "numberOfTables": "Bilang ng mesa", - "confirmDeleteSetTitle": "Tanggalin ang set", - "confirmDeleteSet": "Sigurado ka bang tatanggalin ang set na ito?", "table": "Mesa", "playerOne": "Manlalaro 1", "playerTwo": "Manlalaro 2", @@ -967,6 +989,8 @@ "tabParticipants": "Mga kalahok", "tabResults": "Mga resulta", "tabPlacements": "Mga paglalagay", + "confirmDeleteSetTitle": "Tanggalin ang set", + "confirmDeleteSet": "Sigurado ka bang tatanggalin ang set na ito?", "finalPlacements": "Mga huling placement", "groupPlacements": "Mga Placement ng Grupo", "noPlacementsYet": "Wala pang available na mga placement.", @@ -989,6 +1013,7 @@ "addExternalParticipant": "Magdagdag ng Panlabas na Kalahok", "firstName": "Pangalan", "lastName": "Apelyido", + "optional": "opsyonal", "birthdate": "Petsa ng kapanganakan", "addClubMember": "Magdagdag ng Miyembro ng Club", "advancersPerGroup": "Mga promoter bawat grupo", @@ -1006,6 +1031,7 @@ "resetGroups": "I-reset ang Mga Grupo", "groupsOverview": "Pangkalahatang-ideya ng mga pangkat", "groupNumber": "Grupo", + "index": "index", "position": "Ang parisukat", "player": "Mga skater", "points": "Mga puntos", @@ -1262,6 +1288,7 @@ "statusActionStart": "Magsimula" }, "myTischtennis": { + "title": "ang aking table tennis account", "linkedAccount": "Naka-link na Account", "passwordSaved": "Na-save ang password", "yes": "Oo", @@ -1316,6 +1343,7 @@ "trainingData": "Data ng pagsasanay", "tournamentData": "Data ng Tournament", "myTischtennisData": "Data ng MyTischtennis", + "cookies": "Cookies/Lokal na Imbakan", "logData": "Mga logfile", "recipients": "tatanggap" }, @@ -1438,6 +1466,35 @@ "title": "Mga iskedyul", "subtitle": "Pumili ng mga koponan, suriin ang mga fixture at panatilihing nakikita ang mga talahanayan ng liga.", "importSchedule": "Iskedyul ng pag-import", + "addMatch": "Add match", + "manualMatchDescription": "Manually maintained matches appear alongside imported Click-TT fixtures.", + "fixtureType": "Fixture type:", + "regularMatch": "Regular match", + "cupMatch": "Cup match", + "friendlyMatch": "Friendly match", + "fixtureTypeDescription": { + "league": "Regular and cup matches are stored in the schedule.", + "cup": "Regular and cup matches are stored in the schedule.", + "friendly": "Friendly matches are managed separately; the details are transferred to the appropriate form." + }, + "ownTeam": "Sariling team", + "selectTeam": "Pumili ng koponan", + "opponent": "Opponent", + "opponentPlaceholder": "Opponent team name", + "venue": "Venue", + "address": "Address", + "zip": "Postal code", + "city": "City", + "location": "Lokasyon", + "matchCredentials": "Match credentials (optional)", + "notes": "Mga Tala", + "saving": "Saving…", + "manualMatchRequired": "Please fill in the team, opponent, date and time.", + "manualMatchSaved": { + "league": "Regular match added.", + "cup": "Cup match added." + }, + "manualMatchSaveFailed": "Cup match could not be saved.", "galleryLoading": "Nilo-load ang gallery…", "gallery": "Gallery ng miyembro", "overallSchedule": "Pangkalahatang iskedyul", @@ -1451,6 +1508,7 @@ "noSelectionMessage": "Piliin ang pangkalahatang iskedyul, ang iskedyul ng pang-adulto o isang koponan mula sa kaliwa.", "scheduleTab": "Iskedyul", "tableTab": "mesa", + "downloadPDF": "Mag-download ng PDF", "refreshTable": "I-refresh ang talahanayan", "tableLoading": "Nilo-load ang talahanayan…", "fetchTeamData": "Kunin ang iskedyul at mga resulta", @@ -1466,12 +1524,25 @@ "homeTeam": "Home team", "guestTeam": "Ang away team", "result": "Resulta", + "homeGame": "Bahay", + "participants": "Mga kalahok", + "swapButton": "Magpalit", + "away": "Panlabas", + "homeLabel": "Bahay", + "awayLabel": "Malayo", + "swapSuccess": "Home/Away Pinagpalit", + "swapFailed": "Hindi mapalitan ang Home/Away.", + "plannedShort": "binalak", + "readyShort": "pinaghandaan", "ageClass": "pangkat ng edad", + "code": "code", "homePin": "PIN ng tahanan", "guestPin": "Away PIN", "noGames": "Walang available na mga tugma", "leagueTable": "Mesa ng liga", "position": "Posisyon", + "team": "pangkat", + "teams": "mga koponan", "matches": "mga posporo", "completedShort": "Nakumpleto", "pendingShort": "Bukas", @@ -1550,6 +1621,7 @@ "plannedLeague": "Plano na liga", "plannedLeaguePlaceholder": "hal. district league, pagkatapos ng susunod na rehistro …", "plannedLeagueHint": "Opsyonal. Hiwalay sa nakarehistrong liga (MyTischtennis).", + "team": "pangkat", "teamId": "ID ng Team", "groupId": "Group ID", "association": "Samahan", @@ -1614,6 +1686,7 @@ "noIssues": "Walang bukas na mga isyu sa configuration.", "parseUrlAction": "Suriin ang URL", "myTischtennisUrlPlaceholder": "myTischtennis URL...", + "teams": "mga koponan", "planningTitle": "Pagpaplano ng pangkat", "planningSubtitle": "Ipamahagi ang mga miyembro sa mga nakaiskedyul na koponan, itakda ang pagkakasunud-sunod, at tingnan ang mga bukas na takdang-aralin.", "searchMembers": "Maghanap ng miyembro", @@ -1714,6 +1787,7 @@ "title": "Nakabinbing Mga Kahilingan ng User", "firstName": "Pangalan", "lastName": "Apelyido", + "email": "E-mail", "actions": "Mga aksyon", "approve": "Aprubahan", "reject": "I-dismiss", @@ -1731,6 +1805,7 @@ "loadingMembers": "Iniimbitahan ang mga miyembro...", "availableRoles": "Mga Magagamit na Tungkulin", "clubMembers": "Mga miyembro ng club", + "email": "E-mail", "role": "Tungkulin", "status": "katayuan", "actions": "Mga aksyon", @@ -1851,6 +1926,7 @@ "subtitle": "Pangkalahatang-ideya ng lahat ng kahilingan, tugon at pagpapatupad ng API", "backend": "Mga Setting ng Backend", "all": "Lahat", + "mytischtennis": "myTable Tennis", "ownBackend": "Sariling backend", "logType": "Uri ng Log", "apiRequests": "Mga Kahilingan sa API", @@ -1878,6 +1954,7 @@ "executionTime": "Oras ng pagpapatupad", "errorLabel": "Error", "actions": "Mga aksyon", + "details": "Mga Detalye", "previous": "Nakaraang", "next": "Susunod", "page": "Pahina", @@ -1901,7 +1978,9 @@ "status": "katayuan", "executionTime": "Oras ng pagpapatupad", "schedulerJob": "Trabaho ng Scheduler", - "error": "Error" + "error": "Error", + "requestBody": "Katawan ng Kahilingan", + "responseBody": "Katawan ng Pagtugon" } }, "csvImport": { @@ -1946,7 +2025,9 @@ "noConfigMessage": "Mangyaring i-configure muna ang paglipat ng miyembro sa mga setting.", "goToSettings": "Mga Setting Saan pupunta?", "transferConfiguration": "Configuration ng Transmission", + "server": "server", "method": "Pamamaraan", + "format": "pormat", "mode": "mode", "bulkImport": "Bultuhang Pag-import", "single": "Walang asawa", @@ -2002,6 +2083,7 @@ "leagueTables": "JoomSport Standings", "playersUpdated": "Na-update ang Manlalaro", "results": "Mga resulta", + "teams": "mga koponan", "neverFetched": "Never Retrieved", "refreshStatistics": "I-reload ang Stats", "errorLoadingAccount": "Error sa paglo-load ng myTischtennis account", @@ -2061,6 +2143,7 @@ "title": "Mga tala para sa", "phone": "Telepono no.", "memberImage": "Miyembro ng Larawan", + "tags": "mga tag", "selectTags": "Piliin ang Mga Tag", "newNote": "Bagong tala", "add": "Idagdag", @@ -2282,6 +2365,7 @@ "modalDialogs": "Mga Modal na Dialogue", "simpleModal": "Simpleng Modal", "largeModal": "Malaking Modal", + "fullscreenModal": "Fullscreen modal", "nonModalDialogs": "Mga di-modal na diyalogo", "nonModalDialog": "Di-modal na diyalogo", "multipleDialogs": "Maramihang Dialog", @@ -2301,6 +2385,7 @@ "largeModalText": "Ito ay isang mahusay na modal dialogue.", "largeModalText2": "Nag-aalok ito ng mas maraming espasyo para sa nilalaman.", "scrollArea": "Mag-scroll area para sa maraming content...", + "fullscreenModalTitle": "Fullscreen modal dialog", "fullscreenModalText": "Ito ay isang fullscreen na dialog.", "fullscreenModalText2": "Sinasakop nito ang halos buong screen (90vw x 90vh).", "nonModalTitle": "Di-modal na diyalogo", @@ -2368,6 +2453,7 @@ "strokeTypeCounter": "Kontra", "strokeTypeTopspin": "Top spin", "strokeTypeFlip": "pitik", + "strokeTypeBlock": "harangan", "strokeTypeSmash": "Basagin", "strokeTypeChopDefense": "Chop defense", "strokeTypeLobDefense": "Lob defense", @@ -2387,6 +2473,7 @@ "animationRunning": "Kasalukuyang ginagawa ang animation..." }, "nuscoreAnalyzer": { + "title": "🔍 nuscore analyzer", "description": "Sinusuri at dina-download ang mga mapagkukunan ng nuscore para sa lokal na paggamit", "analyze": "🔍 nuscore analysis", "analyzing": "Sinusuri...", diff --git a/frontend/src/i18n/locales/zh.json b/frontend/src/i18n/locales/zh.json index fe3dfea0..3494fff8 100755 --- a/frontend/src/i18n/locales/zh.json +++ b/frontend/src/i18n/locales/zh.json @@ -37,6 +37,7 @@ "choose": "选择", "apply": "应用", "clear": "清除", + "details": "细节", "view": "查看", "name": "姓名", "date": "日期", @@ -48,6 +49,8 @@ "enabled": "已启用", "disabled": "已禁用", "required": "必填", + "optional": "选修的", + "in": "在", "min": "分", "minutes": "分钟", "hours": "小时", @@ -55,6 +58,7 @@ "weeks": "周", "months": "个月", "years": "年", + "ok": "好的", "period": "期间", "saving": "正在保存..." }, @@ -179,6 +183,7 @@ "memberTransfer": "成员转移", "myTischtennisAccount": "myTischtennis账户", "clickTtAccount": "HTTV / click-TT 账户", + "clickTtBrowser": "HTTV / 点击 TT", "personalSettings": "个人设置", "logout": "退出登录", "login": "登录", @@ -268,9 +273,9 @@ "ja": "日本語 (日语)", "zh": "中文", "tl": "Tagalog (他加禄语)", - "th": "ไทย (Thai)", - "ceb": "Cebuano (Bisaya)", - "fil": "Filipino (菲律宾语)" + "th": "ไทย(泰语)", + "fil": "Filipino (菲律宾语)", + "ceb": "宿务语(比萨亚语)" }, "messages": { "success": "成功", @@ -334,6 +339,24 @@ "noGroupsAssigned": "未分配任何分组", "noGroupsAvailable": "没有可用分组", "addGroup": "添加分组...", + "bankAccountSection": "Bank account / SEPA", + "bankAccountLoading": "Loading bank details...", + "accountHolder": "Account holder", + "iban": "国际银行账号", + "bic": "商业银行", + "mandateReference": "Mandate reference", + "signedOn": "Signed on", + "validFrom": "Valid from", + "bankAccountStatus": "地位", + "bankAccountStatusActive": "积极的", + "bankAccountStatusPending": "待办的", + "bankAccountStatusRevoked": "Revoked", + "bankAccountNote": "Note", + "saveBankAccount": "Save bank account", + "bankAccountSaved": "Bank account saved successfully.", + "bankAccountLoadError": "Bank account could not be loaded.", + "bankAccountSaveError": "Bank account could not be saved.", + "bankAccountMissingAfterSave": "The bank account could not be found again after saving.", "remove": "移除", "image": "图片", "selectFile": "选择文件", @@ -611,6 +634,7 @@ "monthFrom": "月", "monthTo": "月至", "selfRecipientName": "自己的名字", + "iban": "国际银行账号", "ibanWithoutCountry": "没有国家代码", "hourlyRate": "时薪", "hoursTotal": "小时数", @@ -661,6 +685,7 @@ "trainingDayChecklist": "完成检查", "trainingStart": "训练开始", "trainingEnd": "训练结束", + "excludeFromBilling": "Exclude from billing", "trainingWindow": "训练时间段", "trainingWindowUnset": "尚未设置", "groupsLabel": "分组", @@ -698,6 +723,7 @@ "activityOrTimeblock": "活动 / 时间块", "durationMinutes": "时长(分)", "standardActivities": "标准活动", + "standardDurationShort": "最小", "standardActivityAddError": "无法添加标准活动。", "addGroupActivity": "添加分组活动", "addGroupButton": "+ 分组", @@ -734,6 +760,7 @@ "editGroupActivity": "编辑分组活动", "assignParticipantsForGroupActivity": "为分组活动分配参与者", "delete": "删除", + "min": "最小", "errorLoadingPredefinedActivities": "加载预定义活动时出错", "selectParticipantAndNote": "请选择一位参与者并输入备注文本。", "selectGroupAndActivity": "请选择一个分组并输入活动。", @@ -923,8 +950,6 @@ "tournamentName": "赛事名称", "winningSets": "胜率", "numberOfTables": "球台数量", - "confirmDeleteSetTitle": "删除局", - "confirmDeleteSet": "确定要删除此局吗?", "table": "球台", "playerOne": "选手 1", "playerTwo": "选手 2", @@ -963,6 +988,7 @@ "doublesTournament": "双打比赛", "doublesTournamentHint": "默认情况下,将所有现有类切换为双打并创建新类作为双打。", "genderAll": "全部", + "genderMixed": "混合", "minBirthYear": "年或以后出生", "selectClass": "选择班级", "tabConfig": "配置", @@ -970,6 +996,8 @@ "tabParticipants": "参加者", "tabResults": "结果", "tabPlacements": "配售", + "confirmDeleteSetTitle": "删除局", + "confirmDeleteSet": "确定要删除此局吗?", "finalPlacements": "最终安置", "groupPlacements": "团体安置", "noPlacementsYet": "尚无可用的展示位置。", @@ -992,6 +1020,7 @@ "addExternalParticipant": "添加外部参与者", "firstName": "名", "lastName": "姓", + "optional": "选修的", "birthdate": "出生日期", "addClubMember": "添加俱乐部会员", "advancersPerGroup": "每组发起人", @@ -1009,10 +1038,12 @@ "resetGroups": "重置组", "groupsOverview": "团体概览", "groupNumber": "团体", + "index": "指数", "position": "广场", "player": "溜冰者", "points": "积分", "sets": "短语", + "diff": "差异", "pointsRatio": "游戏点数", "livePosition": "现场座位", "pairings": "双重配对", @@ -1265,6 +1296,7 @@ "statusActionStart": "开始" }, "myTischtennis": { + "title": "我的乒乓球账户", "linkedAccount": "关联账户", "passwordSaved": "密码已保存", "yes": "是的", @@ -1341,6 +1373,7 @@ "attendingMembers": "出席成员", "noParticipants": "无参与者", "name": "姓名", + "ttr": "总温度", "birthdate": "出生日期", "participations12Months": "参与次数(12 个月)", "participations3Months": "参与次数(3 个月)", @@ -1426,7 +1459,8 @@ "uploadNote": "注意:在保存活动之前,不会上传图像。", "uploadedImages": "上传的视频:", "delete": "删除", - "cancel": "取消" + "cancel": "取消", + "min": "分钟" }, "accident": { "reportAccident": "报告事故", @@ -1442,6 +1476,35 @@ "title": "时间表", "subtitle": "选择球队、查看赛程并随时查看联赛表。", "importSchedule": "导入时间表", + "addMatch": "Add match", + "manualMatchDescription": "Manually maintained matches appear alongside imported Click-TT fixtures.", + "fixtureType": "Fixture type:", + "regularMatch": "Regular match", + "cupMatch": "Cup match", + "friendlyMatch": "Friendly match", + "fixtureTypeDescription": { + "league": "Regular and cup matches are stored in the schedule.", + "cup": "Regular and cup matches are stored in the schedule.", + "friendly": "Friendly matches are managed separately; the details are transferred to the appropriate form." + }, + "ownTeam": "自己的团队", + "selectTeam": "选择团队", + "opponent": "Opponent", + "opponentPlaceholder": "Opponent team name", + "venue": "Venue", + "address": "地址", + "zip": "Postal code", + "city": "City", + "location": "地点", + "matchCredentials": "Match credentials (optional)", + "notes": "笔记", + "saving": "Saving…", + "manualMatchRequired": "Please fill in the team, opponent, date and time.", + "manualMatchSaved": { + "league": "Regular match added.", + "cup": "Cup match added." + }, + "manualMatchSaveFailed": "Cup match could not be saved.", "galleryLoading": "正在加载图库...", "gallery": "会员图库", "overallSchedule": "总体日程", @@ -1471,12 +1534,25 @@ "homeTeam": "主队", "guestTeam": "客队", "result": "结果", + "homeGame": "家", + "participants": "参加者", + "swapButton": "交换", + "away": "向外", + "homeLabel": "家", + "awayLabel": "离开", + "swapSuccess": "主客场交换", + "swapFailed": "主/客场无法交换。", + "plannedShort": "计划", + "readyShort": "准备好了", "ageClass": "年龄组", + "code": "代码", "homePin": "家庭密码", "guestPin": "离开密码", "noGames": "没有可用的匹配项", "leagueTable": "联赛表", "position": "位置", + "team": "团队", + "teams": "团队", "matches": "比赛", "completedShort": "完全的", "pendingShort": "打开", @@ -1497,6 +1573,7 @@ "imageSize": "图片尺寸", "noMembersWithImages": "未找到有图片的会员。", "playerSelection": "球员选择", + "vs": "与", "loadingMembers": "正在加载会员...", "player": "玩家", "ready": "准备好", @@ -1555,6 +1632,7 @@ "plannedLeague": "计划联赛", "plannedLeaguePlaceholder": "例如:地区联赛,下次报名后 …", "plannedLeagueHint": "选填。与已报名联赛(MyTischtennis)无关。", + "team": "团队", "teamId": "团队ID", "groupId": "组号", "association": "协会", @@ -1619,6 +1697,7 @@ "noIssues": "没有开放的配置问题。", "parseUrlAction": "检查网址", "myTischtennisUrlPlaceholder": "我的Tischtennis 网址...", + "teams": "团队", "planningTitle": "团队规划", "planningSubtitle": "将成员分配给预定的团队、设置顺序并查看未完成的任务。", "searchMembers": "搜索会员", @@ -1719,6 +1798,7 @@ "title": "待处理的用户请求", "firstName": "名", "lastName": "姓", + "email": "电子邮件", "actions": "行动", "approve": "批准", "reject": "解雇", @@ -1736,6 +1816,7 @@ "loadingMembers": "诚邀会员...", "availableRoles": "可用角色", "clubMembers": "俱乐部会员", + "email": "电子邮件", "role": "角色", "status": "地位", "actions": "行动", @@ -1886,6 +1967,7 @@ "executionTime": "执行时间", "errorLabel": "错误", "actions": "行动", + "details": "细节", "previous": "以前的", "next": "下一个", "page": "页", @@ -1908,6 +1990,7 @@ "path": "小路", "status": "地位", "executionTime": "执行时间", + "ip": "知识产权", "schedulerJob": "调度员工作", "error": "错误", "requestBody": "请求正文", @@ -1932,10 +2015,12 @@ }, "dialogs": { "info": { - "title": "信息" + "title": "信息", + "ok": "好的" }, "confirm": { "title": "确认", + "ok": "好的", "cancel": "取消" } }, @@ -1956,7 +2041,10 @@ "noConfigMessage": "请先在设置中配置会员转账。", "goToSettings": "设置去哪里?", "transferConfiguration": "传输配置", + "server": "服务器", + "endpoint": "端点", "method": "方法", + "format": "格式", "mode": "模式", "bulkImport": "批量导入", "single": "单身的", @@ -2012,6 +2100,7 @@ "leagueTables": "JoomSport 积分榜", "playersUpdated": "球员更新", "results": "结果", + "teams": "团队", "neverFetched": "从未找回", "refreshStatistics": "重新加载统计数据", "errorLoadingAccount": "加载 myTischtennis 帐户时出错", @@ -2071,6 +2160,7 @@ "title": "注意事项", "phone": "电话号码", "memberImage": "形象会员", + "tags": "标签", "selectTags": "选择标签", "newNote": "新笔记", "add": "添加", @@ -2091,6 +2181,7 @@ "greeting": "欢迎", "result": "输入结果", "completion": "完成", + "vs": "与", "startTime": "开始时间", "endTime": "结束时间", "setCurrentTime": "设置当前时间", @@ -2174,6 +2265,7 @@ "courtDrawing": { "title": "配置乒乓球练习", "cancel": "取消", + "ok": "好的", "durationMinutes": "持续时间(分钟)", "durationText": "持续时间(文字)", "durationTextPlaceholder": "例如2x5", @@ -2380,6 +2472,7 @@ "strokeTypeCounter": "反击", "strokeTypeTopspin": "上旋", "strokeTypeFlip": "翻动", + "strokeTypeBlock": "堵塞", "strokeTypeSmash": "扣杀", "strokeTypeChopDefense": "削球防守", "strokeTypeLobDefense": "高吊防守", @@ -2399,6 +2492,7 @@ "animationRunning": "动画制作中..." }, "nuscoreAnalyzer": { + "title": "🔍nuscore分析仪", "description": "分析并下载nuscore资源供本地使用", "analyze": "🔍nuscore分析", "analyzing": "正在分析...", @@ -2552,6 +2646,7 @@ "player": "溜冰者", "points": "积分", "sets": "短语", + "diff": "差异", "groupMatrices": "群矩阵", "allGames": "所有城市", "noActivities": "本训练日没有记录任何活动。", diff --git a/frontend/src/views/NotificationsView.vue b/frontend/src/views/NotificationsView.vue index 9e114d35..e35880cc 100644 --- a/frontend/src/views/NotificationsView.vue +++ b/frontend/src/views/NotificationsView.vue @@ -1,11 +1,11 @@ - + diff --git a/scripts/.i18n-translate-cache.json b/scripts/.i18n-translate-cache.json index ede8c59c..73913fa8 100755 --- a/scripts/.i18n-translate-cache.json +++ b/scripts/.i18n-translate-cache.json @@ -12538,5 +12538,508 @@ "en|zh-CN|Pair": "一对", "en|zh-CN|Exercises by": "练习者", "en|zh-CN|Top spin": "上旋", - "en|zh-CN|flip": "翻动" -} + "en|zh-CN|flip": "翻动", + "de|en|Cebuano (Bisaya)": "Cebuano (Bisaya)", + "de|en|BIC": "BIC", + "de|en|Entschuldigt": "Disabled", + "de|en|Anwesend möglich": "Possible to be present", + "de|en|Aktive Mitglieder": "Active members", + "de|en|Heimspiel": "Home", + "de|en|Tauschen": "Swap", + "de|en|Auswärts": "Outward", + "de|en|Auswärtsspiel": "Away", + "de|en|Heim/Auswärts getauscht": "Home/Away Swapped", + "de|en|Heim/Auswärts konnte nicht getauscht werden.": "Home/Away could not be swapped.", + "de|en|geplant": "planned", + "de|en|bereit": "prepared", + "de|fr|Optional": "option", + "de|fr|in": "à", + "de|fr|Cebuano (Bisaya)": "Cebuano (Biscaye)", + "de|fr|BIC": "BIC", + "de|fr|Min": "Min", + "en|fr|Disabled": "Handicapé", + "en|fr|Possible to be present": "Possibilité d'être présent", + "en|fr|Active members": "Les membres actifs ou adhérents", + "en|fr|Swap": "Swap", + "en|fr|Outward": "Sortants", + "en|fr|Home/Away Swapped": "Accueil/Extérieur Échangé", + "en|fr|Home/Away could not be swapped.": "Accueil/Absent n'a pas pu être échangé.", + "en|fr|planned": "planifié", + "en|fr|prepared": "préparé par", + "de|fr|myTischtennis": "myTischtennis", + "de|fr|Block": "Bloc", + "de|es|Optional": "Opcional", + "de|es|in": "en", + "de|es|Cebuano (Bisaya)": "Cebuano (Vizcaya)", + "de|es|BIC": "BIC", + "de|es|Min": "Mín.", + "en|es|Disabled": "Discapacitado", + "en|es|Possible to be present": "Posibilidad de estar presente", + "en|es|Active members": "Miembros activos", + "en|es|Swap": "Intercambiar", + "en|es|Outward": "Saliente", + "en|es|Home/Away Swapped": "Home/Away Swapped", + "en|es|Home/Away could not be swapped.": "Home/Away no se ha podido intercambiar.", + "en|es|planned": "planeado", + "en|es|prepared": "preparados", + "de|es|Block": "Bloc", + "de|it|Optional": "Opzionale", + "de|it|Cebuano (Bisaya)": "Cebuano (Bisaya)", + "de|it|BIC": "BIC", + "de|it|Min": "Min", + "en|it|Disabled": "Disabilito", + "en|it|Possible to be present": "Possibilità di essere presenti", + "en|it|Active members": "Membri attivi", + "en|it|Swap": "Scambia", + "en|it|Outward": "Outward", + "en|it|Home/Away Swapped": "Home/Away Swapped", + "en|it|Home/Away could not be swapped.": "Non è stato possibile scambiare Home/Away.", + "en|it|planned": "previsto", + "en|it|prepared": "preparato", + "de|it|Block": "Blocco", + "de|pl|Optional": "Opcjonalnie", + "de|pl|in": "w", + "de|pl|Cebuano (Bisaya)": "Cebuański (Bisaya)", + "de|pl|BIC": "BIC", + "de|pl|Min": "Min", + "en|pl|Disabled": "Wył.", + "en|pl|Possible to be present": "Możliwa obecność", + "en|pl|Active members": "Aktywni użytkownicy", + "en|pl|Swap": "Zamień", + "en|pl|Outward": "Za granicą", + "en|pl|Home/Away Swapped": "Zamieniono dom/wyjazd", + "en|pl|Home/Away could not be swapped.": "Nie można zamienić pozycji Home/Away.", + "en|pl|planned": "planowany", + "en|pl|prepared": "sporządzono", + "de|pl|Block": "blok", + "de|ja|Optional": "オプション", + "de|ja|in": "ニ", + "de|ja|Cebuano (Bisaya)": "セブアノ(ビサヤ)", + "de|ja|BIC": "BIC", + "de|ja|Min": "Min", + "en|ja|Disabled": "無効", + "en|ja|Possible to be present": "出席可能", + "en|ja|Active members": "すべてのメンバー", + "en|ja|Swap": "交換", + "en|ja|Outward": "外側", + "en|ja|Home/Away Swapped": "ホーム/アウェイススワップ済み", + "en|ja|Home/Away could not be swapped.": "ホーム/アウェイは交換できませんでした。", + "en|ja|planned": "計画済み", + "en|ja|prepared": "Prepared", + "de|ja|Block": "ブロック", + "en|zh-CN|Swap": "交换", + "en|zh-CN|Outward": "向外", + "en|zh-CN|Home/Away Swapped": "主客场交换", + "en|zh-CN|Home/Away could not be swapped.": "主/客场无法交换。", + "en|zh-CN|planned": "计划", + "en|zh-CN|prepared": "准备好了", + "de|zh-CN|Optional": "选修的", + "de|zh-CN|in": "在", + "de|zh-CN|ไทย (Thai)": "ไทย(泰语)", + "de|zh-CN|Cebuano (Bisaya)": "宿务语(比萨亚语)", + "de|zh-CN|BIC": "商业银行", + "de|zh-CN|Min": "最小", + "de|zh-CN|Block": "堵塞", + "en|th|Disabled": "พิการ", + "en|th|Possible to be present": "เป็นไปได้ที่จะอยู่", + "en|th|Active members": "สมาชิกที่ใช้งานอยู่", + "en|th|Swap": "แลกเปลี่ยน", + "en|th|Outward": "ภายนอก", + "en|th|Home/Away Swapped": "สลับทีมเหย้า/เยือน", + "en|th|Home/Away could not be swapped.": "เหย้า/เยือนไม่สามารถสลับได้", + "en|th|planned": "วางแผนไว้", + "en|th|prepared": "เตรียมไว้", + "de|th|Details": "รายละเอียด", + "de|th|Optional": "ไม่จำเป็น", + "de|th|in": "ใน", + "de|th|OK": "ตกลง", + "de|th|HTTV / click-TT": "HTTV / คลิก-TT", + "de|th|Cebuano (Bisaya)": "เซบูอาโน (บิซายา)", + "de|th|IBAN": "ไอแบน", + "de|th|BIC": "บีไอซี", + "de|th|·": null, + "de|th|Min": "นาที", + "de|th|KO": "เคโอ", + "de|th|Mixed": "ผสม", + "de|th|optional": "ไม่จำเป็น", + "de|th|Index": "ดัชนี", + "de|th|Diff": "ความแตกต่าง", + "de|th|myTischtennis-Account": "บัญชีเทเบิลเทนนิสของฉัน", + "de|th|Cookies/Local Storage": "คุกกี้/ที่เก็บข้อมูลในเครื่อง", + "de|th|TTR": "ทีทีอาร์", + "de|th|QTTR": "QTTR", + "de|th|min": "นาที", + "de|th|Download PDF": "ดาวน์โหลดไฟล์ PDF", + "de|th|Code": "รหัส", + "de|th|Team": "ทีม", + "de|th|Teams": "ทีม", + "de|th|vs": "เทียบกับ", + "de|th|Email": "อีเมล", + "de|th|https://example.com": "https://example.com", + "de|th|/api/auth/login": "/api/auth/login", + "de|th|/api/members/bulk": "/api/สมาชิก/bulk", + "de|th|myTischtennis": "มายเทเบิลเทนนิส", + "de|th|IP": "ไอพี", + "de|th|Request Body": "ขอเนื้อความ", + "de|th|Response Body": "ร่างกายตอบสนอง", + "de|th|Server": "เซิร์ฟเวอร์", + "de|th|Endpoint": "จุดสิ้นสุด", + "de|th|Format": "รูปแบบ", + "de|th|Tags": "แท็ก", + "de|th|Fullscreen Modal": "โมดอลแบบเต็มหน้าจอ", + "de|th|Fullscreen Modal Dialog": "กล่องโต้ตอบโมดอลแบบเต็มหน้าจอ", + "de|th|Block": "ปิดกั้น", + "de|th|🔍 nuscore Analyzer": "🔍 เครื่องวิเคราะห์ nuscore", + "de|th|(Q)TTR": "(ถาม)TTR", + "en|tl|Disabled": "Hindi pinagana", + "en|tl|Possible to be present": "Posibleng naroroon", + "en|tl|Active members": "Mga aktibong miyembro", + "en|tl|Swap": "Magpalit", + "en|tl|Outward": "Panlabas", + "en|tl|Home/Away Swapped": "Home/Away Pinagpalit", + "en|tl|Home/Away could not be swapped.": "Hindi mapalitan ang Home/Away.", + "en|tl|planned": "binalak", + "en|tl|prepared": "pinaghandaan", + "de|tl|Details": "Mga Detalye", + "de|tl|Optional": "Opsyonal", + "de|tl|in": "sa", + "de|tl|OK": "OK", + "de|tl|HTTV / click-TT": "HTTP / click-TT", + "de|tl|Cebuano (Bisaya)": "Cebuano (Bisaya)", + "de|tl|IBAN": "IBAN", + "de|tl|BIC": "BIC", + "de|tl|·": null, + "de|tl|Min": "Min", + "de|tl|KO": "KO", + "de|tl|Mixed": "Mixed", + "de|tl|optional": "opsyonal", + "de|tl|Index": "index", + "de|tl|Diff": "Diff", + "de|tl|myTischtennis-Account": "ang aking table tennis account", + "de|tl|Cookies/Local Storage": "Cookies/Lokal na Imbakan", + "de|tl|TTR": "TTR", + "de|tl|QTTR": "QTTR", + "de|tl|min": "min", + "de|tl|Download PDF": "Mag-download ng PDF", + "de|tl|Code": "code", + "de|tl|Team": "pangkat", + "de|tl|Teams": "mga koponan", + "de|tl|vs": "vs", + "de|tl|Email": "E-mail", + "de|tl|https://example.com": "https://example.com", + "de|tl|/api/auth/login": "/api/auth/login", + "de|tl|/api/members/bulk": "/api/members/bulk", + "de|tl|myTischtennis": "myTable Tennis", + "de|tl|IP": "IP", + "de|tl|Request Body": "Katawan ng Kahilingan", + "de|tl|Response Body": "Katawan ng Pagtugon", + "de|tl|Server": "server", + "de|tl|Endpoint": "Endpoint", + "de|tl|Format": "pormat", + "de|tl|Tags": "mga tag", + "de|tl|Fullscreen Modal": "Fullscreen modal", + "de|tl|Fullscreen Modal Dialog": "Fullscreen modal dialog", + "de|tl|Block": "harangan", + "de|tl|🔍 nuscore Analyzer": "🔍 nuscore analyzer", + "de|tl|(Q)TTR": "(Q)TTR", + "en|ceb|filter": "Salaan", + "en|ceb|status": "", + "en|ceb|min": "min", + "de|ceb|OK": "OK", + "en|ceb|Wed": "Miyerkules", + "en|ceb|Sat": "Sat", + "de|ceb|HTTV / click-TT": "HTTV / mag-click-TT", + "en|ceb|Members": "Mga Miyembro", + "en|ceb|Member info": "Impormasyon sa Miyembro", + "en|ceb|Active members": "Aktibo nga mga miyembro", + "en|ceb|Trial members": "Mga myembro sa pagsulay", + "en|ceb|Inactive members": "Dili aktibo nga mga miyembro", + "en|ceb|Generate phone list": "Paghimo og listahan sa telepono", + "en|ceb|Process group photo": "Litrato sa grupo sa proseso", + "en|ceb|Member photo saved from group photo.": "Ang litrato sa miyembro giluwas gikan sa litrato sa grupo.", + "en|ceb|Only active members are included": "Aktibo nga mga miyembro lamang ang gilakip", + "en|ceb|Update TTR/QTTR from myTischtennis": "I-update ang TTR/QTTR gikan sa myTischtennis", + "en|ceb|Updating...": "Pag-update. ", + "en|ceb|Transfer members": "Mga miyembro sa pagbalhin", + "en|ceb|New member": "Bag-ong miyembro", + "en|ceb|Edit member": "I-edit ang miyembro", + "en|ceb|Create new member": "Paghimo bag-ong miyembro", + "en|ceb|First name": "First name", + "en|ceb|Last name": "Last name", + "en|ceb|Street": "Kalye", + "en|ceb|ZIP code": "Kodigong ZIP", + "en|ceb|City": "Siyudad", + "en|ceb|Birthdate": "Birthdate", + "en|ceb|Phone numbers": "Mga numero sa telepono", + "en|ceb|Email addresses": "Mga adres sa email", + "en|ceb|Add phone number": "Numero sa telepono", + "en|ceb|Add email address": "daguwat", + "en|ceb|Phone number": "Numero sa telepono", + "en|ceb|Email address": "daguwat", + "en|ceb|Parent": "Ginikanan", + "en|ceb|Name (e.g. mother, father)": "Name (e.g. mom, dad)", + "en|ceb|Primary": "Panguna", + "en|ceb|Gender": "Kinatawhan", + "en|ceb|Unknown": "Wala mailhi", + "en|ceb|Male": "Lalaki", + "en|ceb|Female": "Babaye", + "en|ceb|Diverse": "Diverse", + "en|ceb|Pictures allowed online": "Gitugotan ang mga litrato sa online", + "en|ceb|Trial membership": "Miyembro sa pagsulay", + "en|ceb|Membership form handed over": "Porma sa pagkamiyembro nga gitugyan", + "en|ceb|Approved for adults": "Gi-aprubahan alang sa mga hamtong", + "en|ceb|Adult reserve": "Reserva Adulti", + "en|ceb|Wants to play": "Si vreau sa play", + "en|ceb|Training groups": "Mga grupo sa pagbansay", + "en|ceb|No groups assigned": "Wala 'y gitudlo nga mga grupo", + "en|ceb|No groups available": "Wala 'y magamit nga mga grupo", + "en|ceb|Add group...": "verb in a column header displaying group names", + "en|ceb|Bank account / SEPA": "Account sa Bangko/ SEPA", + "en|ceb|Loading bank details...": "Mga detalye sa pagkarga sa bangko...", + "en|ceb|Account holder": "Tag-iya sa account", + "de|ceb|IBAN": "IBAN", + "de|ceb|BIC": "BIC", + "en|ceb|Mandate reference": "Mandato nga pakisayran", + "en|ceb|Signed on": "Gipirmahan sa", + "en|ceb|Valid from": "Valid gikan sa", + "en|ceb|Active": "Aktibo", + "en|ceb|Pending": "Naghulat", + "en|ceb|Revoked": "Nabakwi. ", + "en|ceb|Note": "Pahimangno:", + "en|ceb|Save bank account": "Luwasa ang bank account", + "en|ceb|Bank account saved successfully.": "Malampuson nga naluwas ang account sa bangko.", + "en|ceb|Bank account could not be loaded.": "Ang account sa bangko dili ma-load.", + "en|ceb|Bank account could not be saved.": "Ang account sa bangko dili maluwas.", + "en|ceb|The bank account could not be found again after saving.": "Ang account sa bangko dili makit-an pag-usab pagkahuman sa pagtipig.", + "en|ceb|Remove": "Kuhaa", + "en|ceb|Image": "Imahen", + "en|ceb|Select file": "Pilia ang file", + "en|ceb|Camera": "Camera", + "en|ceb|Member image preview": "Preview sa imahe sa miyembro", + "en|ceb|Change": "Usba", + "en|ceb|Create": "Paghimo", + "en|ceb|Clear fields": "Tin-aw nga mga uma", + "en|ceb|Show inactive members": "Ipakita ang dili aktibo nga mga miyembro", + "en|ceb|Show “Training participations” column": "Ipakita ang kolum sa “Pagbansay sa mga partisipasyon”", + "en|ceb|Age group": "Grupo sa edad", + "en|ceb|Season (cutoff)": "Season (suba nga anhianhi)", + "en|ceb|current": "kasamtangan", + "en|ceb|upcoming": "umaabot", + "en|ceb|Cutoff 1 Jan (DTTB). Boys: J classes only. Girls: J and M.": "Cutoff 1 Jan (DTTB). Mga batang lalaki: Mga klase lang sa J. Mga batang babaye: J ug M.", + "en|ceb|Last training": "Katapusan nga pagbansay", + "en|ceb|With a recorded date": "Uban sa usa ka natala nga petsa", + "en|ceb|No last training": "Wala 'y katapusang pagbansay", + "en|ceb|Flagged “no longer training”": "Flagged “dili na pagbansay-bansay”", + "en|ceb|Age-class column: current and next season. Extra detail (last training, participations) on row hover.": "Kolum sa Klase sa Edad: Karon ug Sunod nga Panahon Dugang nga detalye (katapusang pagbansay, pag-apil) sa row hover.", + "de|ceb|·": "·", + "en|ceb|Age class (TT)": "Klase sa edad (TT)", + "en|ceb|Adults (not youth by cutoff)": "Mga hamtong (dili kabatan-onan pinaagi sa cutoff)", + "en|ceb|Boys & girls (mixed)": "Boy & Girl (mix)", + "en|ceb|Girls only": "Girls lang", + "en|ceb|Adults (18+)": "Adulti (18+)", + "en|ceb|U19": "U19", + "en|ceb|U17 (17 and younger)": "U17 (17 ug mas bata pa)", + "en|ceb|U15": "U15", + "en|ceb|U13": "U13", + "en|ceb|U11": "U11", + "en|ceb|U9": "U9", + "en|ceb|G19": "G19", + "en|ceb|G15": "G15", + "en|ceb|G13": "G13", + "en|ceb|G11": "G11", + "en|ceb|G9": "G9", + "en|ceb|Reset filters": "I-reset ang mga filter", + "en|ceb|Image (web?)": "Ang imahe (WEB?)", + "en|ceb|Trial": "Pagsulay", + "en|ceb|Last name, first name": "Last Name, Unang Ngalan", + "en|ceb|TTR/QTTR": "TTR/QTTR", + "en|ceb|Address": "Address ", + "en|ceb|Actions": "Imuhang binuhatan", + "en|ceb|Phone no.": "Telepono dili.", + "en|ceb|Training participations": "Mga pag-apil sa pagbansay", + "en|ceb|Member image": "Hulagway sa miyembro", + "en|ceb|inactive": "dili aktibo", + "en|ceb|6 or more training participations": "6 o labaw pa nga mga pag-apil sa pagbansay", + "en|ceb|3 or more training participations": "3 o labaw pa nga mga partisipasyon sa pagbansay", + "en|ceb|No longer a trial member": "Dili na jud", + "en|ceb|Deactivate member": "I-deactivate ang myembro", + "en|ceb|Notes": "Mga Sulat", + "en|ceb|Exercises": "Mga ehersisyo", + "en|ceb|Member images": "Mga imahe sa myembro", + "en|ceb|Click TT": "I-klik ang TT", + "en|ceb|member-selection.csv": "member-selection.csv", + "en|ceb|Orders": "Mga mando", + "en|ceb|Orders: {name}": "Mga Order: {name}", + "en|ceb|Orders Across All Clubs": "Mga Order sa Tibuok Tanan nga Mga Klab", + "en|ceb|All orders across clubs can be viewed and managed here.": "Ang tanan nga mga order sa tibuuk nga mga club mahimong makita ug madumala dinhi.", + "en|ceb|Loading orders...": "Pag-load sa mga order...", + "en|ceb|Orders could not be loaded.": "Ang mga order dili ma-load.", + "en|ceb|Order could not be saved.": "Ang order dili maluwas.", + "en|ceb|Search by club, member, or item": "Pagpangita pinaagi sa club, miyembro, o butang", + "en|ceb|All statuses": "Ang tanan nga mga kahimtang", + "en|ceb|All clubs": "Tanan nga mga club", + "en|ceb|All degrees": "Ang tanan nga mga grado", + "en|ceb|Paid": "Bayad", + "en|ceb|Item handed out": "Gihatag nga butang", + "en|ceb|Show completed ones": "Ipakita ang nahuman nga mga", + "en|ceb|Item": "Butang", + "en|ceb|e.g. jersey, hoodie, or paddle case": "gta sa jersey, hoodie, paddle case", + "en|ceb|requested": "gihangyo", + "en|ceb|ordered": "gimando", + "en|ceb|item arrived": "miabot ang butang", + "en|ceb|item handed over": "butang nga gitugyan", + "en|ceb|Cost": "The cost of following jesus", + "en|ceb|budget": "badyet", + "en|ceb|Outstanding": "Outstanding", + "en|ceb|History": "Kasaysayan", + "en|ceb|Created on": "Créer sa", + "en|ceb|Last update": "Katapusan nga pag-update", + "en|ceb|Create order": "Paghimo order", + "en|ceb|The date is set automatically and every change is logged with a date.": "Awtomatiko nga gitakda ang petsa ug ang matag pagbag-o gi-login sa usa ka petsa.", + "en|ceb|There are no orders for this member yet.": "Wala pa 'y mga order alang sa kini nga miyembro.", + "en|ceb|There are currently no orders.": "Sa pagkakaron wala 'y mga order.", + "en|ceb|Club": "Club", + "en|ceb|Member": "Miyembro", + "en|ceb|Invoice": "Invoice", + "en|ceb|Create your own monthly practice lesson bill.": "Paghimo sa imong kaugalingon nga binulan nga praktis nga bill sa leksyon.", + "en|ceb|Step 1: Store template": "Paso 1: Store template", + "en|ceb|Step 2: Create a billing run": "Lakang 2: Paghimo og usa ka billing run", + "en|ceb|Step 3: Generate and download PDF": "Lakang 3: Paghimo ug pag-download sa PDF", + "en|ceb|Upload template": "Pag-upload sa template", + "en|ceb|Template name": "Ngalan sa template", + "en|ceb|Description": "Deskripsyon:", + "en|ceb|PDF template": "Template sa PDF", + "en|ceb|Save Template": "I-save ang Template", + "en|ceb|Delete template": "I-delete ang template", + "en|ceb|Really delete this template?": "I-delete gyud kini nga template?", + "en|ceb|Template has been deleted.": "Gitangtang ang template.", + "en|ceb|Template could not be deleted.": "Dili matanggal ang template.", + "en|ceb|No templates available yet.": "Wala pa magamit nga mga template.", + "en|ceb|Position mapping": "Pag-mapa sa posisyon", + "en|ceb|Adjust and save coordinates once for each field. These positions are used in “Create PDF”.": "Ayuhon ug i-save ang mga koordinasyon kausa alang sa matag natad. Kini nga mga posisyon gigamit sa \"Paghimo og PDF\".", + "en|ceb|Mapping with a click": "Pag-mapa nga adunay usa ka pag-klik", + "en|ceb|Assign fields in the PDF with a click": "I-assign ang mga natad sa PDF nga adunay usa ka pag-klik", + "en|ceb|Select the field, then click in the PDF. The position will be taken over immediately.": "Pilia ang uma, dayon i-klik sa PDF. Ang posisyon kuhaon dayon.", + "en|ceb|Field": "Uma", + "en|ceb|Car suggestions": "Mga sugyot sa awto", + "en|ceb|IBAN boxes reset": "Mga kahon sa IBAN i-reset", + "en|ceb|IBAN boxes have been reset.": "Gi-reset ang mga kahon sa IBAN.", + "en|ceb|Learn IBAN": "Pagkat-on sa IBAN", + "en|ceb|Cancel IBAN learning": "Kanselahon ang pagkat-on sa IBAN", + "en|ceb|IBAN learning: please click on the first IBAN box to be used.": "Pagtuon sa IBAN: palihug i-klik ang una nga kahon sa IBAN nga gamiton.", + "en|ceb|IBAN learning: please click on the last IBAN box to be used.": "Pagtuon sa IBAN: palihug i-klik ang katapusang kahon sa IBAN nga gamiton.", + "en|ceb|IBAN boxes have been assigned from the selected area.": "Ang mga kahon sa IBAN gi-assign gikan sa gipili nga lugar.", + "en|ceb|Car suggestions have been entered. Please check and fine-tune.": "Gisulud ang mga sugyot sa awto. Palihug pagsusi ug pag-tune.", + "en|ceb|Auto suggestions could not be determined.": "Dili matino ang mga sugyot sa awto.", + "en|ceb|PDF preview for mapping could not be loaded.": "Ang preview sa PDF alang sa pagmapa dili ma-load.", + "en|ceb|Save mapping": "I-save ang pagmapa", + "en|ceb|Mapping has been saved.": "Ang mapa naluwas.", + "en|ceb|Mapping could not be saved.": "Ang mapa dili maluwas.", + "en|ceb|Billing run": "Dagan Billing", + "en|ceb|Template": "Template", + "en|ceb|month of": "bulan of", + "en|ceb|month to": "bulan to", + "en|ceb|Own name": "Kaugalingon nga ngalan", + "en|ceb|without country code": "walay country code", + "en|ceb|Hourly salary": "Oras sa suweldo", + "en|ceb|Number of hours": "Gidaghanon sa mga oras", + "en|ceb|Number of hours is automatically calculated from the training days: {hours} h ({count} units).": "Ang gidaghanon sa mga oras awtomatikong gikalkulo gikan sa mga adlaw sa pagbansay: {hours} h ({count} units).", + "en|ceb|Time": "Oras", + "en|ceb|Identifier": "Identifier", + "en|ceb|Hours": "unit-format", + "en|ceb|Same account as last statement": "Parehas nga asoy sama sa katapusang pahayag", + "en|ceb|do not specify": "ayaw pag-esplikar", + "en|ceb|No training sessions found in the selected period.": "Wala 'y mga sesyon sa pagbansay nga nakit-an sa gipili nga panahon.", + "en|ceb|Location": "Lokasyon", + "en|ceb|Date": "Petsa", + "en|ceb|Generate your own billing": "Paghimo sa imong kaugalingon nga billing", + "en|ceb|Generate PDF": "Pagmugna og PDF", + "en|ceb|Generate + download PDF": "Magma + download PDF", + "en|ceb|Create PDF...": "Paghimo (PDF)", + "en|ceb|PDF has been created.": "Gihimo ang PDF.", + "en|ceb|PDF could not be created.": "Dili mahimo ang PDF.", + "en|ceb|Download PDF": "I-download ang PDF", + "en|ceb|PDF could not be downloaded.": "Dili ma-download ang PDF.", + "en|ceb|Delete": "Tangtangon", + "en|ceb|Really delete this generated statement?": "Tinuud nga i-delete kini nga namugna nga pahayag?", + "en|ceb|Billing has been deleted.": "Billing dihapus.", + "en|ceb|Billing could not be deleted.": "Dili mapapas ang billing.", + "en|ceb|Previous billings": "Kaniadto nga mga billing", + "en|ceb|No invoices available yet.": "Wala pang available na invoice.", + "en|ceb|Training diary": "Talaadlawan sa pagbansay", + "en|ceb|No entries": "Walay mga entry", + "en|ceb|Delete date": "I-delete ang petsa", + "en|ceb|Create new": "Paghimo og bag-o", + "en|ceb|Quick add": "Dali nga pagdugang", + "en|ceb|No free training slot found (per group schedule, one year ahead).": "Wala 'y nakit-an nga libre nga slot sa pagbansay (matag iskedyul sa grupo, usa ka tuig sa unahan).", + "en|ceb|Could not create the training day entry.": "Couldn 't Create Training Day Entry.", + "en|ceb|Member gallery": "Galeriya sa miyembro", + "en|ceb|Creating gallery…": "Pagmugna sa gallery...", + "en|ceb|Select training group": "Pagpili og grupo sa pagbansay", + "en|ceb|Please choose...": "Sila Pilih...", + "en|ceb|Suggestion": "Sugyot", + "en|ceb|Next appointment": "Sunod nga appointment", + "en|ceb|Apply suggestion": "Ipadapat ang sugyot", + "en|ceb|Continue without suggestion": "Ipadayon nga wala 'y sugyot", + "en|ceb|Create new date": "Paghimo bag-ong petsa", + "en|ceb|Active training day": "Aktibo nga adlaw sa pagbansay", + "en|ceb|Training day": "Training Day", + "en|ceb|Completion checklist": "Checklist sa pagkompleto", + "en|ceb|Training start": "Pagsugod sa pagbansay", + "en|ceb|Training end": "Kataposan sa pagbansay", + "en|ceb|Exclude from billing": "Dili iapil sa billing", + "en|ceb|Training window": "Bintana sa pagbansay", + "en|ceb|Not set yet": "Wala pa gitakda", + "en|ceb|Groups": "Mga grupo:", + "en|ceb|Create date": "Paghimo petsa", + "en|ceb|Edit training times": "I-edit ang mga oras sa pagbansay", + "en|ceb|Update times": "Mga panahon sa pag-update", + "en|ceb|Group management": "Pagdumala sa grupo", + "en|ceb|Create groups": "Paghimo mga grupo", + "en|ceb|Training plan": "Plano sa pagbansay", + "en|ceb|Planned activities": "Mga giplano nga kalihokan", + "en|ceb|Time blocks": "Mga bloke sa oras", + "en|ceb|Nothing has been entered in the training plan yet.": "Wala pa gihapoy nasulod sa plano sa pagbansay.", + "en|ceb|Add new plan items using the actions above.": "Pagdugang bag-ong mga butang sa plano gamit ang mga aksyon sa taas.", + "en|ceb|Start time": "Oras sa pagsugod", + "en|ceb|Group...": "Maghugpong", + "en|ceb|Time block": "Bloke sa oras", + "en|ceb|Assign participants": "I-assign ang mga partisipante", + "en|ceb|Activities": "Mga kalihokan", + "en|ceb|Free activities": "Libre nga mga kalihokan", + "en|ceb|No free activities have been recorded yet.": "Wala pa 'y natala nga libre nga mga kalihokan.", + "en|ceb|Add activity": "Idugang ang kalihokan", + "en|ceb|Record accident": "Aksidente sa rekord", + "en|ceb|Activity": "Kalihokan", + "en|ceb|Duration": "Gidugayon", + "en|ceb|Activity image": "Larawan sa kalihokan", + "en|ceb|Activity drawing": "Pagdrowing sa kalihokan", + "en|ceb|Today": "Karon", + "en|ceb|Existing groups": "Anaa nga mga grupo", + "en|ceb|Leader": "Lider", + "en|ceb|Delete group": "Pagtangtang sa grupo", + "en|ceb|Number of groups": "Gidaghanon sa mga grupo", + "en|ceb|Add group": "Idugang ang grupo", + "en|ceb|Activity / time block": "Aktibidad / oras block", + "en|ceb|Duration (min)": "Gidugayon (min)", + "en|ceb|Standard activities": "Standard nga mga kalihokan", + "de|ceb|Min": "Min", + "en|ceb|Standard activity could not be added.": "Ang kasagarang kalihokan dili madugang.", + "en|ceb|Add group activity": "Idugang ang kalihokan sa grupo", + "en|ceb|+ Group": "+ Grupo", + "en|ceb|All": "Tanan", + "en|ceb|Select group...": "Pilia ang grupo...", + "en|ceb|Assign": "I-assign", + "en|ceb|Ready": "Andam", + "en|ceb|Open": "Bukas", + "en|ceb|Plan status": "Status sa plano", + "en|ceb|{count} open": "{count} bukas", + "en|ceb|e.g. 2x7 or 3*5": "e.g. 2x7 o 3*5", + "en|ceb|e.g. 2x7": "e.g. 2x7", + "en|ceb|Show image/drawing": "Ipakita ang hulagway/drawing", + "en|ceb|Participants": "Mga partisipante", + "en|ceb|Disabled": "Nabaldado", + "en|ceb|Possible to be present": "Posible nga presente", + "en|ceb|Search participants": "Pangitaa ang mga partisipante", + "en|ceb|Present": "Present" +} \ No newline at end of file diff --git a/scripts/fill-i18n-locales.js b/scripts/fill-i18n-locales.js index 603d54a0..7ef779dc 100755 --- a/scripts/fill-i18n-locales.js +++ b/scripts/fill-i18n-locales.js @@ -33,6 +33,7 @@ const LOCALE_TARGETS = { th: 'th', tl: 'tl', fil: 'tl', + ceb: 'ceb', 'de-CH': 'de', }; @@ -51,6 +52,7 @@ const ALL_FILL_ORDER = [ 'th', 'tl', 'fil', + 'ceb', 'de-CH', ];