strapi-plugin-magic-link-v5 5.5.9 → 6.0.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.
Files changed (58) hide show
  1. package/CHANGELOG.md +733 -0
  2. package/README.md +662 -928
  3. package/dist/admin/LicenseGuard-BgLA9go3.mjs +495 -0
  4. package/dist/admin/LicenseGuard-ewCjpc17.js +513 -0
  5. package/dist/admin/de-B1FNErPH.mjs +673 -0
  6. package/dist/admin/de-e75OECdq.js +673 -0
  7. package/dist/admin/en-CABKGbxH.js +673 -0
  8. package/dist/admin/en-HqDOFBCc.mjs +673 -0
  9. package/dist/admin/es-DpWl0Fax.js +673 -0
  10. package/dist/admin/es-jb94jqPR.mjs +673 -0
  11. package/dist/admin/fr-BQhLPvYw.js +673 -0
  12. package/dist/admin/fr-BseH1wrr.mjs +673 -0
  13. package/dist/admin/index-6ot9j1cN.js +5268 -0
  14. package/dist/admin/index-B390rccl.js +622 -0
  15. package/dist/admin/index-BPGKtruf.mjs +5266 -0
  16. package/dist/admin/index-BaTIQtnA.js +3869 -0
  17. package/dist/admin/index-CmG-93yx.js +141 -0
  18. package/dist/admin/index-DXe_ge4v.mjs +620 -0
  19. package/dist/admin/index-Dv5PVT1E.mjs +3867 -0
  20. package/dist/admin/index-k240ls6p.mjs +142 -0
  21. package/dist/admin/index.js +3 -3
  22. package/dist/admin/index.mjs +1 -2
  23. package/dist/admin/pt-CPkaveti.js +673 -0
  24. package/dist/admin/pt-DhlSCJn2.mjs +673 -0
  25. package/dist/admin/useUnsavedChangesGuard-BVZ4Mg4E.js +225 -0
  26. package/dist/admin/useUnsavedChangesGuard-QnkiZTLP.mjs +224 -0
  27. package/dist/server/i18n/de.json +32 -1
  28. package/dist/server/i18n/en.json +32 -1
  29. package/dist/server/i18n/es.json +32 -1
  30. package/dist/server/i18n/fr.json +32 -1
  31. package/dist/server/i18n/pt.json +32 -1
  32. package/dist/server/index.js +7092 -5971
  33. package/dist/server/index.mjs +7115 -5972
  34. package/package.json +42 -41
  35. package/strapi-admin.js +3 -1
  36. package/strapi-server.js +3 -2
  37. package/dist/_chunks/LicenseGuard-CiyjFnrw.js +0 -54
  38. package/dist/_chunks/LicenseGuard-DJ5fq2UZ.mjs +0 -55
  39. package/dist/_chunks/de-BSOk5suQ.js +0 -454
  40. package/dist/_chunks/de-CwhYs3O3.mjs +0 -454
  41. package/dist/_chunks/en-DnvSpXvu.js +0 -454
  42. package/dist/_chunks/en-gXXgGDV1.mjs +0 -454
  43. package/dist/_chunks/es-B-tnwByt.js +0 -407
  44. package/dist/_chunks/es-DG5gW3RZ.mjs +0 -407
  45. package/dist/_chunks/fr-BKo8t7Fx.js +0 -407
  46. package/dist/_chunks/fr-BQn1OHOR.mjs +0 -407
  47. package/dist/_chunks/index-01GHNxSr.js +0 -307
  48. package/dist/_chunks/index-5jsDgD-q.mjs +0 -330
  49. package/dist/_chunks/index-BWuj-5WE.js +0 -5068
  50. package/dist/_chunks/index-Bj3H_Z4B.js +0 -142
  51. package/dist/_chunks/index-CC4Eu9Dm.js +0 -332
  52. package/dist/_chunks/index-Csyi13vd.mjs +0 -2891
  53. package/dist/_chunks/index-DJqXiiP1.js +0 -2893
  54. package/dist/_chunks/index-DQUYFsLT.mjs +0 -143
  55. package/dist/_chunks/index-Dufv-daf.mjs +0 -305
  56. package/dist/_chunks/index-szeYJKpN.mjs +0 -5066
  57. package/dist/_chunks/pt-CjEkXBAz.js +0 -407
  58. package/dist/_chunks/pt-trziAOzT.mjs +0 -407
@@ -0,0 +1,673 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const enTranslations = {
4
+ "magic-link.Form.title.License": "License",
5
+ "magic-link.Form.title.Settings": "Settings",
6
+ "magic-link.Header.Settings": "Magic Link",
7
+ "magic-link.common.actions": "Actions",
8
+ "magic-link.common.cancel": "Cancel",
9
+ "magic-link.common.clearSelection": "Clear selection",
10
+ "magic-link.common.clipboard.copied": "Copied to clipboard",
11
+ "magic-link.common.clipboard.failed": "Copy failed. Select the text and copy it manually.",
12
+ "magic-link.common.close": "Close",
13
+ "magic-link.common.confirm": "Confirm",
14
+ "magic-link.common.created": "Created",
15
+ "magic-link.common.delete": "Delete",
16
+ "magic-link.common.emptyValue": "-",
17
+ "magic-link.common.entries": "{count} entries",
18
+ "magic-link.common.entriesPerPage": "Entries per page",
19
+ "magic-link.common.error.generic": "Something went wrong. Please try again.",
20
+ "magic-link.common.expiresAt": "Expires At",
21
+ "magic-link.common.language.followAdmin": "Same as admin interface",
22
+ "magic-link.common.loading": "Loading...",
23
+ "magic-link.common.loadingBannedIPs": "Loading banned IP addresses...",
24
+ "magic-link.common.loadingSessions": "Loading JWT sessions...",
25
+ "magic-link.common.next": "Next",
26
+ "magic-link.common.pageTitle": "{page} | Magic Link",
27
+ "magic-link.common.permissions.loadError": "Your permissions could not be loaded. Reload the page to try again.",
28
+ "magic-link.common.previous": "Previous",
29
+ "magic-link.common.search.clear": "Clear search",
30
+ "magic-link.common.searchIPPlaceholder": "Search by IP address...",
31
+ "magic-link.common.searchPlaceholder": "Search by email, username or IP...",
32
+ "magic-link.common.status": "Status",
33
+ "magic-link.common.table.pagination.goTo": "Go to page {page}",
34
+ "magic-link.common.table.pagination.label": "Pagination",
35
+ "magic-link.common.table.pagination.more": "More pages",
36
+ "magic-link.common.table.pagination.summary": "Showing {from}-{to} of {total}",
37
+ "magic-link.common.table.retry": "Try again",
38
+ "magic-link.common.tableHeaders.ipAddress": "IP Address",
39
+ "magic-link.common.tableHeaders.sortByCreated": "Sort by created date",
40
+ "magic-link.common.tableHeaders.sortByExpiry": "Sort by expiry date",
41
+ "magic-link.common.tableHeaders.sortByStatus": "Sort by status",
42
+ "magic-link.common.tableHeaders.sortByUser": "Sort by user",
43
+ "magic-link.common.unsaved.badge": "Unsaved changes",
44
+ "magic-link.common.unsaved.cancel": "Keep editing",
45
+ "magic-link.common.unsaved.confirm": "Discard changes",
46
+ "magic-link.common.unsaved.description": "You have unsaved changes. If you continue, they will be lost.",
47
+ "magic-link.common.unsaved.title": "Discard unsaved changes?",
48
+ "magic-link.common.user": "User",
49
+ "magic-link.common.userAgent": "User Agent",
50
+ "magic-link.ipban.actions.ban": "Ban IP",
51
+ "magic-link.ipban.actions.refresh": "Refresh",
52
+ "magic-link.ipban.actions.unban": "Unban",
53
+ "magic-link.ipban.actions.unbanFor": "Unban {ip}",
54
+ "magic-link.ipban.dialog.unban.body": "Requests from {ip} are allowed again. Deactivated tokens stay deactivated.",
55
+ "magic-link.ipban.dialog.unban.title": "Unban IP address?",
56
+ "magic-link.ipban.empty.action": "Ban first IP",
57
+ "magic-link.ipban.empty.clearSearch": "Clear search",
58
+ "magic-link.ipban.empty.description": "No IP addresses are currently banned. Add an IP to block it.",
59
+ "magic-link.ipban.empty.descriptionReadOnly": "No IP addresses are currently banned.",
60
+ "magic-link.ipban.empty.noMatches.description": "Check the address or clear the search.",
61
+ "magic-link.ipban.empty.noMatches.title": "No banned IP matches your search",
62
+ "magic-link.ipban.empty.title": "No Banned IPs",
63
+ "magic-link.ipban.filters.label": "Filter banned IP addresses",
64
+ "magic-link.ipban.modal.cancel": "Cancel",
65
+ "magic-link.ipban.modal.hint": "Enter an IPv4 or IPv6 address",
66
+ "magic-link.ipban.modal.invalidIP": "Please enter a valid IP address",
67
+ "magic-link.ipban.modal.label": "IP Address",
68
+ "magic-link.ipban.modal.placeholder": "e.g. 203.0.113.10",
69
+ "magic-link.ipban.modal.submit": "Ban IP",
70
+ "magic-link.ipban.modal.subtitle": "Add an IP address to the block list",
71
+ "magic-link.ipban.modal.title": "Ban IP Address",
72
+ "magic-link.ipban.modal.warning": "Warning: This IP address will be immediately blocked and all associated tokens will be deactivated.",
73
+ "magic-link.ipban.notifications.banError": "Error banning IP",
74
+ "magic-link.ipban.notifications.banSuccess": "IP {ip} has been banned",
75
+ "magic-link.ipban.notifications.errorTitle": "Error",
76
+ "magic-link.ipban.notifications.loadError": "Banned IP addresses could not be loaded.",
77
+ "magic-link.ipban.notifications.refreshSuccess": "IP list updated",
78
+ "magic-link.ipban.notifications.successTitle": "Success",
79
+ "magic-link.ipban.notifications.unbanError": "Error unbanning IP",
80
+ "magic-link.ipban.notifications.unbanSuccess": "IP {ip} has been unbanned",
81
+ "magic-link.ipban.permission.denied": "You do not have permission to view banned IP addresses.",
82
+ "magic-link.ipban.search.label": "Search banned IP addresses",
83
+ "magic-link.ipban.stats.ipv4": "IPv4 addresses",
84
+ "magic-link.ipban.stats.ipv6": "IPv6 addresses",
85
+ "magic-link.ipban.stats.label": "Ban statistics",
86
+ "magic-link.ipban.stats.total": "Banned IPs",
87
+ "magic-link.ipban.status.banned": "Banned",
88
+ "magic-link.ipban.title": "Banned IP addresses",
89
+ "magic-link.jwt.actions.cleanup": "Clean up",
90
+ "magic-link.jwt.actions.cleanupCount": "Clean up ({count})",
91
+ "magic-link.jwt.actions.refresh": "Refresh",
92
+ "magic-link.jwt.actions.revoke": "Revoke",
93
+ "magic-link.jwt.actions.revokeFor": "Revoke session of {user}",
94
+ "magic-link.jwt.actions.revokeSelected": "Revoke selected",
95
+ "magic-link.jwt.actions.unrevoke": "Restore",
96
+ "magic-link.jwt.actions.unrevokeExpired": "Expired sessions cannot be restored",
97
+ "magic-link.jwt.actions.unrevokeRefresh": "Refresh-mode sessions cannot be restored. The user has to sign in again.",
98
+ "magic-link.jwt.actions.unrevokeClaim": "Sessions ended by an account claim cannot be restored. The user has to sign in again.",
99
+ "magic-link.jwt.actions.unrevokeFor": "Restore session of {user}",
100
+ "magic-link.jwt.confirm.cleanup": "Mark all expired JWT sessions as revoked? Active sessions will remain unchanged.",
101
+ "magic-link.jwt.dialog.bulkRevoke.body": "{count, plural, one {# session is signed out immediately.} other {# sessions are signed out immediately.}}",
102
+ "magic-link.jwt.dialog.bulkRevoke.title": "Revoke selected sessions?",
103
+ "magic-link.jwt.dialog.cleanup.title": "Clean up expired sessions?",
104
+ "magic-link.jwt.dialog.revoke.body": "The session of {user} is signed out. Its token stops working immediately.",
105
+ "magic-link.jwt.dialog.revoke.title": "Revoke session?",
106
+ "magic-link.jwt.dialog.unrevoke.body": "The token of {user} works again until it expires.",
107
+ "magic-link.jwt.dialog.unrevoke.title": "Restore session?",
108
+ "magic-link.jwt.empty.description": "Sessions appear here after users sign in with a magic link.",
109
+ "magic-link.jwt.empty.noMatches.description": "Change the search or status filter to see more sessions.",
110
+ "magic-link.jwt.empty.noMatches.title": "No sessions match your filters",
111
+ "magic-link.jwt.empty.resetFilters": "Reset filters",
112
+ "magic-link.jwt.empty.title": "No JWT sessions yet",
113
+ "magic-link.jwt.filter.active": "Active only",
114
+ "magic-link.jwt.filter.all": "All statuses",
115
+ "magic-link.jwt.filter.expired": "Expired only",
116
+ "magic-link.jwt.filter.revoked": "Revoked only",
117
+ "magic-link.jwt.filters.label": "Filter sessions",
118
+ "magic-link.jwt.filters.status": "Filter by status",
119
+ "magic-link.jwt.notifications.bulkRevokePartial": "{succeeded} of {total} sessions revoked. The rest failed.",
120
+ "magic-link.jwt.notifications.bulkRevokeSuccess": "{count, plural, one {# session revoked} other {# sessions revoked}}",
121
+ "magic-link.jwt.notifications.cleanupCount": "{count, plural, one {# expired session cleaned up} other {# expired sessions cleaned up}}",
122
+ "magic-link.jwt.notifications.cleanupError": "Error cleaning up sessions",
123
+ "magic-link.jwt.notifications.cleanupSuccess": "Sessions cleaned up successfully",
124
+ "magic-link.jwt.notifications.errorTitle": "Error",
125
+ "magic-link.jwt.notifications.loadError": "JWT sessions could not be loaded.",
126
+ "magic-link.jwt.notifications.refreshSuccess": "Data has been refreshed",
127
+ "magic-link.jwt.notifications.revokeError": "Error revoking session",
128
+ "magic-link.jwt.notifications.revokeSuccess": "Session revoked successfully",
129
+ "magic-link.jwt.notifications.successTitle": "Success",
130
+ "magic-link.jwt.notifications.unrevokeError": "Error restoring session",
131
+ "magic-link.jwt.notifications.unrevokeSuccess": "Session restored successfully",
132
+ "magic-link.jwt.permission.denied": "You do not have permission to view JWT sessions.",
133
+ "magic-link.jwt.search.label": "Search sessions",
134
+ "magic-link.jwt.selection.count": "{count, plural, one {# session selected} other {# sessions selected}}",
135
+ "magic-link.jwt.stats.active": "Active",
136
+ "magic-link.jwt.stats.expired": "Expired",
137
+ "magic-link.jwt.stats.label": "Session statistics",
138
+ "magic-link.jwt.stats.revoked": "Revoked",
139
+ "magic-link.jwt.stats.total": "Total",
140
+ "magic-link.jwt.status.active": "Active",
141
+ "magic-link.jwt.status.expired": "Expired",
142
+ "magic-link.jwt.status.revoked": "Revoked",
143
+ "magic-link.jwt.table.select": "Select session of {user}",
144
+ "magic-link.jwt.table.selectAll": "Select all active sessions on this page",
145
+ "magic-link.jwt.title": "JWT sessions",
146
+ "magic-link.jwt.unknownUser": "Unknown user",
147
+ "magic-link.jwt.unknownValue": "Unknown",
148
+ "magic-link.license.alert.active.body": "License key registered. Thank you for supporting the plugin.",
149
+ "magic-link.license.alert.active.title": "License active",
150
+ "magic-link.license.alert.close": "Dismiss message",
151
+ "magic-link.license.alert.none.body": "All Magic Link features are available without activation.",
152
+ "magic-link.license.alert.none.title": "No license key registered",
153
+ "magic-link.license.alert.unverified.body": "The license server could not be reached. The plugin keeps working. Refresh the status later.",
154
+ "magic-link.license.alert.unverified.title": "License not verified",
155
+ "magic-link.license.copy.success": "License key copied",
156
+ "magic-link.license.download.error": "The license file could not be downloaded.",
157
+ "magic-link.license.download.success": "License file downloaded",
158
+ "magic-link.license.error.forbidden": "You do not have permission to view the license. Ask an administrator for the Settings read permission.",
159
+ "magic-link.license.error.load": "The license information could not be loaded. Try again.",
160
+ "magic-link.license.error.title": "License unavailable",
161
+ "magic-link.license.field.deviceName": "Device name",
162
+ "magic-link.license.field.email": "Email address",
163
+ "magic-link.license.field.expired": "Expired on",
164
+ "magic-link.license.field.expires": "Expires on",
165
+ "magic-link.license.field.holder": "Name",
166
+ "magic-link.license.field.ipAddress": "IP address",
167
+ "magic-link.license.field.mode": "Plugin mode",
168
+ "magic-link.license.field.status": "Status",
169
+ "magic-link.license.file.generated": "Generated",
170
+ "magic-link.license.file.holder": "License holder",
171
+ "magic-link.license.file.statusSection": "License status",
172
+ "magic-link.license.file.title": "Magic Link plugin license key",
173
+ "magic-link.license.key.copy": "Copy key",
174
+ "magic-link.license.key.download": "Download as TXT",
175
+ "magic-link.license.key.hidden": "License key hidden",
176
+ "magic-link.license.key.hide": "Hide key",
177
+ "magic-link.license.key.label": "License key",
178
+ "magic-link.license.key.show": "Show key",
179
+ "magic-link.license.loading": "Loading license information...",
180
+ "magic-link.license.mode.unlocked": "All features available",
181
+ "magic-link.license.pageTitle": "License",
182
+ "magic-link.license.refresh": "Refresh status",
183
+ "magic-link.license.retry": "Try again",
184
+ "magic-link.license.section.account": "Account information",
185
+ "magic-link.license.section.details": "License details",
186
+ "magic-link.license.section.status": "System status",
187
+ "magic-link.license.status.active": "Active",
188
+ "magic-link.license.status.inactive": "Inactive",
189
+ "magic-link.license.status.noKey": "No key registered",
190
+ "magic-link.license.subtitle": "View the license of your Magic Link plugin",
191
+ "magic-link.license.title": "License management",
192
+ "magic-link.license.value.never": "Never",
193
+ "magic-link.license.value.notProvided": "Not provided",
194
+ "magic-link.otp.actions.cleanup": "Clean up",
195
+ "magic-link.otp.actions.cleanupCount": "Clean up ({count})",
196
+ "magic-link.otp.actions.deleteFor": "Delete code {reference}",
197
+ "magic-link.otp.actions.deleteSelected": "Delete selected",
198
+ "magic-link.otp.actions.refresh": "Refresh",
199
+ "magic-link.otp.dialog.bulkDelete.body": "{count, plural, one {# code stops working immediately.} other {# codes stop working immediately.}}",
200
+ "magic-link.otp.dialog.bulkDelete.title": "Delete selected OTP codes?",
201
+ "magic-link.otp.dialog.cleanup.body": "All expired codes are deleted permanently. Active codes stay valid.",
202
+ "magic-link.otp.dialog.cleanup.title": "Remove expired OTP codes?",
203
+ "magic-link.otp.dialog.delete.body": "The code sent to {email} stops working immediately.",
204
+ "magic-link.otp.dialog.delete.title": "Delete OTP code?",
205
+ "magic-link.otp.empty.description": "Codes appear here as soon as a magic link login asks for an email code.",
206
+ "magic-link.otp.empty.noMatches.description": "Change the search or status filter to see more codes.",
207
+ "magic-link.otp.empty.noMatches.title": "No OTP codes match your filters",
208
+ "magic-link.otp.empty.resetFilters": "Reset filters",
209
+ "magic-link.otp.empty.title": "No OTP codes yet",
210
+ "magic-link.otp.filter.active": "Active only",
211
+ "magic-link.otp.filter.all": "All statuses",
212
+ "magic-link.otp.filter.expired": "Expired only",
213
+ "magic-link.otp.filter.used": "Used only",
214
+ "magic-link.otp.filters.label": "Filter OTP codes",
215
+ "magic-link.otp.filters.status": "Filter by status",
216
+ "magic-link.otp.loading": "Loading OTP codes...",
217
+ "magic-link.otp.notifications.bulkDeletePartial": "{succeeded} of {total} OTP codes deleted. The rest failed.",
218
+ "magic-link.otp.notifications.bulkDeleteSuccess": "{count, plural, one {# OTP code deleted} other {# OTP codes deleted}}",
219
+ "magic-link.otp.notifications.cleanupCount": "{count, plural, one {# expired code removed} other {# expired codes removed}}",
220
+ "magic-link.otp.notifications.cleanupError": "Expired OTP codes could not be removed.",
221
+ "magic-link.otp.notifications.cleanupSuccess": "Expired OTP codes removed",
222
+ "magic-link.otp.notifications.deleteError": "The OTP code could not be deleted.",
223
+ "magic-link.otp.notifications.deleteSuccess": "OTP code deleted",
224
+ "magic-link.otp.notifications.errorTitle": "Error",
225
+ "magic-link.otp.notifications.loadError": "OTP codes could not be loaded.",
226
+ "magic-link.otp.notifications.refreshSuccess": "OTP codes refreshed",
227
+ "magic-link.otp.notifications.successTitle": "Success",
228
+ "magic-link.otp.permission.denied": "You do not have permission to view OTP codes.",
229
+ "magic-link.otp.search.label": "Search OTP codes",
230
+ "magic-link.otp.search.placeholder": "Search by email...",
231
+ "magic-link.otp.selection.count": "{count, plural, one {# code selected} other {# codes selected}}",
232
+ "magic-link.otp.stats.active": "Active",
233
+ "magic-link.otp.stats.expired": "Expired",
234
+ "magic-link.otp.stats.label": "OTP code statistics",
235
+ "magic-link.otp.stats.total": "Total",
236
+ "magic-link.otp.stats.used": "Used",
237
+ "magic-link.otp.status.active": "Active",
238
+ "magic-link.otp.status.expired": "Expired",
239
+ "magic-link.otp.status.used": "Used",
240
+ "magic-link.otp.table.attempts": "Attempts",
241
+ "magic-link.otp.table.email": "Email",
242
+ "magic-link.otp.table.reference": "Reference",
243
+ "magic-link.otp.table.select": "Select code {reference} for {email}",
244
+ "magic-link.otp.table.selectAll": "Select all codes on this page",
245
+ "magic-link.otp.table.type": "Type",
246
+ "magic-link.otp.title": "OTP codes",
247
+ "magic-link.otp.type.email": "Email",
248
+ "magic-link.otp.type.totp": "Authenticator app",
249
+ "magic-link.settings.advanced.publicRegistration.description": "Allows users to sign in with a magic link from public registration forms without a password.",
250
+ "magic-link.settings.advanced.publicRegistration.title": "Magic Links on Public Registration",
251
+ "magic-link.settings.advanced.subtitle": "Advanced features for special use cases",
252
+ "magic-link.settings.advanced.title": "ADDITIONAL OPTIONS",
253
+ "magic-link.settings.auth.jwtExpiration.hint": "A number followed by m, h or d, such as 15m, 1h, 7d or 30d. Revoked tokens stay blocked until they expire.",
254
+ "magic-link.settings.auth.jwtExpiration.invalid": "Enter a number followed by m, h or d, such as 15m, 1h or 30d.",
255
+ "magic-link.settings.auth.jwtExpiration.label": "JWT lifetime",
256
+ "magic-link.settings.auth.management.title": "User management and sessions",
257
+ "magic-link.settings.auth.options.subtitle": "Configure how users are authenticated and managed",
258
+ "magic-link.settings.auth.options.title": "AUTHENTICATION OPTIONS",
259
+ "magic-link.settings.auth.storeLoginInfo.description": "Stores the IP address and browser of each login for security monitoring.",
260
+ "magic-link.settings.auth.storeLoginInfo.title": "Store Login Data",
261
+ "magic-link.settings.auth.strategy.email": "Email only: the account is created with the email address",
262
+ "magic-link.settings.auth.strategy.emailUsername": "Email and username: the username is generated from the email address",
263
+ "magic-link.settings.auth.strategy.hint": "Used when an administrator creates a link for an unknown email address.",
264
+ "magic-link.settings.auth.strategy.label": "User Creation Strategy",
265
+ "magic-link.settings.auth.strategy.manual": "Manual: no automatic creation, users must exist",
266
+ "magic-link.settings.auth.useJwt.description": "Returns a Users & Permissions JWT after login, like the native login. Recommended for SPAs and mobile apps.",
267
+ "magic-link.settings.auth.useJwt.title": "Issue a JWT",
268
+ "magic-link.settings.auth.verifyEmail.description": "Users must confirm their email address before they can sign in.",
269
+ "magic-link.settings.auth.verifyEmail.title": "Email Verification",
270
+ "magic-link.settings.auth.welcomeEmail.description": "Sends a welcome email to newly created users.",
271
+ "magic-link.settings.auth.welcomeEmail.title": "Welcome Email",
272
+ "magic-link.settings.compatibility.migration.description": "After the migration, switch your clients to the Magic Link API (/api/magic-link/*) and turn compatibility mode off.",
273
+ "magic-link.settings.compatibility.migration.title": "Migration Note",
274
+ "magic-link.settings.compatibility.passwordless.description": "Keeps the /api/passwordless routes of strapi-plugin-passwordless working while you migrate.",
275
+ "magic-link.settings.compatibility.passwordless.title": "Passwordless Plugin Compatibility",
276
+ "magic-link.settings.confirmationUrl.hint": "Full URL of the page that receives the link when no frontend URL is set.",
277
+ "magic-link.settings.confirmationUrl.label": "Confirmation URL",
278
+ "magic-link.settings.context.blacklist.hint": "Comma-separated. These fields are always removed, even when they are also allowed.",
279
+ "magic-link.settings.context.blacklist.label": "Blocked fields",
280
+ "magic-link.settings.context.subtitle": "Applies to every login link, whether your frontend or an administrator creates it. Reserved fields such as userId or otpVerified are always removed.",
281
+ "magic-link.settings.context.title": "Context field policy",
282
+ "magic-link.settings.context.whitelist.hint": "Comma-separated. When set, only these fields are kept. Leave empty to allow all fields that are not blocked.",
283
+ "magic-link.settings.context.whitelist.label": "Allowed fields",
284
+ "magic-link.settings.discard": "Discard",
285
+ "magic-link.settings.email.default.button": "Sign in now",
286
+ "magic-link.settings.email.default.expiry": "The link expires in {expiry}.",
287
+ "magic-link.settings.email.default.heading": "Sign in",
288
+ "magic-link.settings.email.default.ignore": "If you did not request this email, you can ignore it.",
289
+ "magic-link.settings.email.default.intro": "Use the button below to sign in. No password needed.",
290
+ "magic-link.settings.email.default.name": "Default template",
291
+ "magic-link.settings.email.designer.fallbackBadge": "Fallback only",
292
+ "magic-link.settings.email.designer.fallbackDescription": "These templates are used when the selected integration cannot send.",
293
+ "magic-link.settings.email.designer.noTemplates": "No templates found. Create one in Email Designer 5 first.",
294
+ "magic-link.settings.email.designer.placeholder": "Choose a template...",
295
+ "magic-link.settings.email.designer.selectTemplate": "Email Designer template",
296
+ "magic-link.settings.email.designer.templatesAvailable": "{count, plural, one {# template available} other {# templates available}}. The choice applies after you save.",
297
+ "magic-link.settings.email.designer.useTemplate": "Use an Email Designer 5 template",
298
+ "magic-link.settings.email.designer.useTemplateHint": "Login emails use the selected Email Designer template. The templates below stay as the fallback.",
299
+ "magic-link.settings.email.designer.variables": "Template variables: '{{magicLink}}' (login link), '{{expiryText}}', '{{user.email}}' and '{{user.username}}'.",
300
+ "magic-link.settings.email.fromEmail.hint": "Must be an address your email provider may send from. Leave empty to use the provider default.",
301
+ "magic-link.settings.email.fromEmail.label": "Sender Email",
302
+ "magic-link.settings.email.fromName.hint": "The name users see as the sender, such as your app name.",
303
+ "magic-link.settings.email.fromName.label": "Sender Name",
304
+ "magic-link.settings.email.gallery.active": "In use",
305
+ "magic-link.settings.email.gallery.description": "Load a ready-made design into the editors below. Save to apply it.",
306
+ "magic-link.settings.email.gallery.title": "Template gallery",
307
+ "magic-link.settings.email.html.badge": "Main Template",
308
+ "magic-link.settings.email.html.copied": "HTML template copied",
309
+ "magic-link.settings.email.html.copy": "Copy Template",
310
+ "magic-link.settings.email.html.description": "HTML version of the login email. Use the placeholders above, at least {placeholder}.",
311
+ "magic-link.settings.email.html.loadDefault": "Load Default Template",
312
+ "magic-link.settings.email.html.stats": "{lines, plural, one {# line} other {# lines}}, {chars, plural, one {# character} other {# characters}}",
313
+ "magic-link.settings.email.html.title": "HTML template",
314
+ "magic-link.settings.email.invalidEmail": "Enter a valid email address or leave this field blank.",
315
+ "magic-link.settings.email.magicMail.description": "Uses your Magic Mail accounts, routing rules and failover. Make sure at least one account is active.",
316
+ "magic-link.settings.email.magicMail.placeholder": "Choose a template",
317
+ "magic-link.settings.email.magicMail.template": "Magic Mail template",
318
+ "magic-link.settings.email.magicMail.templateHint": "Optional. Templates are managed in Magic Mail. The choice applies after you save.",
319
+ "magic-link.settings.email.magicMail.use": "Send with Magic Mail",
320
+ "magic-link.settings.email.overwrite.body": 'Loading "{name}" replaces your custom template in the editor. Your saved settings stay unchanged until you save.',
321
+ "magic-link.settings.email.overwrite.confirm": "Replace template",
322
+ "magic-link.settings.email.overwrite.title": "Replace your template?",
323
+ "magic-link.settings.email.placeholders.code.description": "The token alone, for custom link formats only.",
324
+ "magic-link.settings.email.placeholders.copied": "{placeholder} copied",
325
+ "magic-link.settings.email.placeholders.copyLabel": "Copy {placeholder}",
326
+ "magic-link.settings.email.placeholders.email.description": "Email address of the recipient.",
327
+ "magic-link.settings.email.placeholders.expiresAt.description": "Expiry date and time in ISO 8601 format.",
328
+ "magic-link.settings.email.placeholders.expiry.description": "How long the link stays valid, such as 1 hour.",
329
+ "magic-link.settings.email.placeholders.intro": "Values are inserted as plain text and escaped in HTML. Select a placeholder to copy it.",
330
+ "magic-link.settings.email.placeholders.loginUrl.description": "Complete login link with the token. Use it for buttons and links.",
331
+ "magic-link.settings.email.placeholders.title": "Available placeholders",
332
+ "magic-link.settings.email.placeholders.url.description": "Login URL without the token.",
333
+ "magic-link.settings.email.placeholders.username.description": "Username of the recipient, or the email address when there is none.",
334
+ "magic-link.settings.email.provider.configured": "Email provider: {name}",
335
+ "magic-link.settings.email.provider.defaultName": "configured",
336
+ "magic-link.settings.email.provider.magicMail": "Email provider: Magic Mail (advanced routing)",
337
+ "magic-link.settings.email.provider.missing.body": "Magic Link cannot send emails until an email provider is configured. Choose one of these options:",
338
+ "magic-link.settings.email.provider.missing.configure": "and configure it in {file}.",
339
+ "magic-link.settings.email.provider.missing.magicMail": "Install the Magic Mail plugin for routing, OAuth2 accounts and analytics.",
340
+ "magic-link.settings.email.provider.missing.nodemailer": "Install Nodemailer (recommended):",
341
+ "magic-link.settings.email.provider.missing.other": "Use any other Strapi email provider, such as SendGrid, Mailgun or Amazon SES.",
342
+ "magic-link.settings.email.provider.missing.title": "No email provider configured",
343
+ "magic-link.settings.email.responseEmail.hint": "Optional. Replies from users go to this address.",
344
+ "magic-link.settings.email.responseEmail.label": "Reply-to email",
345
+ "magic-link.settings.email.sender.subtitle": "This information appears in emails sent to users",
346
+ "magic-link.settings.email.sender.title": "SENDER INFORMATION",
347
+ "magic-link.settings.email.subject.hint": "Keep it clear so the email is not marked as spam. Placeholders such as {placeholder} work here too.",
348
+ "magic-link.settings.email.subject.label": "Subject line",
349
+ "magic-link.settings.email.subject.placeholder": "Your sign-in link",
350
+ "magic-link.settings.email.template.fallbackName": "Template {id}",
351
+ "magic-link.settings.email.template.missing": "The saved template no longer exists. Select another one.",
352
+ "magic-link.settings.email.templates.subtitle": "Design the emails sent to users. Use placeholders for dynamic content.",
353
+ "magic-link.settings.email.templates.title": "EMAIL TEMPLATES",
354
+ "magic-link.settings.email.text.badge": "Fallback",
355
+ "magic-link.settings.email.text.copied": "Text template copied",
356
+ "magic-link.settings.email.text.copy": "Copy Template",
357
+ "magic-link.settings.email.text.description": "Text version for email clients without HTML. Placeholders are inserted as they are.",
358
+ "magic-link.settings.email.text.loadDefault": "Load Default Template",
359
+ "magic-link.settings.email.text.title": "Plain text template",
360
+ "magic-link.settings.errors.summary": "{count, plural, one {# field needs attention} other {# fields need attention}}",
361
+ "magic-link.settings.expire.hint": "Recommended: 3600 seconds (1 hour). Allowed: 10 to 31,536,000.",
362
+ "magic-link.settings.expire.label": "Link lifetime (seconds)",
363
+ "magic-link.settings.feature.createUser.description": "Creates an account when the email address is unknown. Follows the Users & Permissions registration and email confirmation settings.",
364
+ "magic-link.settings.feature.createUser.title": "Automatically Create Users",
365
+ "magic-link.settings.feature.staysValid.description": "A link can be used more than once until it expires. Less secure; keep it off unless users need to open the link on several devices.",
366
+ "magic-link.settings.feature.staysValid.title": "Reusable links",
367
+ "magic-link.settings.features.subtitle": "Enable or disable the main features of the Magic Link plugin",
368
+ "magic-link.settings.features.title": "MAIN FEATURES",
369
+ "magic-link.settings.footer.quickhelp": "Quick Help",
370
+ "magic-link.settings.footer.reminder": "After saving, create a test token and try the magic link.",
371
+ "magic-link.settings.info.header": "Important Configuration Notes",
372
+ "magic-link.settings.info.line1": "Changes take effect after you save.",
373
+ "magic-link.settings.info.line2": "Make sure all URLs are correctly configured",
374
+ "magic-link.settings.info.line3": "Test the configuration after saving with a test token",
375
+ "magic-link.settings.info.line4": "Green cards are active features, grey cards are inactive.",
376
+ "magic-link.settings.language.hint": "Language of the Magic Link admin pages in this browser. It applies immediately.",
377
+ "magic-link.settings.language.label": "Interface Language",
378
+ "magic-link.settings.links.frontendPath.hint": "Path of the page that receives the link, appended to the frontend URL. Starts with /.",
379
+ "magic-link.settings.links.frontendPath.label": "Frontend login path",
380
+ "magic-link.settings.links.frontendUrl.hint": "Base URL of your frontend app (React, Vue, mobile deep link page). Leave empty to use the confirmation URL.",
381
+ "magic-link.settings.links.frontendUrl.label": "Frontend base URL",
382
+ "magic-link.settings.links.preview.source.api": "No valid frontend or confirmation URL is set, so the link opens the Strapi API login route.",
383
+ "magic-link.settings.links.preview.source.confirmation": "Built from the confirmation URL.",
384
+ "magic-link.settings.links.preview.source.frontend": "Built from the frontend URL and login path.",
385
+ "magic-link.settings.links.preview.title": "Resulting login link",
386
+ "magic-link.settings.links.subtitle": "Use https. http is only accepted for localhost. The frontend URL wins over the confirmation URL.",
387
+ "magic-link.settings.links.title": "Login link URLs",
388
+ "magic-link.settings.load.error": "Settings could not be loaded.",
389
+ "magic-link.settings.load.loading": "Loading settings...",
390
+ "magic-link.settings.mfa.confirmRequired.bodyCount": "Only {count, plural, one {# user has} other {# users have}} set up an authenticator app. Everyone else can no longer sign in after you save.",
391
+ "magic-link.settings.mfa.confirmRequired.bodyUnknown": "Users without an authenticator app can no longer sign in after you save. The number of enrolled users is unknown.",
392
+ "magic-link.settings.mfa.confirmRequired.confirm": "Require for everyone",
393
+ "magic-link.settings.mfa.confirmRequired.recovery": 'To undo it, choose "Users who set up an app" or another sign-in mode and save again.',
394
+ "magic-link.settings.mfa.confirmRequired.title": "Require an authenticator app for every user?",
395
+ "magic-link.settings.mfa.enrollment.count": "{count, plural, one {# user has} other {# users have}} set up an authenticator app.",
396
+ "magic-link.settings.mfa.enrollment.howTo": "Users set up their app while signed in, from your frontend. They cannot set it up during a sign-in that already requires a code.",
397
+ "magic-link.settings.mfa.enrollment.loading": "Checking how many users have set up an authenticator app...",
398
+ "magic-link.settings.mfa.enrollment.none": "No user has set up an authenticator app yet.",
399
+ "magic-link.settings.mfa.enrollment.title": "Enrollment",
400
+ "magic-link.settings.mfa.enrollment.unavailable": "The number of users with an authenticator app could not be determined.",
401
+ "magic-link.settings.mfa.intro": "Choose how users sign in. The selection takes effect when you save. Email codes and authenticator apps are separate modes.",
402
+ "magic-link.settings.mfa.lockout.body": 'The saved policy requires an authenticator app, but no user has set one up. Choose "Users who set up an app" or another mode and save.',
403
+ "magic-link.settings.mfa.lockout.title": "Every sign-in currently fails",
404
+ "magic-link.settings.mfa.mode.emailOtp.badge": "Stronger",
405
+ "magic-link.settings.mfa.mode.emailOtp.description": "After opening the link, users enter a one-time code sent by email.",
406
+ "magic-link.settings.mfa.mode.emailOtp.feature1": "Code sent by email",
407
+ "magic-link.settings.mfa.mode.emailOtp.feature2": "Configurable code length",
408
+ "magic-link.settings.mfa.mode.emailOtp.feature3": "Configurable lifetime",
409
+ "magic-link.settings.mfa.mode.emailOtp.title": "Magic link + email code",
410
+ "magic-link.settings.mfa.mode.magicLink.badge": "Fast",
411
+ "magic-link.settings.mfa.mode.magicLink.description": "One-click sign-in by email. Fast and easy to use.",
412
+ "magic-link.settings.mfa.mode.magicLink.feature1": "No passwords",
413
+ "magic-link.settings.mfa.mode.magicLink.feature2": "Fast sign-in",
414
+ "magic-link.settings.mfa.mode.magicLink.feature3": "Works on every device",
415
+ "magic-link.settings.mfa.mode.magicLink.title": "Magic link only",
416
+ "magic-link.settings.mfa.mode.totp.badge": "Strongest",
417
+ "magic-link.settings.mfa.mode.totp.description": "After opening the link, users enter a code from an authenticator app such as Google Authenticator or Authy.",
418
+ "magic-link.settings.mfa.mode.totp.feature1": "Authenticator app codes",
419
+ "magic-link.settings.mfa.mode.totp.feature2": "Set up by QR code",
420
+ "magic-link.settings.mfa.mode.totp.feature3": "Codes rotate every 30 seconds",
421
+ "magic-link.settings.mfa.mode.totp.title": "Magic link + authenticator app",
422
+ "magic-link.settings.mfa.modes.title": "Sign-in mode",
423
+ "magic-link.settings.mfa.otp.attempts.hint": "The code becomes invalid after this many wrong entries. Default: 3.",
424
+ "magic-link.settings.mfa.otp.attempts.label": "Maximum wrong attempts",
425
+ "magic-link.settings.mfa.otp.cooldown.hint": "How long users wait before they can request a new code. Default: 60.",
426
+ "magic-link.settings.mfa.otp.cooldown.label": "Wait before a new code (seconds)",
427
+ "magic-link.settings.mfa.otp.delivery": "Delivery: email. Codes are sent to the address of the account.",
428
+ "magic-link.settings.mfa.otp.expiry.hint": "Default: 300 seconds (5 minutes). Allowed: 30 to 86,400.",
429
+ "magic-link.settings.mfa.otp.expiry.label": "Code lifetime (seconds)",
430
+ "magic-link.settings.mfa.otp.howItWorks": "How it works",
431
+ "magic-link.settings.mfa.otp.length.hint": "Default: 6 digits. Allowed: 4 to 16.",
432
+ "magic-link.settings.mfa.otp.length.label": "Code length (digits)",
433
+ "magic-link.settings.mfa.otp.step1": "The user opens the magic link from the email.",
434
+ "magic-link.settings.mfa.otp.step2": "Your app shows the code entry page.",
435
+ "magic-link.settings.mfa.otp.step3": "The user enters the {length}-digit code sent to their email address.",
436
+ "magic-link.settings.mfa.otp.step4": "After a correct code, the user is signed in.",
437
+ "magic-link.settings.mfa.otp.title": "Email code settings",
438
+ "magic-link.settings.mfa.policy.optional": "Users who set up an app (recommended)",
439
+ "magic-link.settings.mfa.policy.optionalHint": "Users with an authenticator app must enter its code. Everyone else signs in with the magic link.",
440
+ "magic-link.settings.mfa.policy.required": "Every user",
441
+ "magic-link.settings.mfa.policy.requiredBlocked": "Unavailable: no user has set up an authenticator app, so every sign-in would fail.",
442
+ "magic-link.settings.mfa.policy.requiredHint": "Users without an authenticator app can no longer sign in.",
443
+ "magic-link.settings.mfa.policy.title": "Who must use an authenticator app?",
444
+ "magic-link.settings.mfa.summary.emailOtp": "Users open the magic link, then enter the code from the email.",
445
+ "magic-link.settings.mfa.summary.magicLink": "Users sign in with the magic link only.",
446
+ "magic-link.settings.mfa.summary.title": "Current selection",
447
+ "magic-link.settings.mfa.summary.totpOnly": "Users with an authenticator app can also sign in with email and code, without waiting for an email.",
448
+ "magic-link.settings.mfa.summary.totpOptional": "Users open the magic link. Users who set up an authenticator app must also enter its code.",
449
+ "magic-link.settings.mfa.summary.totpRequired": "Users open the magic link, then enter a code from their authenticator app. Users without an app cannot sign in.",
450
+ "magic-link.settings.mfa.totp.digits.label": "Code digits",
451
+ "magic-link.settings.mfa.totp.digits.option": "{count} digits",
452
+ "magic-link.settings.mfa.totp.issuer.hint": "Shown in the authenticator app, for example your app name.",
453
+ "magic-link.settings.mfa.totp.issuer.label": "Issuer name",
454
+ "magic-link.settings.mfa.totp.period.hint": "Default: 30 seconds. Most apps only support 30.",
455
+ "magic-link.settings.mfa.totp.period.label": "Code period (seconds)",
456
+ "magic-link.settings.mfa.totp.subtitle": "Changes apply to new setups. Apps that are already set up keep working.",
457
+ "magic-link.settings.mfa.totp.title": "Authenticator app settings",
458
+ "magic-link.settings.mfa.totpOnly.description": "Users who set up an authenticator app can sign in with their email address and a current code, without waiting for an email.",
459
+ "magic-link.settings.mfa.totpOnly.title": "Sign-in with authenticator code only",
460
+ "magic-link.settings.page.subtitle": "Configure passwordless authentication for your users",
461
+ "magic-link.settings.page.title": "Magic Link Settings",
462
+ "magic-link.settings.pageTitle": "Settings",
463
+ "magic-link.settings.permission.readOnly": "You have read-only access. Changes cannot be saved.",
464
+ "magic-link.settings.permission.readOnlyTitle": "Read-only",
465
+ "magic-link.settings.rateLimit.cleanup": "Clean up expired entries",
466
+ "magic-link.settings.rateLimit.cleanupError": "Expired entries could not be removed",
467
+ "magic-link.settings.rateLimit.cleanupSuccess": "Expired entries removed",
468
+ "magic-link.settings.rateLimit.config.title": "Limits",
469
+ "magic-link.settings.rateLimit.enable.description": "Protects against brute-force attacks and spam by limiting login link requests.",
470
+ "magic-link.settings.rateLimit.enable.title": "Enable Rate Limiting",
471
+ "magic-link.settings.rateLimit.maxAttempts.hint": "Requests allowed per time window before blocking (1 to 1,000).",
472
+ "magic-link.settings.rateLimit.maxAttempts.label": "Maximum requests",
473
+ "magic-link.settings.rateLimit.reset": "Reset All Limits",
474
+ "magic-link.settings.rateLimit.resetConfirm": "All blocked IP addresses and email addresses can send requests again immediately.",
475
+ "magic-link.settings.rateLimit.resetError": "Rate limits could not be reset",
476
+ "magic-link.settings.rateLimit.resetSuccess": "All rate limits reset",
477
+ "magic-link.settings.rateLimit.resetTitle": "Reset all rate limits?",
478
+ "magic-link.settings.rateLimit.stats.blocked": "Currently Blocked",
479
+ "magic-link.settings.rateLimit.stats.emailLimits": "Email Limits",
480
+ "magic-link.settings.rateLimit.stats.error": "Statistics could not be loaded.",
481
+ "magic-link.settings.rateLimit.stats.ipLimits": "IP address limits",
482
+ "magic-link.settings.rateLimit.stats.loading": "Loading statistics...",
483
+ "magic-link.settings.rateLimit.stats.note": "Statistics cover this server process only. Cleanup and reset do not change your unsaved settings.",
484
+ "magic-link.settings.rateLimit.stats.title": "CURRENT STATISTICS",
485
+ "magic-link.settings.rateLimit.stats.total": "Total Entries",
486
+ "magic-link.settings.rateLimit.subtitle": "Prevent abuse by limiting the number of requests per IP address and email",
487
+ "magic-link.settings.rateLimit.title": "RATE LIMITING",
488
+ "magic-link.settings.rateLimit.windowMinutes.hint": "Period in which requests are counted (1 to 10,080 minutes).",
489
+ "magic-link.settings.rateLimit.windowMinutes.label": "Time Window (Minutes)",
490
+ "magic-link.settings.retry": "Try again",
491
+ "magic-link.settings.save.button": "Save Changes",
492
+ "magic-link.settings.save.error": "Settings could not be saved. Please try again.",
493
+ "magic-link.settings.save.invalid": "Some fields need attention. Fix them before you save.",
494
+ "magic-link.settings.save.rejected": "The server rejected a value. Check the highlighted field.",
495
+ "magic-link.settings.save.saving": "Saving...",
496
+ "magic-link.settings.save.success": "Settings saved",
497
+ "magic-link.settings.section.advanced": "Advanced",
498
+ "magic-link.settings.section.auth": "Authentication",
499
+ "magic-link.settings.section.email": "Email",
500
+ "magic-link.settings.section.fieldsToFix": "Fields to fix",
501
+ "magic-link.settings.section.general": "General",
502
+ "magic-link.settings.section.mfa": "Sign-in modes and MFA",
503
+ "magic-link.settings.section.rateLimit": "Rate limiting",
504
+ "magic-link.settings.time.title": "Link lifetime and length",
505
+ "magic-link.settings.tokenLength.hint": "Longer tokens are harder to guess. Allowed: 22 to 128. Current: {length} characters.",
506
+ "magic-link.settings.tokenLength.label": "Token length (characters)",
507
+ "magic-link.settings.validation.digits": "Choose 6 or 8 digits.",
508
+ "magic-link.settings.validation.length": "Use at most {max} characters.",
509
+ "magic-link.settings.validation.linkOrigin": "This origin is not in the allowed link origins of the server configuration.",
510
+ "magic-link.settings.validation.list": "Use at most {max} fields with up to 128 characters each.",
511
+ "magic-link.settings.validation.path": "Enter a path that starts with / and contains only URL characters.",
512
+ "magic-link.settings.validation.range": "Enter a whole number from {min} to {max}.",
513
+ "magic-link.settings.validation.server": "The server rejected this value. Check it and save again.",
514
+ "magic-link.settings.validation.securityForbidden": 'Changing this value needs the "Settings: Security" permission.',
515
+ "magic-link.settings.validation.url": "Enter an https URL. http is only allowed for localhost.",
516
+ "magic-link.status.active": "ACTIVE",
517
+ "magic-link.status.inactive": "INACTIVE",
518
+ "magic-link.tokens.actions.activate": "Activate",
519
+ "magic-link.tokens.actions.block": "Block",
520
+ "magic-link.tokens.actions.bulkDelete": "Delete Selected",
521
+ "magic-link.tokens.actions.delete": "Delete",
522
+ "magic-link.tokens.actions.deleteFor": "Delete token for {email}",
523
+ "magic-link.tokens.actions.extend": "Extend",
524
+ "magic-link.tokens.actions.extendFor": "Extend token for {email}",
525
+ "magic-link.tokens.actions.newToken": "New Token",
526
+ "magic-link.tokens.actions.reactivate": "New Token",
527
+ "magic-link.tokens.actions.refresh": "Refresh",
528
+ "magic-link.tokens.actions.retry": "Try again",
529
+ "magic-link.tokens.actions.settings": "Settings",
530
+ "magic-link.tokens.actions.viewDetailsFor": "View details for {email}",
531
+ "magic-link.tokens.activate.body": "The login link for {email} works again until it expires.",
532
+ "magic-link.tokens.activate.title": "Activate token?",
533
+ "magic-link.tokens.block.body": "The login link for {email} stops working until you activate it again.",
534
+ "magic-link.tokens.block.title": "Block token?",
535
+ "magic-link.tokens.bulk.label": "Bulk actions",
536
+ "magic-link.tokens.bulkDelete.title": "Delete selected tokens?",
537
+ "magic-link.tokens.confirm.bulkDelete": "Delete {count, plural, one {# selected token} other {# selected tokens}}? This cannot be undone.",
538
+ "magic-link.tokens.create.context.error": "Invalid JSON format",
539
+ "magic-link.tokens.create.context.hint": "Optional JSON object passed with the token, for example a redirect path.",
540
+ "magic-link.tokens.create.context.label": "JSON Context (Optional)",
541
+ "magic-link.tokens.create.context.object": "The context must be a JSON object.",
542
+ "magic-link.tokens.create.context.placeholder": `'{ "key": "value" }'`,
543
+ "magic-link.tokens.create.context.reserved": "These keys are reserved for the server: {keys}",
544
+ "magic-link.tokens.create.email.hint": "The login link is created for this email address.",
545
+ "magic-link.tokens.create.email.invalid": "Enter a valid email address.",
546
+ "magic-link.tokens.create.email.label": "Email address",
547
+ "magic-link.tokens.create.email.placeholder": "user@example.com",
548
+ "magic-link.tokens.create.email.required": "Enter an email address.",
549
+ "magic-link.tokens.create.sendEmail.hint": "The user receives an email with the login link right away.",
550
+ "magic-link.tokens.create.sendEmail.label": "Send the login link by email",
551
+ "magic-link.tokens.create.sendEmail.off": "No email is sent. The token is shown once after creation so you can share it yourself.",
552
+ "magic-link.tokens.create.submit": "Create Token",
553
+ "magic-link.tokens.create.submitting": "Creating...",
554
+ "magic-link.tokens.create.title": "Create Magic Link Token",
555
+ "magic-link.tokens.create.ttl.error": "Enter a whole number of hours from {min} to {max}.",
556
+ "magic-link.tokens.create.ttl.hint": "How long the link stays valid ({min} to {max} hours).",
557
+ "magic-link.tokens.create.ttl.label": "Validity Period (Hours)",
558
+ "magic-link.tokens.created.closeHint": "Close this dialog with Done when you have copied what you need.",
559
+ "magic-link.tokens.created.copyLink": "Copy Link",
560
+ "magic-link.tokens.created.done": "Done",
561
+ "magic-link.tokens.created.plaintextToken": "Full token",
562
+ "magic-link.tokens.created.title": "Token created",
563
+ "magic-link.tokens.created.warning": "This is the only time the full token is shown. Copy it now if you want to send it to the user yourself. After you close this dialog, only a masked reference is shown.",
564
+ "magic-link.tokens.delete.body": "The login link for {email} stops working immediately. This cannot be undone.",
565
+ "magic-link.tokens.delete.title": "Delete token?",
566
+ "magic-link.tokens.details.actions": "Actions",
567
+ "magic-link.tokens.details.clickToCopy": "Click to copy",
568
+ "magic-link.tokens.details.context": "Context Data",
569
+ "magic-link.tokens.details.created": "Created",
570
+ "magic-link.tokens.details.expiresAt": "Valid until",
571
+ "magic-link.tokens.details.lastUsedAt": "Last used",
572
+ "magic-link.tokens.details.magicLink": "Magic Link URL",
573
+ "magic-link.tokens.details.never": "Never",
574
+ "magic-link.tokens.details.reference": "Reference",
575
+ "magic-link.tokens.details.status": "Status",
576
+ "magic-link.tokens.details.technicalInfo": "Technical Information",
577
+ "magic-link.tokens.details.title": "Token Details",
578
+ "magic-link.tokens.details.unlimited": "Unlimited",
579
+ "magic-link.tokens.details.usedAt": "Used",
580
+ "magic-link.tokens.empty.createFirst": "Create First Token",
581
+ "magic-link.tokens.empty.noData.description": "Tokens appear here when users request a login link or an admin creates one.",
582
+ "magic-link.tokens.empty.noData.title": "No tokens yet",
583
+ "magic-link.tokens.empty.noMatch.description": "No token matches the search or status filter.",
584
+ "magic-link.tokens.empty.noMatch.title": "No matching tokens",
585
+ "magic-link.tokens.empty.resetFilters": "Reset Filters",
586
+ "magic-link.tokens.error.description": "Check your connection and permissions, then try again.",
587
+ "magic-link.tokens.error.title": "Tokens could not be loaded",
588
+ "magic-link.tokens.extend.currentExpiry": "Currently valid until",
589
+ "magic-link.tokens.extend.customDays": "Custom number of days",
590
+ "magic-link.tokens.extend.customError": "Enter a whole number of days from {min} to {max}.",
591
+ "magic-link.tokens.extend.customHint": "Or enter {min} to {max} days.",
592
+ "magic-link.tokens.extend.customPlaceholder": "e.g. 14",
593
+ "magic-link.tokens.extend.newExpiry": "New expiry date",
594
+ "magic-link.tokens.extend.preset": "+{count, plural, one {# day} other {# days}}",
595
+ "magic-link.tokens.extend.selectExtension": "Select extension",
596
+ "magic-link.tokens.extend.submit": "Extend Token",
597
+ "magic-link.tokens.extend.title": "Extend Token",
598
+ "magic-link.tokens.filter.all": "All statuses",
599
+ "magic-link.tokens.filter.status": "Filter by status",
600
+ "magic-link.tokens.loading": "Loading tokens...",
601
+ "magic-link.tokens.notifications.activateError": "The token could not be activated.",
602
+ "magic-link.tokens.notifications.activateSuccess": "Token activated",
603
+ "magic-link.tokens.notifications.blockError": "The token could not be blocked.",
604
+ "magic-link.tokens.notifications.blockSuccess": "Token blocked",
605
+ "magic-link.tokens.notifications.bulkDeleted": "{count, plural, one {# token deleted} other {# tokens deleted}}",
606
+ "magic-link.tokens.notifications.bulkPartial": "{deleted} of {total} tokens deleted. The others are still selected.",
607
+ "magic-link.tokens.notifications.createError": "The token could not be created.",
608
+ "magic-link.tokens.notifications.created": "Login link sent to {email}",
609
+ "magic-link.tokens.notifications.createdWithoutEmail": "Token created. No email was sent.",
610
+ "magic-link.tokens.notifications.deleteError": "The token could not be deleted.",
611
+ "magic-link.tokens.notifications.deleted": "Token deleted",
612
+ "magic-link.tokens.notifications.extendError": "The token could not be extended.",
613
+ "magic-link.tokens.notifications.extended": "Token extended by {days, plural, one {# day} other {# days}}",
614
+ "magic-link.tokens.notifications.linkCopied": "Login link copied",
615
+ "magic-link.tokens.notifications.loadError": "Tokens could not be loaded.",
616
+ "magic-link.tokens.notifications.reactivateError": "The new token could not be created.",
617
+ "magic-link.tokens.notifications.reactivateSuccess": "New token created and sent to {email}",
618
+ "magic-link.tokens.notifications.refreshed": "Data refreshed",
619
+ "magic-link.tokens.notifications.tokenCopied": "Token copied",
620
+ "magic-link.tokens.page.subtitle": "Manage Magic Link tokens, OTP codes, JWT sessions and IP bans",
621
+ "magic-link.tokens.page.title": "Token Management",
622
+ "magic-link.tokens.pageSize.option": "{count} per page",
623
+ "magic-link.tokens.pageTitle": "Tokens",
624
+ "magic-link.tokens.pagination.label": "Token pages",
625
+ "magic-link.tokens.pagination.more": "More pages",
626
+ "magic-link.tokens.pagination.next": "Next page",
627
+ "magic-link.tokens.pagination.page": "Go to page {page}",
628
+ "magic-link.tokens.pagination.previous": "Previous page",
629
+ "magic-link.tokens.pagination.status": "Page {page} of {count}",
630
+ "magic-link.tokens.reissue.body": "A new login link for {email} is created with the default validity and sent by email right away.",
631
+ "magic-link.tokens.reissue.confirm": "Create and send",
632
+ "magic-link.tokens.reissue.title": "Create a new token?",
633
+ "magic-link.tokens.search.label": "Search tokens",
634
+ "magic-link.tokens.search.placeholder": "Search by email, reference or IP...",
635
+ "magic-link.tokens.selected": "{count, plural, one {# token selected} other {# tokens selected}}",
636
+ "magic-link.tokens.stats.active": "Active",
637
+ "magic-link.tokens.stats.blocked": "Blocked",
638
+ "magic-link.tokens.stats.expired": "Expired",
639
+ "magic-link.tokens.stats.label": "Token statistics",
640
+ "magic-link.tokens.stats.total": "Total",
641
+ "magic-link.tokens.stats.used": "Used",
642
+ "magic-link.tokens.status.active": "Active",
643
+ "magic-link.tokens.status.blocked": "Blocked",
644
+ "magic-link.tokens.status.expired": "Expired",
645
+ "magic-link.tokens.status.used": "Used",
646
+ "magic-link.tokens.table.actions": "Actions",
647
+ "magic-link.tokens.table.created": "Created",
648
+ "magic-link.tokens.table.email": "Email",
649
+ "magic-link.tokens.table.expiredOn": "{date} (expired)",
650
+ "magic-link.tokens.table.expiresAt": "Valid until",
651
+ "magic-link.tokens.table.ip": "IP: {ip}",
652
+ "magic-link.tokens.table.reference": "Reference",
653
+ "magic-link.tokens.table.select": "Select {email}",
654
+ "magic-link.tokens.table.selectAll": "Select all tokens on this page",
655
+ "magic-link.tokens.table.sortByColumn": "Sort by {column}",
656
+ "magic-link.tokens.table.status": "Status",
657
+ "magic-link.tokens.table.usedOn": "Used {date}",
658
+ "magic-link.tokens.tabs.ipBans": "IP Bans",
659
+ "magic-link.tokens.tabs.ipBansShort": "IP",
660
+ "magic-link.tokens.tabs.jwtSessions": "JWT Sessions",
661
+ "magic-link.tokens.tabs.jwtSessionsShort": "JWT",
662
+ "magic-link.tokens.tabs.label": "Token views",
663
+ "magic-link.tokens.tabs.magicLinks": "Magic Link Tokens",
664
+ "magic-link.tokens.tabs.magicLinksShort": "Links",
665
+ "magic-link.tokens.tabs.otpCodes": "OTP Codes",
666
+ "magic-link.tokens.tabs.otpCodesShort": "OTP",
667
+ "magic-link.tokens.title": "Magic Link Tokens",
668
+ "magic-link.settings.save.securityForbidden": 'Changing link targets, templates, sender, account, MFA, code or rate-limit rules needs the "Settings: Security" permission.',
669
+ "magic-link.settings.save.linkOriginNotAllowed": "Login link URLs must use an origin allowed in the server configuration.",
670
+ "magic-link.settings.validation.mfaNoEnrolled": 'No user has an authenticator app yet, so "Every user" cannot be saved.',
671
+ "magic-link.settings.save.mfaNoEnrolled": 'No user has an authenticator app yet. Choose "Users who set up an app" first so users can set one up, then require it for every user.'
672
+ };
673
+ exports.default = enTranslations;