@courthive/i18n 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -298,7 +298,134 @@
298
298
  "confirmRemoveUser": "Remove User",
299
299
  "removeUserConfirm": "Are you sure you want to remove",
300
300
  "searchProviders": "Search providers...",
301
- "lastAccess": "Last Access"
301
+ "lastAccess": "Last Access",
302
+ "activeRooms": "Active Rooms",
303
+ "activeRoomsTitle": "Live tournament sessions",
304
+ "noActiveRooms": "No active tournament sessions",
305
+ "tournamentColumn": "Tournament",
306
+ "userCountColumn": "Active Users",
307
+ "presenceLoadError": "Failed to load active rooms",
308
+ "joinedAt": "Joined",
309
+ "anonymous": "Anonymous",
310
+ "refreshNow": "Refresh now",
311
+ "lastRefreshed": "Refreshed {{ago}}s ago",
312
+ "tmxUrlMissing": "Cannot open TMX — server did not provide a TMX URL. Check TMX_URL in the server .env.",
313
+ "createUser": "Create User",
314
+ "archiveProvider": "Archive",
315
+ "deleteProvider": "Delete",
316
+ "resetPassword": "Reset Password",
317
+ "resetPasswordTitle": "Reset Password",
318
+ "newPassword": "New Password",
319
+ "generatePassword": "Generate",
320
+ "passwordCopied": "Password copied to clipboard",
321
+ "passwordReset": "Password reset successfully",
322
+ "passwordResetError": "Failed to reset password",
323
+ "provisioners": "Provisioners",
324
+ "provisionerName": "Provisioner Name",
325
+ "provisionerNamePlaceholder": "e.g. TMX Sandbox",
326
+ "noProvisioners": "No provisioners found",
327
+ "selectProvisioner": "Select a provisioner to view details",
328
+ "searchProvisioners": "Search provisioners...",
329
+ "createProvisioner": "Create Provisioner",
330
+ "editProvisioner": "Edit Provisioner",
331
+ "provisionerCreated": "Provisioner created",
332
+ "createFailed": "Create failed",
333
+ "updateFailed": "Update failed",
334
+ "updated": "Updated",
335
+ "create": "Create",
336
+ "active": "Active",
337
+ "inactive": "Inactive",
338
+ "activate": "Activate",
339
+ "deactivate": "Deactivate",
340
+ "activateProvisioner": "Activate Provisioner",
341
+ "deactivateProvisioner": "Deactivate Provisioner",
342
+ "activateConfirm": "Activate provisioner \"{{name}}\"?",
343
+ "deactivateConfirm": "Deactivate provisioner \"{{name}}\"? Their API keys will stop working.",
344
+ "status": "Status",
345
+ "createdAt": "Created",
346
+ "created": "Created",
347
+ "lastUsed": "Last Used",
348
+ "apiKeys": "API Keys",
349
+ "label": "Label",
350
+ "noKeys": "No API keys",
351
+ "generateKey": "Generate Key",
352
+ "generate": "Generate",
353
+ "generateFailed": "Failed to generate API key",
354
+ "keyLabel": "Key Label",
355
+ "keyLabelPlaceholder": "e.g. Production, Staging",
356
+ "keyGenerated": "API Key Generated",
357
+ "keyRevealWarning": "This is the only time the full key will be shown. Save it somewhere safe before closing this dialog.",
358
+ "copy": "Copy",
359
+ "copiedToClipboard": "Copied to clipboard",
360
+ "revoke": "Revoke",
361
+ "revoked": "Revoked",
362
+ "revokeKey": "Revoke API Key",
363
+ "revokeKeyConfirm": "Revoke key \"{{label}}\"? This cannot be undone.",
364
+ "keyRevoked": "API key revoked",
365
+ "associatedProviders": "Associated Providers",
366
+ "noAssociatedProviders": "No providers associated",
367
+ "associateProvider": "Associate Provider",
368
+ "associate": "Associate",
369
+ "associated": "Provider associated",
370
+ "disassociate": "Remove",
371
+ "disassociateProvider": "Remove Provider Association",
372
+ "disassociateConfirm": "Remove association with \"{{name}}\"?",
373
+ "disassociated": "Provider association removed",
374
+ "selectProviderFirst": "Select a provider first",
375
+ "relationship": "Relationship",
376
+ "owner": "Owner",
377
+ "subsidiary": "Subsidiary",
378
+ "nameRequired": "Name is required",
379
+ "deleteProvisioner": "Delete Permanently",
380
+ "deletePermanently": "Delete permanently",
381
+ "deleteProvisionerWarning": "<strong>This cannot be undone.</strong> All API keys, provider associations, and tournament ownership stamps for \"{{name}}\" will be removed. The providers and their tournaments will <em>not</em> be deleted.",
382
+ "typeNameToConfirm": "Type {{name}} to confirm:",
383
+ "provisionerDeleted": "Provisioner deleted ({{apiKeys}} keys, {{providerAssociations}} associations, {{tournamentStamps}} stamps cleaned up)",
384
+ "deleteFailed": "Delete failed",
385
+ "representatives": "Representatives",
386
+ "noRepresentatives": "No representatives assigned",
387
+ "user": "User",
388
+ "displayName": "Name",
389
+ "granted": "Granted",
390
+ "assignUser": "Assign User",
391
+ "assign": "Assign",
392
+ "remove": "Remove",
393
+ "representativeAssigned": "User assigned as representative",
394
+ "representativeRemoved": "Representative removed",
395
+ "removeRepresentative": "Remove Representative",
396
+ "removeRepresentativeConfirm": "Remove {{email}} as a representative? They will no longer be able to act as this provisioner.",
397
+ "contactEmailCoverage": {
398
+ "label": "Recovery email coverage",
399
+ "loading": "Loading…",
400
+ "verified": "verified",
401
+ "unverified": "pending",
402
+ "missing": "missing",
403
+ "equalsLogin": "= login id",
404
+ "total": "of {{count}} users"
405
+ },
406
+ "audit": {
407
+ "tabLabel": "Audit",
408
+ "title": "Deleted-draw audit trail",
409
+ "tournamentsLabel": "Tournaments",
410
+ "tournamentFilterPlaceholder": "Filter by tournament name or id",
411
+ "deletedDrawsLabel": "Deleted draws",
412
+ "selectTournament": "Select a tournament to view its deleted draws",
413
+ "noTournaments": "No tournaments for this provider",
414
+ "tournamentName": "Tournament",
415
+ "tournamentId": "Tournament ID",
416
+ "startDate": "Start date",
417
+ "drawName": "Draw",
418
+ "eventId": "Event",
419
+ "deletedAt": "Deleted at",
420
+ "deletedBy": "Deleted by",
421
+ "restore": "Restore",
422
+ "restoreTitle": "Restore deleted draw",
423
+ "restorePrompt": "Restoring will re-insert the draw with all of its matchUps, scores, and assignments.",
424
+ "restoreSuccess": "Draw restored",
425
+ "restoreFailure": "Restore failed",
426
+ "calendarLoadError": "Failed to load calendar",
427
+ "deletedDrawsLoadError": "Failed to load deleted draws"
428
+ }
302
429
  },
303
430
  "round_names": {
304
431
  "F": "Final",
@@ -798,7 +925,25 @@
798
925
  "court": "Court",
799
926
  "event": "Event",
800
927
  "round": "Round",
801
- "matchUp": "Match"
928
+ "matchUp": "Match",
929
+ "noScheduledMatchUpsMatch": "No scheduled matchUps match the search",
930
+ "searchScheduledMatchUps": "Search scheduled matchUps...",
931
+ "scheduledTitle": "Scheduled MatchUps",
932
+ "scheduledCount_one": "{{count}} scheduled",
933
+ "scheduledCount_other": "{{count}} scheduled",
934
+ "filterMatchUps": "Filter matchUps",
935
+ "filterClearAll": "Clear All",
936
+ "filterAllEventTypes": "All Event Types",
937
+ "filterAllEvents": "All Events",
938
+ "filterAllFlights": "All Flights",
939
+ "filterAllGenders": "All Genders",
940
+ "filterAllRounds": "All Rounds",
941
+ "groupBy": {
942
+ "event": "By Event",
943
+ "draw": "By Draw",
944
+ "round": "By Round",
945
+ "structure": "By Structure"
946
+ }
802
947
  },
803
948
  "penalties": {
804
949
  "fail2signout": "Failed to Sign Out",
@@ -831,7 +976,12 @@
831
976
  "error": "Error",
832
977
  "success": "Success",
833
978
  "required": "Required",
834
- "send": "Send"
979
+ "send": "Send",
980
+ "details": "Details",
981
+ "validationDetails": "Validation details",
982
+ "dismiss": "Dismiss",
983
+ "iSavedIt": "I saved it",
984
+ "remove": "Remove"
835
985
  },
836
986
  "modals": {
837
987
  "deleteEvents": {
@@ -861,7 +1011,9 @@
861
1011
  "emailPlaceholder": "valid@email.com",
862
1012
  "passwordLabel": "Password",
863
1013
  "passwordPlaceholder": "minimum 8 characters",
864
- "loginButton": "Login"
1014
+ "loginButton": "Login",
1015
+ "magicLinkButton": "Email me a login link",
1016
+ "forgotPassword": "Forgot your password?"
865
1017
  },
866
1018
  "settings": {
867
1019
  "title": "Settings",
@@ -887,7 +1039,8 @@
887
1039
  "themeDark": "Dark",
888
1040
  "themeSystem": "System",
889
1041
  "font": "Font",
890
- "dangerZone": "Danger Zone"
1042
+ "dangerZone": "Danger Zone",
1043
+ "schedule2": "Schedule Page 2"
891
1044
  },
892
1045
  "editTournamentName": {
893
1046
  "title": "Edit Tournament Name",
@@ -956,7 +1109,10 @@
956
1109
  "representing": "Representing",
957
1110
  "notes": "Notes",
958
1111
  "split": "Split…",
959
- "ignore": "Ignore"
1112
+ "ignore": "Ignore",
1113
+ "participantRole": "Role (player, coach, physio, …)",
1114
+ "teamKey": "Team (group into team participants)",
1115
+ "jerseyNumber": "Jersey number"
960
1116
  },
961
1117
  "ratingAuto": "Auto-detect",
962
1118
  "eventPickerPlaceholder": "(select event…)",
@@ -1134,7 +1290,9 @@
1134
1290
  "devMode": "Dev mode",
1135
1291
  "services": "Services",
1136
1292
  "tournamentProfiles": "Tournament Profiles (fetch)",
1137
- "invite": "Invite"
1293
+ "invite": "Invite",
1294
+ "providerRole": "Provider Role",
1295
+ "existingUserAdded": "{{email}} already had an account — added to {{provider}} as {{role}}."
1138
1296
  },
1139
1297
  "fetchTournament": {
1140
1298
  "title": "Fetch tournament details",
@@ -1200,7 +1358,8 @@
1200
1358
  "createTeam": {
1201
1359
  "title": "Create Team",
1202
1360
  "selectAttribute": "Select attribute",
1203
- "create": "Create"
1361
+ "create": "Create",
1362
+ "teamAffiliation": "Team affiliation"
1204
1363
  },
1205
1364
  "getLatLong": {
1206
1365
  "title": "Location",
@@ -1304,6 +1463,131 @@
1304
1463
  "cancel": "Cancel",
1305
1464
  "apply": "Apply",
1306
1465
  "venueWarning": "Venue hours are ${startTime}–${endTime}. The venue will be widened to accommodate this change."
1466
+ },
1467
+ "editCategories": {
1468
+ "title": "Tournament Categories",
1469
+ "intro": "Add or remove categories defined for this tournament. Categories in use cannot be edited or removed — change them by replacing the events that reference them.",
1470
+ "add": "+ Add category",
1471
+ "empty": "No categories defined yet.",
1472
+ "duplicate": "A category with that name or code already exists.",
1473
+ "confirmDelete": "Delete \"{{name}}\"? This cannot be undone.",
1474
+ "deleteBlocked": "Cannot delete \"{{name}}\" — used by {{count}} event(s): {{events}}. Remove or reassign those events first.",
1475
+ "deleteDisabledHint": "This category is used by one or more events. Remove or reassign those events first.",
1476
+ "unused": "Unused",
1477
+ "usageCount": "{{count}} event(s)",
1478
+ "usageList": "{{name}} is used by: {{events}}"
1479
+ },
1480
+ "firstLogin": {
1481
+ "title": "Set your password",
1482
+ "intro": "Your account was created with a temporary password. Choose a new password to finish signing in.",
1483
+ "newPasswordLabel": "New password",
1484
+ "newPasswordPlaceholder": "minimum 8 characters",
1485
+ "confirmPasswordLabel": "Confirm password",
1486
+ "confirmPasswordPlaceholder": "re-enter new password",
1487
+ "setPassword": "Set password",
1488
+ "failed": "Could not set your password. Please try again.",
1489
+ "tokenExpired": "This sign-in session expired. Please log in again."
1490
+ },
1491
+ "forgotPassword": {
1492
+ "title": "Reset your password",
1493
+ "intro": "Enter the email address associated with your account. If we know you, a password-reset link is on the way — check your inbox.",
1494
+ "label": "Contact email",
1495
+ "submit": "Send reset link",
1496
+ "sent": "If we know you, a password-reset link is on the way. Check your inbox (and your spam folder).",
1497
+ "networkError": "Couldn't reach the server — please try again."
1498
+ },
1499
+ "createUser": {
1500
+ "title": "Create User",
1501
+ "create": "Create",
1502
+ "loginEmail": "Login id",
1503
+ "contactEmail": "Contact email (optional)",
1504
+ "password": "Password",
1505
+ "successCopied": "Created {{email}}. Temporary password copied to clipboard.",
1506
+ "successEmailed": "Created. A \"set your password\" link was sent to {{email}}.",
1507
+ "successPlain": "Created {{email}}.",
1508
+ "failed": "Failed to create user.",
1509
+ "emailExists": "A user with email {{email}} already exists."
1510
+ },
1511
+ "archiveProvider": {
1512
+ "title": "Archive provider — {{provider}}",
1513
+ "intro": "Archiving exports everything associated with {{provider}} ({{abbr}}) to disk, then removes it from the live database. The archive is recoverable via the backend revive-provider.mjs script.",
1514
+ "loading": "Loading blast-radius preview…",
1515
+ "previewFailed": "Couldn't load preview. Try again, or refresh the page.",
1516
+ "confirmLabel": "Type the provider abbreviation ({{abbr}}) to confirm:",
1517
+ "submit": "Archive provider",
1518
+ "success": "Archived {{abbr}} — {{tournaments}} tournaments. Archive id: {{archiveId}}.",
1519
+ "failed": "Archive failed.",
1520
+ "counts": {
1521
+ "tournaments": "Tournaments",
1522
+ "userAssociations": "User associations",
1523
+ "provisionerAssociations": "Provisioner associations",
1524
+ "tournamentAssignments": "Tournament assignments",
1525
+ "officialRecords": "Official records",
1526
+ "sanctioningRecords": "Sanctioning records",
1527
+ "tournamentProvisioner": "Tournament-provisioner links",
1528
+ "pendingSaves": "Pending saves",
1529
+ "calendars": "Calendars",
1530
+ "topologies": "Topology templates",
1531
+ "catalogItems": "Catalog items",
1532
+ "policies": "Policies",
1533
+ "auditLogRows": "Audit log rows (preserved, not deleted)"
1534
+ }
1535
+ },
1536
+ "deleteProvider": {
1537
+ "title": "Delete provider — {{provider}}",
1538
+ "warning": "Irreversible — no archive, no recovery.",
1539
+ "warningDetail": "Use Archive instead if there's any chance this data will be needed later. Delete is for providers with no real data (demo/test accounts).",
1540
+ "intro": "Permanently delete {{provider}} ({{abbr}}) and all its associated data. Audit log rows are preserved, but every other table will be wiped.",
1541
+ "acknowledge": "I understand this cannot be undone.",
1542
+ "submit": "Delete permanently",
1543
+ "success": "Deleted {{abbr}} — {{tournaments}} tournaments destroyed.",
1544
+ "failed": "Delete failed."
1545
+ },
1546
+ "contactEmail": {
1547
+ "title": "Recovery email",
1548
+ "label": "Recovery email",
1549
+ "save": "Save",
1550
+ "resend": "Resend verification",
1551
+ "savedPending": "Verification email sent to {{email}}.",
1552
+ "resent": "Verification email sent.",
1553
+ "alreadyVerified": "Recovery email is already verified.",
1554
+ "failed": "Could not update recovery email. Please try again.",
1555
+ "statusNotSet": "No recovery email set. Add one so you can recover access if you lose your password.",
1556
+ "statusPending": "Pending verification — check {{email}} and click the link.",
1557
+ "statusVerified": "Verified: {{email}}"
1558
+ },
1559
+ "editUser": {
1560
+ "providers": "Providers",
1561
+ "noProviders": "This user has no provider associations.",
1562
+ "noProvidersAtYourScope": "This user has no associations at your provider.",
1563
+ "addProvider": "Add",
1564
+ "addProviderPlaceholder": "Select a provider...",
1565
+ "providerAdded": "Provider added",
1566
+ "providerRemoved": "Provider association removed",
1567
+ "providerRoleUpdated": "Role updated to {{role}}",
1568
+ "removeProviderTitle": "Remove provider association",
1569
+ "removeProviderConfirm": "Remove this user's association with {{provider}}? This action cannot be undone."
1570
+ },
1571
+ "teamProfile": {
1572
+ "title": "Team profile",
1573
+ "roster": "Roster",
1574
+ "coaches": "Coaches",
1575
+ "staff": "Staff",
1576
+ "empty": "No members on this team yet.",
1577
+ "columns": {
1578
+ "name": "Name",
1579
+ "sex": "Sex",
1580
+ "role": "Role",
1581
+ "contact": "Contact"
1582
+ },
1583
+ "counts": {
1584
+ "players_one": "{{count}} player",
1585
+ "players_other": "{{count}} players",
1586
+ "coaches_one": "{{count}} coach",
1587
+ "coaches_other": "{{count}} coaches",
1588
+ "staff_one": "{{count}} staff",
1589
+ "staff_other": "{{count}} staff"
1590
+ }
1307
1591
  }
1308
1592
  },
1309
1593
  "dashboard": {
@@ -1323,7 +1607,9 @@
1323
1607
  "noEliminationStructures": "No elimination structures",
1324
1608
  "viewCompetitiveness": "View competitiveness",
1325
1609
  "viewBracket": "View bracket",
1326
- "allStructures": "All structures"
1610
+ "allStructures": "All structures",
1611
+ "categories": "Categories ({{count}})",
1612
+ "noneSet": "None"
1327
1613
  },
1328
1614
  "drawers": {
1329
1615
  "editTournament": {
@@ -1453,7 +1739,10 @@
1453
1739
  "missingMethodsArray": "Missing methods array",
1454
1740
  "missingTournament": "Missing tournament",
1455
1741
  "devVariableError": "An error occurred while adding dev variables",
1456
- "cannotDeleteParticipant": "Participant is assigned to a draw and cannot be deleted"
1742
+ "cannotDeleteParticipant": "Participant is assigned to a draw and cannot be deleted",
1743
+ "magicLinkSent": "If an account exists for that email, a login link is on its way.",
1744
+ "magicLinkInvalid": "That login link is invalid or has expired. Please request a new one.",
1745
+ "addedTeamParticipants": "Generated {{count}} team participant(s) from the team column"
1457
1746
  },
1458
1747
  "loginMenu": {
1459
1748
  "authorization": "Authorization",
@@ -1553,7 +1842,9 @@
1553
1842
  "events": "Events",
1554
1843
  "teams": "Teams",
1555
1844
  "cityState": "City/State",
1556
- "nickname": "Nickname"
1845
+ "nickname": "Nickname",
1846
+ "role": "Role",
1847
+ "teamAffiliation": "Team affiliation"
1557
1848
  },
1558
1849
  "bracket": {
1559
1850
  "participant": "Participant",
@@ -1724,7 +2015,15 @@
1724
2015
  "updateCourtNames": "Update court names",
1725
2016
  "openingTime": "Opening Time",
1726
2017
  "closingTime": "Closing Time",
1727
- "timeOrderError": "Opening time must be before closing time"
2018
+ "timeOrderError": "Opening time must be before closing time",
2019
+ "websiteLabel": "Website URL",
2020
+ "imageLabel": "Image URL",
2021
+ "addressLine1Label": "Street address",
2022
+ "cityLabel": "City",
2023
+ "stateLabel": "State / region",
2024
+ "postalCodeLabel": "Postal code",
2025
+ "countryCodeLabel": "Country",
2026
+ "countryCodePlaceholder": "Start typing a country name"
1728
2027
  }
1729
2028
  },
1730
2029
  "events": {
@@ -1841,7 +2140,8 @@
1841
2140
  "male": "Male",
1842
2141
  "female": "Female",
1843
2142
  "unknown": "Unknown"
1844
- }
2143
+ },
2144
+ "staff": "Staff"
1845
2145
  }
1846
2146
  },
1847
2147
  "overlays": {
@@ -1989,7 +2289,16 @@
1989
2289
  "cityState": "City / State",
1990
2290
  "events": "Events",
1991
2291
  "rank": "Rank",
1992
- "noParticipants": "No participants"
2292
+ "noParticipants": "No participants",
2293
+ "teamsHeading": "Teams",
2294
+ "teamCounts": {
2295
+ "players_one": "{{count}} player",
2296
+ "players_other": "{{count}} players",
2297
+ "coaches_one": "{{count}} coach",
2298
+ "coaches_other": "{{count}} coaches",
2299
+ "staff_one": "{{count}} staff",
2300
+ "staff_other": "{{count}} staff"
2301
+ }
1993
2302
  },
1994
2303
  "display": {
1995
2304
  "label": "Display",
@@ -2024,5 +2333,205 @@
2024
2333
  "additional": "Additional Information",
2025
2334
  "dressCode": "Dress code",
2026
2335
  "contingencyPlan": "Weather contingency"
2027
- }
2336
+ },
2337
+ "provisioner": {
2338
+ "myProviders": "My Providers",
2339
+ "users": "Users",
2340
+ "noProviders": "No providers yet — create one to get started",
2341
+ "noUsers": "No users for this provider",
2342
+ "createProvider": "Create Provider",
2343
+ "createUser": "Create User",
2344
+ "openInTmx": "Open in TMX",
2345
+ "providerNamePlaceholder": "e.g. IONSport Demos",
2346
+ "providerAbbrPlaceholder": "e.g. IONDEMO",
2347
+ "providerCreated": "Provider created",
2348
+ "providerFieldsRequired": "Name and abbreviation are required",
2349
+ "userCreated": "User created",
2350
+ "userFieldsRequired": "Email and external ID are required",
2351
+ "selectProvider": "Select a provider…",
2352
+ "selectProviderFirst": "Select a provider first"
2353
+ },
2354
+ "manageAccess": {
2355
+ "title": "Manage Tournament Access",
2356
+ "tournament": "Tournament",
2357
+ "grantedAccess": "Granted Access",
2358
+ "addUser": "Add User",
2359
+ "emailPlaceholder": "user@example.com",
2360
+ "grant": "Grant",
2361
+ "revoke": "Revoke",
2362
+ "noAssignments": "No users have been granted access yet.",
2363
+ "loadError": "Failed to load assignments.",
2364
+ "grantError": "Failed to grant access.",
2365
+ "revokeError": "Failed to revoke access.",
2366
+ "granted": "{{email}} granted access",
2367
+ "revoked": "{{email}} access revoked"
2368
+ },
2369
+ "providerConfig": {
2370
+ "editCapsButton": "Edit Caps",
2371
+ "editCapsTitle": "Edit Caps — {{name}}",
2372
+ "editCapsTitleGeneric": "Edit Provider Caps",
2373
+ "editSettingsButton": "Edit Settings",
2374
+ "editSettingsTitle": "Edit Settings — {{name}}",
2375
+ "editSettingsTitleGeneric": "Edit Provider Settings",
2376
+ "section": {
2377
+ "branding": "Branding (white labeling)",
2378
+ "permissionCeilings": "Permission Ceilings",
2379
+ "permissionChoices": "Permissions",
2380
+ "allowedUniverses": "Allowed Universes",
2381
+ "allowedSelections": "Allowed Selections",
2382
+ "policies": "Policies",
2383
+ "defaults": "Defaults",
2384
+ "integrations": "Integrations",
2385
+ "privacy": "Participant Privacy",
2386
+ "themeTokens": "Theme tokens (CSS variables)"
2387
+ },
2388
+ "privacy": {
2389
+ "settingsHint": "Each toggle below relaxes the default privacy policy for one participant attribute. Leave off (the default) to keep that attribute private.",
2390
+ "cityState": "Publish City / State on participants"
2391
+ },
2392
+ "permissions": {
2393
+ "ceilingHint": "Each permission set to OFF here will be locked off for the provider — they cannot enable it.",
2394
+ "choiceHint": "Disable any permission your tournament directors should not perform. Permissions locked off by the provisioner are greyed out.",
2395
+ "lockedByProvisioner": "Locked by provisioner — cannot be enabled."
2396
+ },
2397
+ "allowed": {
2398
+ "universeHint": "Comma-separated list. Empty means unrestricted (everything allowed).",
2399
+ "selectionHint": "Comma-separated list. Empty means use the full provisioner-allowed universe."
2400
+ },
2401
+ "branding": {
2402
+ "appName": "App name",
2403
+ "navbarLogoUrl": "Navbar logo URL",
2404
+ "navbarLogoAlt": "Navbar logo alt text",
2405
+ "navbarLogoHeight": "Navbar logo height (px)",
2406
+ "splashLogoUrl": "Splash logo URL",
2407
+ "accentColor": "Accent color (CSS)",
2408
+ "stylesheetUrl": "Provider stylesheet URL (escape hatch)"
2409
+ },
2410
+ "defaults": {
2411
+ "defaultEventType": "Default event type",
2412
+ "defaultDrawType": "Default draw type",
2413
+ "defaultCreationMethod": "Default creation method",
2414
+ "defaultGender": "Default gender"
2415
+ },
2416
+ "policies": {
2417
+ "schedulingPolicy": "Scheduling policy (JSON)",
2418
+ "scoringPolicy": "Scoring policy (JSON)",
2419
+ "seedingPolicy": "Seeding policy (JSON)",
2420
+ "policyJsonPlaceholder": "{ ... }",
2421
+ "invalidJson": "Invalid JSON"
2422
+ },
2423
+ "capsSaved": "Caps saved",
2424
+ "settingsSaved": "Settings saved",
2425
+ "invalid": "Validation failed — see field errors below",
2426
+ "saveFailed": "Save failed",
2427
+ "loadCapsForGating": "Loading caps to determine which fields are locked...",
2428
+ "themeTokens": {
2429
+ "label": "Custom CSS variable overrides",
2430
+ "hint": "Token names must start with --tmx- or --chc-. Values are CSS color / length / font strings. Applied at boot and on provider switch.",
2431
+ "preset": "Preset",
2432
+ "chooseAPreset": "Choose a preset…",
2433
+ "add": "+ Add token",
2434
+ "remove": "Remove",
2435
+ "invalidPrefix": "Token name must start with --tmx- or --chc-"
2436
+ }
2437
+ },
2438
+ "banners": {
2439
+ "contactEmail": {
2440
+ "missing": "Set up a contact email so you can recover your password by email.",
2441
+ "pending": "Verify {{email}} so you can recover your password by email.",
2442
+ "setUp": "Set up email",
2443
+ "review": "Review"
2444
+ }
2445
+ },
2446
+ "verifyEmail": {
2447
+ "title": "Verify your email",
2448
+ "intro": "Click the button below to confirm that this email is yours.",
2449
+ "verifyButton": "Verify email",
2450
+ "verifying": "Verifying…",
2451
+ "success": "Verified ✓ — you can now receive password-recovery email at {{email}}. You may close this tab.",
2452
+ "successPlain": "Verified ✓. You may close this tab.",
2453
+ "missingToken": "This verification link is missing its token. Try clicking the link in your email again, or request a fresh one from the contact-email settings.",
2454
+ "tokenExpired": "This verification link has expired. Request a fresh one from your contact-email settings.",
2455
+ "tokenMismatch": "This link no longer matches your current contact email — it was probably superseded by a more recent change.",
2456
+ "tryAgain": "Try again",
2457
+ "failed": "Verification failed. Try requesting a fresh link."
2458
+ },
2459
+ "resetPassword": {
2460
+ "title": "Set a new password",
2461
+ "intro": "Choose a new password for your CourtHive account. The link in your email is single-use.",
2462
+ "newPasswordPlaceholder": "New password (at least 8 characters)",
2463
+ "confirmPlaceholder": "Confirm new password",
2464
+ "submit": "Set new password",
2465
+ "submitting": "Setting…",
2466
+ "success": "Your password was changed. Redirecting to login…",
2467
+ "missingToken": "This reset link is missing its token. Try clicking the link in your email again, or request a fresh one.",
2468
+ "tokenExpired": "This reset link has expired. Request a fresh one from the login screen's \"Forgot your password?\" link.",
2469
+ "tokenMismatch": "This link no longer matches your current contact email — request a fresh one.",
2470
+ "failed": "Couldn't reset your password. Try requesting a fresh link."
2471
+ },
2472
+ "noAccess": {
2473
+ "title": "No admin access",
2474
+ "message": "Your account doesn't have access to the admin console. If you manage a tournament, use the TMX app instead. Contact your provider administrator if you believe this is an error.",
2475
+ "logOut": "Log out"
2476
+ },
2477
+ "admin": {
2478
+ "abbreviation": "Abbreviation",
2479
+ "providerId": "Provider ID",
2480
+ "impersonating": "Impersonating this provider",
2481
+ "tournaments": "Tournaments",
2482
+ "noTournaments": "No tournaments found",
2483
+ "tournamentName": "Tournament",
2484
+ "startDate": "Start",
2485
+ "endDate": "End",
2486
+ "calendarLoadError": "Could not load calendar",
2487
+ "policyDefinitions": "Policy Definitions",
2488
+ "policyEditorComingSoon": "Policy editor coming soon.",
2489
+ "quickActions": "Quick Actions",
2490
+ "manageProviders": "Manage Providers",
2491
+ "manageUsers": "Manage Users",
2492
+ "backToSystem": "Back to System",
2493
+ "noProviderSelected": "No Provider Selected",
2494
+ "selectProviderHint": "Select a provider from the System page to view their admin dashboard.",
2495
+ "dashboard": "Dashboard",
2496
+ "providerDashboardComingSoon": "Provider dashboard coming soon.",
2497
+ "runAudit": "Run Audit",
2498
+ "auditClean": "All {{total}} calendar entries verified in storage",
2499
+ "auditWarning": "{{missing}} of {{total}} calendar entries missing from storage",
2500
+ "auditError": "Calendar audit failed",
2501
+ "tournamentDetail": "Tournament Detail",
2502
+ "selectTournament": "Select a tournament from the calendar to view details.",
2503
+ "loadingTournament": "Loading tournament info...",
2504
+ "tournamentNotFound": "Tournament info not available.",
2505
+ "tournamentLoadError": "Could not load tournament info.",
2506
+ "tournamentMissingFromStorage": "This tournament exists in the calendar but not in storage.",
2507
+ "participants": "Participants",
2508
+ "venues": "Venues",
2509
+ "event": "Event",
2510
+ "type": "Type",
2511
+ "entries": "Entries",
2512
+ "draws": "Draws",
2513
+ "noEvents": "No events"
2514
+ },
2515
+ "ams": {
2516
+ "officials": "Officials",
2517
+ "rosters": "Rosters",
2518
+ "membership": "Membership",
2519
+ "sanctioning": "Sanctioning",
2520
+ "conferences": "Conferences",
2521
+ "sids": "SID Tools",
2522
+ "seamPlaceholder": "Coming soon — built by WS-14–16."
2523
+ },
2524
+ "console": {
2525
+ "title": "CourtHive Console",
2526
+ "amsSection": "Associate Management",
2527
+ "platformSection": "Platform Admin"
2528
+ },
2529
+ "recoveryEmail": "Recovery email",
2530
+ "recoveryEmailHelp": "Real mailbox for password recovery. Separate from the login email above.",
2531
+ "verified": "Verified",
2532
+ "unverified": "Unverified",
2533
+ "sendVerification": "Send verification",
2534
+ "verificationSent": "Verification email sent",
2535
+ "alreadyVerified": "Recovery email already verified",
2536
+ "noRecoveryEmail": "No recovery email set"
2028
2537
  }