File size: 20,906 Bytes
98fbc6d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
import type { TranslationStrings } from '../types';

const admin: TranslationStrings = {
  'admin.notifications.title': 'Notifications',
  'admin.notifications.hint':
    'Choose one notification channel. Only one can be active at a time.',
  'admin.notifications.none': 'Disabled',
  'admin.notifications.email': 'Email (SMTP)',
  'admin.notifications.webhook': 'Webhook',
  'admin.notifications.ntfy': 'Ntfy',
  'admin.ntfy.hint':
    'Allow users to configure their own ntfy topics for push notifications. Set the default server below to pre-fill user settings.',
  'admin.notifications.save': 'Save notification settings',
  'admin.notifications.saved': 'Notification settings saved',
  'admin.notifications.testWebhook': 'Send test webhook',
  'admin.notifications.testWebhookSuccess': 'Test webhook sent successfully',
  'admin.notifications.testWebhookFailed': 'Test webhook failed',
  'admin.notifications.testNtfy': 'Send test ntfy',
  'admin.notifications.testNtfySuccess': 'Test ntfy sent successfully',
  'admin.notifications.testNtfyFailed': 'Test ntfy failed',
  'admin.notifications.emailPanel.title': 'Email (SMTP)',
  'admin.notifications.webhookPanel.title': 'Webhook',
  'admin.notifications.inappPanel.title': 'In-App',
  'admin.notifications.inappPanel.hint':
    'In-app notifications are always active and cannot be disabled globally.',
  'admin.notifications.adminWebhookPanel.title': 'Admin Webhook',
  'admin.notifications.adminWebhookPanel.hint':
    'This webhook is used exclusively for admin notifications (e.g. version alerts). It is separate from per-user webhooks and always fires when set.',
  'admin.notifications.adminWebhookPanel.saved': 'Admin webhook URL saved',
  'admin.notifications.adminWebhookPanel.testSuccess':
    'Test webhook sent successfully',
  'admin.notifications.adminWebhookPanel.testFailed': 'Test webhook failed',
  'admin.notifications.adminWebhookPanel.alwaysOnHint':
    'Admin webhook always fires when a URL is configured',
  'admin.notifications.adminNtfyPanel.title': 'Admin Ntfy',
  'admin.notifications.adminNtfyPanel.hint':
    'This ntfy topic is used exclusively for admin notifications (e.g. version alerts). It is separate from per-user topics and always fires when configured.',
  'admin.notifications.adminNtfyPanel.serverLabel': 'Ntfy Server URL',
  'admin.notifications.adminNtfyPanel.serverHint':
    'Also used as the default server for user ntfy notifications. Leave blank to default to ntfy.sh. Users can override this in their own settings.',
  'admin.notifications.adminNtfyPanel.serverPlaceholder': 'https://ntfy.sh',
  'admin.notifications.adminNtfyPanel.topicLabel': 'Admin Topic',
  'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts',
  'admin.notifications.adminNtfyPanel.tokenLabel': 'Access Token (optional)',
  'admin.notifications.adminNtfyPanel.tokenCleared':
    'Admin access token cleared',
  'admin.notifications.adminNtfyPanel.saved': 'Admin ntfy settings saved',
  'admin.notifications.adminNtfyPanel.test': 'Send test ntfy',
  'admin.notifications.adminNtfyPanel.testSuccess':
    'Test ntfy sent successfully',
  'admin.notifications.adminNtfyPanel.testFailed': 'Test ntfy failed',
  'admin.notifications.adminNtfyPanel.alwaysOnHint':
    'Admin ntfy always fires when a topic is configured',
  'admin.notifications.adminNotificationsHint':
    'Configure which channels deliver admin-only notifications (e.g. version alerts).',
  'admin.notifications.tripReminders.title': 'Trip Reminders',
  'admin.notifications.tripReminders.hint':
    'Send a reminder notification before a trip starts (requires reminder days to be set on the trip).',
  'admin.notifications.tripReminders.enabled': 'Trip reminders enabled',
  'admin.notifications.tripReminders.disabled': 'Trip reminders disabled',
  'admin.smtp.title': 'Email & Notifications',
  'admin.smtp.hint': 'SMTP configuration for sending email notifications.',
  'admin.smtp.testButton': 'Send test email',
  'admin.webhook.hint':
    'Allow users to configure their own webhook URLs for notifications (Discord, Slack, etc.).',
  'admin.smtp.testSuccess': 'Test email sent successfully',
  'admin.smtp.testFailed': 'Test email failed',
  'admin.title': 'Administration',
  'admin.subtitle': 'User management and system settings',
  'admin.tabs.users': 'Users',
  'admin.tabs.categories': 'Categories',
  'admin.tabs.backup': 'Backup',
  'admin.tabs.notifications': 'Notifications',
  'admin.tabs.audit': 'Audit',
  'admin.stats.users': 'Users',
  'admin.stats.trips': 'Trips',
  'admin.stats.places': 'Places',
  'admin.stats.photos': 'Photos',
  'admin.stats.files': 'Files',
  'admin.table.user': 'User',
  'admin.table.email': 'Email',
  'admin.table.role': 'Role',
  'admin.table.created': 'Created',
  'admin.table.lastLogin': 'Last Login',
  'admin.table.actions': 'Actions',
  'admin.you': '(You)',
  'admin.editUser': 'Edit User',
  'admin.newPassword': 'New Password',
  'admin.newPasswordHint': 'Leave empty to keep current password',
  'admin.deleteUser':
    'Delete user "{name}"? All trips will be permanently deleted.',
  'admin.deleteUserTitle': 'Delete user',
  'admin.newPasswordPlaceholder': 'Enter new password…',
  'admin.toast.loadError': 'Failed to load admin data',
  'admin.toast.userUpdated': 'User updated',
  'admin.toast.updateError': 'Failed to update',
  'admin.toast.userDeleted': 'User deleted',
  'admin.toast.deleteError': 'Failed to delete',
  'admin.toast.cannotDeleteSelf': 'Cannot delete your own account',
  'admin.toast.userCreated': 'User created',
  'admin.toast.createError': 'Failed to create user',
  'admin.toast.fieldsRequired': 'Username, email and password are required',
  'admin.createUser': 'Create User',
  'admin.invite.title': 'Invite Links',
  'admin.invite.subtitle': 'Create one-time registration links',
  'admin.invite.create': 'Create Link',
  'admin.invite.createAndCopy': 'Create & Copy',
  'admin.invite.empty': 'No invite links created yet',
  'admin.invite.maxUses': 'Max. Uses',
  'admin.invite.expiry': 'Expires after',
  'admin.invite.uses': 'used',
  'admin.invite.expiresAt': 'expires',
  'admin.invite.createdBy': 'by',
  'admin.invite.active': 'Active',
  'admin.invite.expired': 'Expired',
  'admin.invite.usedUp': 'Used up',
  'admin.invite.copied': 'Invite link copied to clipboard',
  'admin.invite.copyLink': 'Copy link',
  'admin.invite.deleted': 'Invite link deleted',
  'admin.invite.createError': 'Failed to create invite link',
  'admin.invite.deleteError': 'Failed to delete invite link',
  'admin.tabs.settings': 'Settings',
  'admin.allowRegistration': 'Allow Registration',
  'admin.allowRegistrationHint': 'New users can register themselves',
  'admin.authMethods': 'Authentication Methods',
  'admin.passwordLogin': 'Password Login',
  'admin.passwordLoginHint': 'Allow users to sign in with email and password',
  'admin.passwordRegistration': 'Password Registration',
  'admin.passwordRegistrationHint':
    'Allow new users to register with email and password',
  'admin.oidcLogin': 'SSO Login',
  'admin.oidcLoginHint': 'Allow users to sign in with SSO',
  'admin.oidcRegistration': 'SSO Auto-Provisioning',
  'admin.oidcRegistrationHint':
    'Automatically create accounts for new SSO users',
  'admin.envOverrideHint':
    'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
  'admin.lockoutWarning': 'At least one login method must remain enabled',
  'admin.requireMfa': 'Require two-factor authentication (2FA)',
  'admin.requireMfaHint':
    'Users without 2FA must complete setup in Settings before using the app.',
  'admin.apiKeys': 'API Keys',
  'admin.apiKeysHint':
    'Optional. Enables extended place data like photos and weather.',
  'admin.mapsKey': 'Google Maps API Key',
  'admin.mapsKeyHint':
    'Required for place search. Get at console.cloud.google.com',
  'admin.mapsKeyHintLong':
    'Without an API key, OpenStreetMap is used for place search. With a Google API key, photos, ratings, and opening hours can be loaded as well. Get one at console.cloud.google.com.',
  'admin.recommended': 'Recommended',
  'admin.weatherKey': 'OpenWeatherMap API Key',
  'admin.weatherKeyHint': 'For weather data. Free at openweathermap.org',
  'admin.validateKey': 'Test',
  'admin.keyValid': 'Connected',
  'admin.keyInvalid': 'Invalid',
  'admin.keySaved': 'API keys saved',
  'admin.oidcTitle': 'Single Sign-On (OIDC)',
  'admin.oidcSubtitle':
    'Allow login via external providers like Google, Apple, Authentik or Keycloak.',
  'admin.oidcDisplayName': 'Display Name',
  'admin.oidcIssuer': 'Issuer URL',
  'admin.oidcIssuerHint':
    'The OpenID Connect Issuer URL of the provider. e.g. https://accounts.google.com',
  'admin.oidcSaved': 'OIDC configuration saved',
  'admin.oidcOnlyMode': 'Disable password authentication',
  'admin.oidcOnlyModeHint':
    'When enabled, only SSO login is permitted. Password-based login and registration are blocked.',
  'admin.fileTypes': 'Allowed File Types',
  'admin.fileTypesHint': 'Configure which file types users can upload.',
  'admin.fileTypesFormat':
    'Comma-separated extensions (e.g. jpg,png,pdf,doc). Use * to allow all types.',
  'admin.fileTypesSaved': 'File type settings saved',
  'admin.placesPhotos.title': 'Place Photos',
  'admin.placesPhotos.subtitle':
    'Fetch photos from the Google Places API. Disable to save API quota. Wikimedia photos are unaffected.',
  'admin.placesAutocomplete.title': 'Place Autocomplete',
  'admin.placesAutocomplete.subtitle':
    'Use the Google Places API for search suggestions. Disable to save API quota.',
  'admin.placesDetails.title': 'Place Details',
  'admin.placesDetails.subtitle':
    'Fetch detailed place information (hours, rating, website) from the Google Places API. Disable to save API quota.',
  'admin.bagTracking.title': 'Bag Tracking',
  'admin.bagTracking.subtitle':
    'Enable weight and bag assignment for packing items',
  'admin.collab.chat.title': 'Chat',
  'admin.collab.chat.subtitle': 'Real-time messaging for trip collaboration',
  'admin.collab.notes.title': 'Notes',
  'admin.collab.notes.subtitle': 'Shared notes and documents',
  'admin.collab.polls.title': 'Polls',
  'admin.collab.polls.subtitle': 'Group polls and voting',
  'admin.collab.whatsnext.title': "What's Next",
  'admin.collab.whatsnext.subtitle': 'Activity suggestions and next steps',
  'admin.tabs.config': 'Personalization',
  'admin.tabs.defaults': 'User Defaults',
  'admin.defaultSettings.title': 'Default User Settings',
  'admin.defaultSettings.description':
    'Set instance-wide defaults. Users who have not changed a setting will see these values. Their own changes always take priority.',
  'admin.defaultSettings.saved': 'Default saved',
  'admin.defaultSettings.reset': 'Reset to built-in default',
  'admin.defaultSettings.resetToBuiltIn': 'reset',
  'admin.defaultSettings.mapProvider': 'Map engine',
  'admin.defaultSettings.mapProviderHint':
    'The default map for everyone on this instance. Each user can still override it in their own settings.',
  'admin.defaultSettings.providerLeaflet': 'Standard (free)',
  'admin.defaultSettings.providerMapbox': 'Mapbox (3D)',
  'admin.defaultSettings.mapboxToken': 'Shared Mapbox token',
  'admin.defaultSettings.mapboxTokenHint':
    'Used for every user who has not entered their own token — so the whole instance gets Mapbox without sharing the key individually. Stored encrypted.',
  'admin.defaultSettings.mapboxStyle': 'Map style',
  'admin.defaultSettings.mapboxStylePlaceholder': 'Choose a style…',
  'admin.defaultSettings.mapbox3d': '3D buildings & terrain',
  'admin.defaultSettings.mapboxQuality': 'High-quality mode',
  'admin.tabs.templates': 'Packing Templates',
  'admin.packingTemplates.title': 'Packing Templates',
  'admin.packingTemplates.subtitle':
    'Create reusable packing lists for your trips',
  'admin.packingTemplates.create': 'New Template',
  'admin.packingTemplates.namePlaceholder':
    'Template name (e.g. Beach Holiday)',
  'admin.packingTemplates.empty': 'No templates created yet',
  'admin.packingTemplates.items': 'items',
  'admin.packingTemplates.categories': 'categories',
  'admin.packingTemplates.itemName': 'Item name',
  'admin.packingTemplates.itemCategory': 'Category',
  'admin.packingTemplates.categoryName': 'Category name (e.g. Clothing)',
  'admin.packingTemplates.addCategory': 'Add category',
  'admin.packingTemplates.created': 'Template created',
  'admin.packingTemplates.deleted': 'Template deleted',
  'admin.packingTemplates.loadError': 'Failed to load templates',
  'admin.packingTemplates.createError': 'Failed to create template',
  'admin.packingTemplates.deleteError': 'Failed to delete template',
  'admin.packingTemplates.saveError': 'Failed to save',
  'admin.tabs.addons': 'Addons',
  'admin.addons.title': 'Addons',
  'admin.addons.subtitle':
    'Enable or disable features to customize your TREK experience.',
  'admin.addons.catalog.packing.name': 'Lists',
  'admin.addons.catalog.packing.description':
    'Packing lists and to-do tasks for your trips',
  'admin.addons.catalog.budget.name': 'Budget',
  'admin.addons.catalog.budget.description':
    'Track expenses and plan your trip budget',
  'admin.addons.catalog.documents.name': 'Documents',
  'admin.addons.catalog.documents.description':
    'Store and manage travel documents',
  'admin.addons.catalog.vacay.name': 'Vacay',
  'admin.addons.catalog.vacay.description':
    'Personal vacation planner with calendar view',
  'admin.addons.catalog.atlas.name': 'Atlas',
  'admin.addons.catalog.atlas.description':
    'World map with visited countries and travel stats',
  'admin.addons.catalog.collab.name': 'Collab',
  'admin.addons.catalog.collab.description':
    'Real-time notes, polls, and chat for trip planning',
  'admin.addons.catalog.memories.name': 'Photos (Immich)',
  'admin.addons.catalog.memories.description':
    'Share trip photos via your Immich instance',
  'admin.addons.catalog.mcp.name': 'MCP',
  'admin.addons.catalog.mcp.description':
    'Model Context Protocol for AI assistant integration',
  'admin.addons.subtitleBefore':
    'Enable or disable features to customize your ',
  'admin.addons.subtitleAfter': ' experience.',
  'admin.addons.enabled': 'Enabled',
  'admin.addons.disabled': 'Disabled',
  'admin.addons.type.trip': 'Trip',
  'admin.addons.type.global': 'Global',
  'admin.addons.type.integration': 'Integration',
  'admin.addons.tripHint': 'Available as a tab within each trip',
  'admin.addons.globalHint':
    'Available as a standalone section in the main navigation',
  'admin.addons.integrationHint':
    'Backend services and API integrations with no dedicated page',
  'admin.addons.toast.updated': 'Addon updated',
  'admin.addons.toast.error': 'Failed to update addon',
  'admin.addons.noAddons': 'No addons available',
  'admin.weather.title': 'Weather Data',
  'admin.weather.badge': 'Since March 24, 2026',
  'admin.weather.description':
    'TREK uses Open-Meteo as its weather data source. Open-Meteo is a free, open-source weather service — no API key required.',
  'admin.weather.forecast': '16-day forecast',
  'admin.weather.forecastDesc': 'Previously 5 days (OpenWeatherMap)',
  'admin.weather.climate': 'Historical climate data',
  'admin.weather.climateDesc':
    'Averages from the last 85 years for days beyond the 16-day forecast',
  'admin.weather.requests': '10,000 requests / day',
  'admin.weather.requestsDesc': 'Free, no API key required',
  'admin.weather.locationHint':
    'Weather is based on the first place with coordinates in each day. If no place is assigned to a day, any place from the place list is used as a reference.',
  'admin.tabs.mcpTokens': 'MCP Access',
  'admin.mcpTokens.title': 'MCP Access',
  'admin.mcpTokens.subtitle':
    'Manage OAuth sessions and API tokens across all users',
  'admin.mcpTokens.sectionTitle': 'API Tokens',
  'admin.mcpTokens.owner': 'Owner',
  'admin.mcpTokens.tokenName': 'Token Name',
  'admin.mcpTokens.created': 'Created',
  'admin.mcpTokens.lastUsed': 'Last Used',
  'admin.mcpTokens.never': 'Never',
  'admin.mcpTokens.empty': 'No MCP tokens have been created yet',
  'admin.mcpTokens.deleteTitle': 'Delete Token',
  'admin.mcpTokens.deleteMessage':
    'This will revoke the token immediately. The user will lose MCP access through this token.',
  'admin.mcpTokens.deleteSuccess': 'Token deleted',
  'admin.mcpTokens.deleteError': 'Failed to delete token',
  'admin.mcpTokens.loadError': 'Failed to load tokens',
  'admin.oauthSessions.sectionTitle': 'OAuth Sessions',
  'admin.oauthSessions.clientName': 'Client',
  'admin.oauthSessions.owner': 'Owner',
  'admin.oauthSessions.scopes': 'Scopes',
  'admin.oauthSessions.created': 'Created',
  'admin.oauthSessions.empty': 'No active OAuth sessions',
  'admin.oauthSessions.revokeTitle': 'Revoke Session',
  'admin.oauthSessions.revokeMessage':
    'This will revoke the OAuth session immediately. The client will lose MCP access.',
  'admin.oauthSessions.revokeSuccess': 'Session revoked',
  'admin.oauthSessions.revokeError': 'Failed to revoke session',
  'admin.oauthSessions.loadError': 'Failed to load OAuth sessions',
  'admin.tabs.github': 'GitHub',
  'admin.audit.subtitle':
    'Security-sensitive and administration events (backups, users, MFA, settings).',
  'admin.audit.empty': 'No audit entries yet.',
  'admin.audit.refresh': 'Refresh',
  'admin.audit.loadMore': 'Load more',
  'admin.audit.showing': '{count} loaded · {total} total',
  'admin.audit.col.time': 'Time',
  'admin.audit.col.user': 'User',
  'admin.audit.col.action': 'Action',
  'admin.audit.col.resource': 'Resource',
  'admin.audit.col.ip': 'IP',
  'admin.audit.col.details': 'Details',
  'admin.github.title': 'Release History',
  'admin.github.subtitle': 'Latest updates from {repo}',
  'admin.github.latest': 'Latest',
  'admin.github.prerelease': 'Pre-release',
  'admin.github.showDetails': 'Show details',
  'admin.github.hideDetails': 'Hide details',
  'admin.github.loadMore': 'Load more',
  'admin.github.loading': 'Loading...',
  'admin.github.error': 'Failed to load releases',
  'admin.github.by': 'by',
  'admin.github.support': 'Helps me keep building TREK',
  'admin.update.available': 'Update available',
  'admin.update.text':
    'TREK {version} is available. You are running {current}.',
  'admin.update.button': 'View on GitHub',
  'admin.update.install': 'Install Update',
  'admin.update.confirmTitle': 'Install Update?',
  'admin.update.confirmText':
    'TREK will be updated from {current} to {version}. The server will restart automatically afterwards.',
  'admin.update.dataInfo':
    'All your data (trips, users, API keys, uploads, Vacay, Atlas, budgets) will be preserved.',
  'admin.update.warning':
    'The app will be briefly unavailable during the restart.',
  'admin.update.confirm': 'Update Now',
  'admin.update.installing': 'Updating…',
  'admin.update.success': 'Update installed! Server is restarting…',
  'admin.update.failed': 'Update failed',
  'admin.update.backupHint': 'We recommend creating a backup before updating.',
  'admin.update.backupLink': 'Go to Backup',
  'admin.update.howTo': 'How to Update',
  'admin.update.dockerText':
    'Your TREK instance runs in Docker. To update to {version}, run the following commands on your server:',
  'admin.update.reloadHint': 'Please reload the page in a few seconds.',
  'admin.tabs.permissions': 'Permissions',
  'admin.addons.catalog.journey.name': 'Journey',
  'admin.addons.catalog.journey.description':
    'Trip tracking & travel journal with check-ins, photos, and daily stories',
  'admin.passkey.title': 'Passkey login',
  'admin.passkey.cardHint': 'Let users sign in with passkeys (WebAuthn). Off by default.',
  'admin.passkey.login': 'Enable passkey login',
  'admin.passkey.loginHint':
    'Show a "Sign in with a passkey" option and let users enrol passkeys in their settings.',
  'admin.passkey.notConfigured':
    'No WebAuthn domain resolves for this deployment yet. Set APP_URL or the Relying Party ID below — passkeys stay hidden until then.',
  'admin.passkey.rpId': 'Relying Party ID (domain)',
  'admin.passkey.rpIdHint':
    'The bare domain passkeys are bound to, e.g. trek.example.org. Leave empty to derive it from APP_URL. Changing it later invalidates existing passkeys.',
  'admin.passkey.origins': 'Allowed origins',
  'admin.passkey.originsHint':
    'Comma-separated full origins, e.g. https://trek.example.org. Leave empty to use APP_URL.',
  'admin.passkey.reset': 'Reset passkeys',
  'admin.passkey.resetHint':
    "Remove all of this user's passkeys (e.g. on a lost device). They can still sign in with their password.",
  'admin.passkey.resetConfirm': 'Remove all passkeys for {name}?',
  'admin.passkey.resetDone': 'Removed {count} passkey(s)',
};
export default admin;