forked from
tranquil.farm/tranquil-pds
Our Personal Data Server from scratch!
56 kB
1183 lines
1{
2 "common": {
3 "loading": "Loading",
4 "error": "Error",
5 "save": "Save",
6 "cancel": "Cancel",
7 "back": "Back",
8 "done": "Done",
9 "continue": "Continue",
10 "refresh": "Refresh",
11 "delete": "Delete",
12 "created": "Created",
13 "name": "Name",
14 "backToDashboard": "← Dashboard",
15 "copied": "Copied",
16 "copyToClipboard": "Copy",
17 "verifying": "Verifying",
18 "saving": "Saving",
19 "creating": "Creating",
20 "sending": "Sending",
21 "checking": "Checking",
22 "signIn": "Sign in",
23 "verify": "Verify",
24 "revoke": "Revoke",
25 "resendCode": "Resend code",
26 "backToLogin": "Back to Login",
27 "backToSettings": "Back to Settings"
28 },
29 "login": {
30 "title": "Sign In",
31 "button": "Sign in",
32 "redirecting": "Redirecting",
33 "chooseAccount": "Choose an account",
34 "signInToAnother": "Or sign in to another account",
35 "forgotPassword": "Forgot password?",
36 "lostPasskey": "Lost passkey?",
37 "noAccount": "No account?",
38 "createAccount": "Create one",
39 "removeAccount": "Remove"
40 },
41 "verification": {
42 "title": "Verify account",
43 "subtitle": "Enter the code sent to your contact method",
44 "codeLabel": "Code",
45 "codePlaceholder": "6-digit code",
46 "resent": "Code resent"
47 },
48 "register": {
49 "title": "Create Account",
50 "redirecting": "Redirecting",
51 "migrateTitle": "Already have an account?",
52 "migrateDescription": "Migrate instead of creating a new account",
53 "migrateLink": "Migrate your account",
54 "handle": "Handle",
55 "handlePlaceholder": "yourname",
56 "handleHint": "Your full handle will be: @{handle}",
57 "handleTaken": "This handle is already taken",
58 "handleDotWarning": "Custom domains can be set up in Settings",
59 "password": "Password",
60 "passwordPlaceholder": "At least 8 characters",
61 "confirmPassword": "Confirm Password",
62 "confirmPasswordPlaceholder": "Confirm your password",
63 "identityType": "Identity Type",
64 "didPlc": "did:plc",
65 "didPlcHint": "Portable identity via PLC Directory",
66 "didWeb": "did:web",
67 "didWebHint": "Identity hosted on this PDS",
68 "didWebDisabledHint": "Not available on this PDS",
69 "didWebBYOD": "did:web (BYOD)",
70 "didWebBYODHint": "Bring your own domain",
71 "didWebWarningTitle": "did:web trade-offs",
72 "didWebWarning1": "Permanent tie:",
73 "didWebWarning1Detail": "Your identity will be {did}",
74 "didWebWarning2": "No recovery:",
75 "didWebWarning2Detail": "No rotation keys like did:plc",
76 "didWebWarning3": "Our commitment:",
77 "didWebWarning3Detail": "We will continue hosting your DID document if you migrate",
78 "externalDid": "Your did:web",
79 "externalDidPlaceholder": "did:web:yourdomain.com",
80 "externalDidHint": "Serve DID document at",
81 "contactMethod": "Contact Method",
82 "verificationMethod": "Verification Method",
83 "email": "Email",
84 "emailAddress": "Email Address",
85 "emailPlaceholder": "you@example.com",
86 "discord": "Discord",
87 "discordUsername": "Discord Username",
88 "discordUsernamePlaceholder": "yourusername",
89 "discordInUseWarning": "Discord username in use by another account",
90 "telegram": "Telegram",
91 "telegramUsername": "Telegram Username",
92 "telegramUsernamePlaceholder": "@yourusername",
93 "telegramInUseWarning": "Telegram username in use by another account",
94 "signal": "Signal",
95 "signalUsername": "Signal Username",
96 "signalUsernamePlaceholder": "username.01",
97 "signalInUseWarning": "Signal username in use by another account",
98 "notConfigured": "not configured",
99 "inviteCode": "Invite Code",
100 "inviteCodePlaceholder": "Enter your invite code",
101 "inviteCodeRequired": "required",
102 "alreadyHaveAccount": "Already have an account?",
103 "signIn": "Sign in",
104 "passkeyAccount": "Passkey",
105 "passwordAccount": "Password",
106 "ssoAccount": "SSO",
107 "noSsoProviders": "No SSO providers configured",
108 "continueWith": "Continue with {provider}",
109 "validation": {
110 "handleRequired": "Handle is required",
111 "handleNoDots": "Handle cannot contain dots. You can set up a custom domain handle after creating your account.",
112 "passwordRequired": "Password is required",
113 "passwordLength": "Password must be at least 8 characters",
114 "passwordsMismatch": "Passwords do not match",
115 "inviteCodeRequired": "Invite code is required",
116 "externalDidRequired": "External did:web is required",
117 "externalDidFormat": "External DID must start with did:web:",
118 "emailRequired": "Email is required for email verification",
119 "discordUsernameRequired": "Discord username is required for Discord verification",
120 "telegramRequired": "Telegram username is required for Telegram verification",
121 "signalRequired": "Signal username is required for Signal verification"
122 }
123 },
124 "dashboard": {
125 "title": "Dashboard",
126 "accountManager": "Account manager",
127 "switchAccount": "Switch Account",
128 "addAnotherAccount": "Add another account",
129 "signOut": "Sign out @{handle}",
130 "deactivatedTitle": "Account Deactivated",
131 "deactivatedMessage": "Your account is currently deactivated. This typically happens during account migration. Some features may be limited until your account is reactivated.",
132 "handle": "Handle",
133 "did": "DID",
134 "primaryContact": "Primary Contact",
135 "admin": "Admin",
136 "deactivated": "Deactivated",
137 "verified": "Verified",
138 "unverified": "Unverified",
139 "navAppPasswords": "App Passwords",
140 "navSessions": "Active Sessions",
141 "navInviteCodes": "Invite Codes",
142 "navSettings": "General",
143 "navSecurity": "Security",
144 "navComms": "Communication Preferences",
145 "navRepo": "Repository Explorer",
146 "navDelegation": "Delegation",
147 "navDelegationAudit": "Delegation Audit",
148 "navAdmin": "Admin Panel",
149 "navDidDocument": "DID Document",
150 "migrated": "Migrated",
151 "migratedTitle": "Account Migrated",
152 "migratedMessage": "Your account has migrated to {pds}. Your DID document is still hosted here, and you can update it for future migrations."
153 },
154 "didEditor": {
155 "preview": "Current DID Document",
156 "verificationMethods": "Verification Methods",
157 "verificationMethodsDesc": "Signing keys that can act on behalf of your DID. When you migrate to a new PDS, add their signing key here.",
158 "addKey": "Add Key",
159 "removeKey": "Remove",
160 "keyId": "Key ID",
161 "keyIdPlaceholder": "#atproto",
162 "publicKey": "Public Key (Multibase)",
163 "publicKeyPlaceholder": "zQ3sh...",
164 "noKeys": "No verification methods configured. Using the local PDS key.",
165 "alsoKnownAs": "Also Known As",
166 "alsoKnownAsDesc": "Handles that point to your DID. Update this when your handle changes on a new PDS.",
167 "addHandle": "Add Handle",
168 "removeHandle": "Remove",
169 "handle": "Handle",
170 "handlePlaceholder": "at://handle.newpds.com",
171 "noHandles": "No handles configured. Using the local handle.",
172 "serviceEndpoint": "Service Endpoint",
173 "serviceEndpointDesc": "The PDS that currently hosts your account data. Update this when migrating.",
174 "currentPds": "Current PDS URL",
175 "save": "Save Changes",
176 "success": "DID document updated successfully",
177 "saveFailed": "Failed to save DID document",
178 "loadFailed": "Failed to load DID document",
179 "invalidMultibase": "Public key must be a valid multibase string starting with 'z'",
180 "helpTitle": "What is this?",
181 "helpText": "When you migrate to another PDS, that PDS generates new signing keys. Update your DID document here so it points to your new keys and location. This enables multi-hop migrations (PDS 1 → PDS 2 → PDS 3)."
182 },
183 "settings": {
184 "language": "Language",
185 "changeEmail": "Change Email",
186 "currentEmail": "Current: {email}",
187 "newEmail": "New Email",
188 "newEmailPlaceholder": "new@example.com",
189 "emailInUseWarning": "This email is already used by another account. You can still use it, but account recovery may require your handle.",
190 "changeEmailButton": "Change Email",
191 "requesting": "Requesting...",
192 "verificationCode": "Verification Code",
193 "verificationCodePlaceholder": "Enter verification code",
194 "confirmEmailChange": "Confirm Email Change",
195 "emailTokenHint": "Enter the code from the email, or click the link in the email on any device.",
196 "emailUpdateAuthorized": "Email change authorized! Click confirm to complete.",
197 "updating": "Updating...",
198 "changeHandle": "Change Handle",
199 "currentHandle": "Current: @{handle}",
200 "pdsHandle": "PDS Handle",
201 "customDomain": "Custom Domain",
202 "setupInstructions": "Setup Instructions",
203 "setupMethodsIntro": "Choose one of these verification methods:",
204 "dnsMethod": "Option 1: DNS TXT Record (Recommended)",
205 "dnsMethodDesc": "Add this TXT record to your domain:",
206 "httpMethod": "Option 2: HTTP Well-Known File",
207 "httpMethodDesc": "Serve your DID at this URL:",
208 "httpMethodContent": "The file should contain only:",
209 "yourDomain": "Your Domain",
210 "yourDomainPlaceholder": "example.com",
211 "verifyAndUpdate": "Verify & Update Handle",
212 "newHandle": "New Handle",
213 "newHandlePlaceholder": "yourhandle",
214 "changeHandleButton": "Change Handle",
215 "exportData": "Export Data",
216 "downloadRepo": "Download Repository",
217 "downloadBlobs": "Download Media",
218 "exporting": "Exporting...",
219 "backups": {
220 "title": "Backups",
221 "autoBackup": "Automatic backups",
222 "enabled": "Automatic backups enabled",
223 "disabled": "Automatic backups disabled",
224 "toggleFailed": "Failed to update backup setting",
225 "noBackups": "No backups available yet.",
226 "download": "Download",
227 "delete": "Delete",
228 "createNow": "Create Backup Now",
229 "created": "Backup created successfully",
230 "createFailed": "Failed to create backup",
231 "downloadFailed": "Failed to download backup",
232 "deleted": "Backup deleted",
233 "deleteFailed": "Failed to delete backup",
234 "restoreTitle": "Restore from Backup",
235 "restoreHint": "Upload a CAR file to restore your repository",
236 "selectedFile": "Selected file",
237 "restore": "Restore",
238 "restoring": "Restoring...",
239 "restored": "Repository restored successfully",
240 "restoreFailed": "Failed to restore repository"
241 },
242 "deleteAccount": "Delete Account",
243 "deleteWarning": "This action is irreversible. All your data will be permanently deleted.",
244 "requestDeletion": "Request Account Deletion",
245 "confirmationCode": "Confirmation Code",
246 "confirmationCodePlaceholder": "Enter confirmation code",
247 "yourPassword": "Your Password",
248 "yourPasswordPlaceholder": "Enter your password",
249 "permanentlyDelete": "Permanently Delete Account",
250 "deleting": "Deleting...",
251 "messages": {
252 "emailCodeSentToCurrent": "Verification code sent to your current email address",
253 "emailUpdated": "Email updated successfully",
254 "emailUpdateFailed": "Failed to update email",
255 "handleUpdated": "Handle updated successfully",
256 "handleUpdateFailed": "Failed to update handle",
257 "deletionConfirmationSent": "Deletion confirmation sent to your email",
258 "deletionRequestFailed": "Failed to request account deletion",
259 "deleteConfirmation": "Are you absolutely sure you want to delete your account? This cannot be undone.",
260 "deletionFailed": "Failed to delete account",
261 "repoExported": "Repository exported successfully",
262 "blobsExported": "Media files exported successfully",
263 "noBlobsToExport": "No media files to export",
264 "exportFailed": "Failed to export"
265 }
266 },
267 "appPasswords": {
268 "create": "Create",
269 "name": "Name",
270 "namePlaceholder": "App name (eg., Graysky)",
271 "created": "App Password Created",
272 "createdMessage": "Copy this password now. You won't be able to see it again.",
273 "noPasswords": "No app passwords yet",
274 "deleteConfirm": "Revoke app password \"{name}\"?",
275 "deleted": "App password revoked",
276 "loadFailed": "Failed to load app passwords",
277 "createFailed": "Failed to create app password",
278 "deleteFailed": "Failed to revoke app password",
279 "saveWarning": "Save this password now - you will not see it again",
280 "saveWarningTitle": "Important: Save this app password!",
281 "saveWarningMessage": "This password is required to sign into apps that don't support passkeys or OAuth. You will only see it once.",
282 "acknowledgeLabel": "I have saved my app password in a secure location",
283 "permissions": "Permissions",
284 "scopeFull": "Full Access",
285 "scopeReadOnly": "Read Only",
286 "scopePostOnly": "Post Only",
287 "scopeCustom": "Custom",
288 "byController": "By Controller"
289 },
290 "sessions": {
291 "noSessions": "No active sessions found.",
292 "current": "Current",
293 "oauth": "OAuth",
294 "session": "Session",
295 "signOut": "Sign Out",
296 "revoke": "Revoke",
297 "revokeAll": "Revoke All Other Sessions",
298 "revokeCurrentConfirm": "This will log you out of this session. Continue?",
299 "revokeConfirm": "Revoke this session?",
300 "revokeAllConfirm": "This will revoke {count} other session(s). Continue?",
301 "noOtherSessions": "No other sessions to revoke",
302 "sessionRevoked": "Session revoked",
303 "allSessionsRevoked": "All other sessions revoked",
304 "failedToLoad": "Failed to load sessions",
305 "failedToRevoke": "Failed to revoke session",
306 "failedToRevokeAll": "Failed to revoke sessions",
307 "created": "Created:",
308 "expires": "Expires:",
309 "daysAgo": "{count} day(s) ago",
310 "hoursAgo": "{count} hour(s) ago",
311 "minutesAgo": "{count} minute(s) ago",
312 "justNow": "Just now"
313 },
314 "inviteCodes": {
315 "loadFailed": "Failed to load invite codes",
316 "createFailed": "Failed to create invite code",
317 "createNew": "Create New Invite Code",
318 "yourCodes": "Your Invite Codes",
319 "noCodes": "No invite codes yet",
320 "available": "Available",
321 "used": "Used by @{handle}",
322 "spent": "Spent",
323 "disabled": "Disabled",
324 "created": "Invite Code Created",
325 "copy": "Copy",
326 "createdOn": "Created {date}"
327 },
328 "security": {
329 "passkeys": "Passkeys",
330 "addPasskey": "Add Passkey",
331 "adding": "Adding...",
332 "noPasskeys": "No passkeys registered",
333 "passkeyName": "Passkey name",
334 "passkeyNamePlaceholder": "eg., MacBook Pro, iPhone",
335 "rename": "Rename",
336 "deletePasskey": "Delete",
337 "deletePasskeyConfirm": "Delete passkey \"{name}\"? You won't be able to use it to sign in anymore.",
338 "totp": "Authenticator App (TOTP)",
339 "totpEnabled": "TOTP is enabled",
340 "totpDisabled": "TOTP is not enabled",
341 "enableTotp": "Enable TOTP",
342 "disableTotp": "Disable TOTP",
343 "disabling": "Disabling...",
344 "totpSetupInstructions": "Scan this QR code with your authenticator app, then enter the 6-digit code to verify.",
345 "totpCode": "TOTP code",
346 "totpCodePlaceholder": "6 digits",
347 "verifyAndEnable": "Verify & Enable",
348 "backupCodes": "Backup Codes",
349 "backupCodesDescription": "Use these codes to sign in if you lose access to your authenticator app. Each code can only be used once.",
350 "regenerateBackupCodes": "Regenerate Backup Codes",
351 "regenerating": "Regenerating...",
352 "regenerateConfirm": "Regenerate backup codes? Your current codes will no longer work.",
353 "legacyLogin": "Legacy Login",
354 "legacyLoginDescription": "Allow signing in with username/password directly (legacy mode). When disabled, you must use OAuth with MFA.",
355 "legacyLoginOn": "Legacy login is enabled",
356 "legacyLoginOff": "Legacy login is disabled",
357 "enableLegacyLogin": "Enable legacy login",
358 "disableLegacyLogin": "Disable legacy login",
359 "legacyLoginWarning": "Warning: Enabling legacy login bypasses MFA for direct password logins. Only enable if needed for app compatibility.",
360 "legacyAppsTitle": "What are legacy apps?",
361 "legacyAppsDescription": "Some apps (like the official Bluesky app) use older authentication that only requires your password. When you have MFA enabled, these apps bypass your second factor. Disabling legacy login forces all apps to use OAuth, which properly enforces MFA.",
362 "password": "Password",
363 "passwordStatus": "You have a password set",
364 "noPassword": "No password set (passkey-only account)",
365 "setPassword": "Set Password",
366 "removePassword": "Remove Password",
367 "removing": "Removing...",
368 "next": "Next: Verify Code",
369 "copyToClipboard": "Copy to Clipboard",
370 "savedMyCodes": "I've Saved My Codes",
371 "cantScan": "Can't scan? Enter manually",
372 "unnamedPasskey": "Unnamed passkey",
373 "added": "Added",
374 "lastUsed": "Last used",
375 "disableTotpWarning": "This will make your account less secure.",
376 "removePasswordWarning": "This will make your account passkey-only. You'll only be able to sign in using your registered passkeys. If you lose access to all your passkeys, you can recover your account using your notification channel.",
377 "trustedDevices": "Trusted Devices",
378 "trustedDevicesDescription": "Devices that can skip two-factor authentication when signing in. Trust is granted for 30 days and automatically extends when you use the device.",
379 "appCompatibility": "App Compatibility",
380 "enterPassword": "Enter your password",
381 "sessionExpired": "Session expired. Please log in again.",
382 "legacyLoginEnabled": "Legacy app login enabled",
383 "legacyLoginDisabled": "Legacy app login disabled - only OAuth apps can sign in",
384 "failedToUpdatePreference": "Failed to update preference",
385 "passwordRemoved": "Password removed. Your account is now passkey-only.",
386 "failedToRemovePassword": "Failed to remove password",
387 "failedToLoadTotpStatus": "Failed to load TOTP status",
388 "totpEnabledSuccess": "Two-factor authentication enabled successfully",
389 "totpDisabledSuccess": "Two-factor authentication disabled",
390 "backupCodesCopied": "Backup codes copied to clipboard",
391 "failedToLoadPasskeys": "Failed to load passkeys",
392 "passkeysNotSupported": "Passkeys are not supported in this browser",
393 "passkeyCreationCancelled": "Passkey creation was cancelled",
394 "passkeyAddedSuccess": "Passkey added successfully",
395 "passkeyDeleted": "Passkey deleted",
396 "passkeyRenamed": "Passkey renamed",
397 "changePassword": "Change Password",
398 "currentPassword": "Current Password",
399 "currentPasswordPlaceholder": "Enter current password",
400 "newPassword": "New Password",
401 "newPasswordPlaceholder": "Enter new password",
402 "confirmPassword": "Confirm New Password",
403 "confirmPasswordPlaceholder": "Confirm new password",
404 "passwordsDoNotMatch": "Passwords do not match",
405 "passwordTooShort": "Password must be at least 8 characters",
406 "passwordChanged": "Password changed successfully",
407 "failedToChangePassword": "Failed to change password",
408 "changing": "Changing...",
409 "setting": "Setting...",
410 "passwordSet": "Password set successfully",
411 "failedToSetPassword": "Failed to set password",
412 "failedToDisableTotp": "Failed to disable TOTP"
413 },
414 "comms": {
415 "failedToLoad": "Failed to load preferences",
416 "failedToSave": "Failed to save preferences",
417 "failedToVerify": "Verification failed",
418 "failedToLoadHistory": "Failed to load message history",
419 "preferredChannel": "Preferred Channel",
420 "channelConfiguration": "Channel Configuration",
421 "emailVia": "Receive messages via email",
422 "discordVia": "Receive messages via Discord DM",
423 "telegramVia": "Receive messages via Telegram",
424 "signalVia": "Receive messages via Signal",
425 "configureToEnable": "Configure below to enable",
426 "notConfiguredOnServer": "Not configured on this server",
427 "primary": "Primary",
428 "verified": "Verified",
429 "notVerified": "Not verified",
430 "verifyButton": "Verify",
431 "verifyCodePlaceholder": "Enter verification code",
432 "submit": "Submit",
433 "savePreferences": "Save Preferences",
434 "preferencesSaved": "Communication preferences saved",
435 "verifiedSuccess": "{channel} verified successfully",
436 "messageHistory": "Message History",
437 "noMessages": "No messages found.",
438 "discordInUseWarning": "This Discord username is already associated with another account.",
439 "telegramInUseWarning": "This Telegram username is already associated with another account.",
440 "signalInUseWarning": "This Signal username is already associated with another account.",
441 "telegramStartBot": "Or send /start {handle} to @{botUsername} manually",
442 "telegramOpenLink": "Open Telegram to verify",
443 "discordStartBot": "DM @{botUsername} on Discord and send /start {handle}",
444 "discordOpenLink": "Open Discord to verify"
445 },
446 "repoExplorer": {
447 "collections": "Collections",
448 "noRecords": "No records in this collection",
449 "uri": "URI",
450 "cid": "CID",
451 "deleteConfirm": "Delete record {rkey}? This cannot be undone.",
452 "unknownError": "An unknown error occurred",
453 "invalidJson": "Invalid JSON",
454 "collectionRequired": "Collection is required",
455 "recordCreated": "Record created: {uri}",
456 "recordUpdated": "Record updated",
457 "recordDeleted": "Record deleted",
458 "newRecord": "New Record",
459 "createRecord": "Create Record",
460 "filterCollections": "Filter collections...",
461 "filterRecords": "Filter records...",
462 "noCollectionsYet": "No collections yet. Create your first record to get started.",
463 "recordJson": "Record JSON",
464 "updateRecord": "Update Record",
465 "collectionNsid": "Collection (NSID)",
466 "recordKeyOptional": "Record Key (optional)",
467 "autoGenerated": "Auto-generated if empty (TID)",
468 "autoGeneratedHint": "Leave empty to auto-generate a TID-based key",
469 "demoPostText": "Hello from my PDS! This is my first post.",
470 "demoDisplayName": "Your Display Name",
471 "demoBio": "A short bio about yourself."
472 },
473 "admin": {
474 "failedToLoadStats": "Failed to load server stats",
475 "failedToLoadUsers": "Failed to load users",
476 "searchToSeeUsers": "Search to view users",
477 "search": "Search",
478 "serverConfig": "Server Configuration",
479 "serverName": "Server Name",
480 "serverNamePlaceholder": "My PDS",
481 "serverNameHelp": "Displayed in the browser tab and other places",
482 "serverLogo": "Server Logo",
483 "logoPreview": "Logo preview",
484 "removeLogo": "Remove",
485 "logoHelp": "Used as favicon and shown in the navbar",
486 "themeColors": "Theme Colors",
487 "themeColorsHint": "Leave blank to use default colors.",
488 "primaryLight": "Primary (Light Mode)",
489 "primaryDark": "Primary (Dark Mode)",
490 "secondaryLight": "Secondary (Light Mode)",
491 "secondaryDark": "Secondary (Dark Mode)",
492 "configSaved": "Server configuration saved",
493 "saveConfig": "Save Configuration",
494 "serverStats": "Server Statistics",
495 "users": "Users",
496 "repos": "Repositories",
497 "records": "Records",
498 "blobStorage": "Blob Storage",
499 "refreshStats": "Refresh Stats",
500 "userManagement": "User Management",
501 "searchPlaceholder": "Search by handle (optional)",
502 "handle": "Handle",
503 "email": "Email",
504 "status": "Status",
505 "created": "Created",
506 "loadMore": "Load More",
507 "inviteCodes": "Invite Codes",
508 "loadInviteCodes": "Load Invite Codes",
509 "refresh": "Refresh",
510 "noInvites": "No invite codes found",
511 "available": "Available",
512 "uses": "Uses",
513 "disable": "Disable",
514 "disableInviteConfirm": "Disable invite code {code}?",
515 "active": "Active",
516 "exhausted": "Exhausted",
517 "disabled": "Disabled",
518 "userDetails": "User Details",
519 "did": "DID",
520 "invites": "Invites",
521 "enabled": "Enabled",
522 "enableInvites": "Enable Invites",
523 "disableInvites": "Disable Invites",
524 "deleteAccount": "Delete Account",
525 "deleteConfirm": "Delete account @{handle}? This cannot be undone.",
526 "verified": "Verified",
527 "unverified": "Unverified",
528 "deactivated": "Deactivated",
529 "inviteDisabled": "Invite code disabled",
530 "invitesEnabled": "User invites enabled",
531 "invitesDisabled": "User invites disabled",
532 "userDeleted": "User account deleted",
533 "failedToLoadConfig": "Failed to load server configuration"
534 },
535 "oauth": {
536 "login": {
537 "title": "Sign in",
538 "subtitle": "Signing in to",
539 "signingIn": "Signing in",
540 "authenticating": "Authenticating",
541 "checkingPasskey": "Checking",
542 "signInWithPasskey": "Passkey",
543 "passkeyNotSetUp": "No passkey",
544 "orUsePassword": "or",
545 "password": "Password",
546 "rememberDevice": "Remember this device",
547 "passkeyHintChecking": "Checking",
548 "passkeyHintAvailable": "Use passkey",
549 "passkeyHintNotAvailable": "No passkey registered",
550 "passwordPlaceholder": "Password",
551 "usePasskey": "Use passkey",
552 "orUseCredentials": "or"
553 },
554 "sso": {
555 "linkedAccounts": "Linked Accounts",
556 "noLinkedAccounts": "No linked accounts",
557 "unlink": "Unlink",
558 "unlinkConfirm": "Are you sure you want to unlink this account?",
559 "unlinked": "Unlinked {provider}",
560 "linkedAt": "Linked",
561 "linkNewAccount": "Link Account",
562 "linked": "Linked",
563 "linkSuccess": "Account linked successfully",
564 "linkFailed": "Failed to link account",
565 "unlinkFailed": "Failed to unlink account"
566 },
567 "consent": {
568 "title": "Authorize Application",
569 "appWantsAccess": "{app} wants to access your account",
570 "authorize": "Authorize",
571 "deny": "Deny",
572 "authorizing": "Authorizing...",
573 "signingInAs": "Signing in as:",
574 "permissionsRequested": "Permissions Requested",
575 "required": "Required",
576 "rememberChoiceLabel": "Remember my choice for this application",
577 "scopes": {
578 "atprotoWithGranular": {
579 "name": "AT Protocol Access",
580 "description": "AT Protocol baseline scope (permissions determined by selected options below)"
581 }
582 },
583 "unexpectedState": {
584 "title": "Unexpected State",
585 "description": "The consent page is in an unexpected state. Please check the browser console for errors.",
586 "reload": "Reload Page"
587 }
588 },
589 "accounts": {
590 "title": "Choose account",
591 "useAnother": "Use another account"
592 },
593 "register": {
594 "title": "Create account",
595 "subtitle": "for",
596 "subtitleGeneric": "Create an account",
597 "haveAccount": "Have an account? Sign in"
598 },
599 "twoFactorCode": {
600 "title": "Verification",
601 "subtitle": "Code sent to {channel}",
602 "codeLabel": "Code",
603 "codePlaceholder": "6-digit code",
604 "errors": {
605 "missingRequestUri": "Missing request URI",
606 "verificationFailed": "Verification failed",
607 "connectionFailed": "Connection failed",
608 "unexpectedResponse": "Unexpected response"
609 }
610 },
611 "totp": {
612 "title": "Authenticator code",
613 "codePlaceholder": "6-digit code",
614 "backupCodePlaceholder": "Backup code",
615 "trustDevice": "Trust this device for 30 days",
616 "hintBackupCode": "Backup code",
617 "hintTotpCode": "Authenticator code"
618 },
619 "error": {
620 "title": "Authorization failed",
621 "tryAgain": "Retry"
622 }
623 },
624 "sso_register": {
625 "title": "Complete Registration",
626 "subtitle": "Creating account with {provider}",
627 "handle_label": "Choose your handle",
628 "handle_available": "Available",
629 "handle_taken": "Already taken",
630 "submit": "Create Account",
631 "error_expired": "Registration session expired. Please try again.",
632 "error_handle_required": "Please choose a handle",
633 "emailVerifiedByProvider": "This email is verified by {provider}. No additional verification needed.",
634 "emailChangedNeedsVerification": "If you use a different email, you will need to verify it.",
635 "infoAfterTitle": "After creating your account",
636 "infoAddPassword": "Add a password for traditional login",
637 "infoAddPasskey": "Set up a passkey for passwordless sign-in",
638 "infoLinkProviders": "Link additional SSO providers",
639 "infoChangeHandle": "Change your handle or use a custom domain",
640 "tryAgain": "Try again"
641 },
642 "verify": {
643 "title": "Verify Your Account",
644 "subtitle": "We've sent a verification code to your {channel}. Enter it below to complete registration.",
645 "tokenSubtitle": "Enter the verification code and the identifier it was sent to.",
646 "tokenTitle": "Verify",
647 "codePlaceholder": "Paste verification code",
648 "codeLabel": "Verification Code",
649 "codeHelp": "Copy the entire code from your message",
650 "pleaseWait": "Please wait...",
651 "codeResent": "Verification code resent!",
652 "codeResentDetail": "Verification code sent! Check your inbox.",
653 "verifyingAccount": "Verifying account: @{handle}",
654 "startOver": "Start over with a different account",
655 "noPending": "No pending verification found.",
656 "noPendingInfo": "If you recently created an account and need to verify it, you may need to create a new account. If you already verified your account, you can sign in.",
657 "createAccount": "Create Account",
658 "signIn": "Sign In",
659 "verified": "Verified!",
660 "channelVerified": "Your {channel} has been verified successfully.",
661 "canNowSignIn": "You can now sign in to your account.",
662 "migrationContinue": "You can close this tab and continue your migration in the original window.",
663 "continue": "Continue",
664 "identifierLabel": "Email or Identifier",
665 "identifierPlaceholder": "you@example.com",
666 "identifierHelp": "The email address or identifier the code was sent to",
667 "emailUpdateTitle": "Update Email Address",
668 "emailUpdateSubtitle": "Enter your new email address and the verification code sent to your current email.",
669 "emailUpdateRequiresAuth": "You must be signed in to update your email address.",
670 "emailUpdateFailed": "Failed to update email address",
671 "emailUpdateCodeHelp": "The code was sent to your current email address",
672 "newEmailLabel": "New Email Address",
673 "newEmailPlaceholder": "new@example.com",
674 "updateEmail": "Update Email",
675 "updating": "Updating...",
676 "emailUpdated": "Your email has been updated successfully.",
677 "emailUpdatedInfo": "You may need to verify your new email address.",
678 "emailAuthorizeSuccess": "Your email update has been authorized.",
679 "emailAuthorizeInfo": "You can now complete the change on your original device."
680 },
681 "resetPassword": {
682 "title": "Reset Password",
683 "forgotTitle": "Forgot Password",
684 "subtitle": "Enter the code you received and choose a new password.",
685 "forgotSubtitle": "Enter your handle or email and we'll send you a code to reset your password.",
686 "handleOrEmail": "Handle or Email",
687 "emailPlaceholder": "handle or you@example.com",
688 "sendCode": "Send Reset Code",
689 "sending": "Sending...",
690 "codeSent": "Password reset code sent! Check your preferred notification channel.",
691 "code": "Reset Code",
692 "codePlaceholder": "Enter reset code",
693 "newPassword": "New Password",
694 "newPasswordPlaceholder": "At least 8 characters",
695 "confirmPassword": "Confirm Password",
696 "confirmPasswordPlaceholder": "Confirm new password",
697 "resetButton": "Reset Password",
698 "resetting": "Resetting...",
699 "success": "Password reset successfully!",
700 "requestNewCode": "Request New Code",
701 "passwordsMismatch": "Passwords do not match",
702 "passwordLength": "Password must be at least 8 characters"
703 },
704 "recoverPasskey": {
705 "title": "Recover Your Account",
706 "invalidLinkTitle": "Invalid Recovery Link",
707 "invalidLinkMessage": "This recovery link is invalid or has been corrupted. Please request a new recovery email.",
708 "goToLogin": "Go to Login",
709 "successTitle": "Password Set!",
710 "successMessage": "Your temporary password has been set. You can now sign in with this password.",
711 "successNextSteps": "After signing in, we recommend adding a new passkey in your security settings to restore passkey-only authentication.",
712 "signIn": "Sign In",
713 "subtitle": "Set a temporary password to regain access to your passkey-only account.",
714 "newPassword": "New Password",
715 "newPasswordPlaceholder": "At least 8 characters",
716 "confirmPassword": "Confirm Password",
717 "confirmPasswordPlaceholder": "Confirm your password",
718 "whatHappensNext": "What happens next?",
719 "whatHappensNextDetail": "After setting this password, you can sign in and add a new passkey in your security settings. Once you have a new passkey, you can optionally remove the temporary password.",
720 "setPassword": "Set Password",
721 "settingPassword": "Setting password...",
722 "validation": {
723 "passwordRequired": "New password is required",
724 "passwordLength": "Password must be at least 8 characters",
725 "passwordsMismatch": "Passwords do not match"
726 },
727 "errors": {
728 "invalidLink": "Invalid recovery link. Please request a new one.",
729 "expired": "This recovery link has expired. Please request a new one."
730 }
731 },
732 "requestPasskeyRecovery": {
733 "title": "Recover Passkey Account",
734 "subtitle": "Lost access to your passkey? Enter your handle or email and we'll send you a recovery link.",
735 "successTitle": "Recovery Link Sent",
736 "successMessage": "If your account exists and is a passkey-only account, you'll receive a recovery link at your preferred notification channel.",
737 "successInfo": "The link will expire in 1 hour. Check your email, Discord, Telegram, or Signal depending on your account settings.",
738 "handleOrEmail": "Handle or Email",
739 "emailPlaceholder": "handle or you@example.com",
740 "howItWorks": "How it works",
741 "howItWorksDetail": "We'll send a secure link to your registered notification channel. Click the link to set a temporary password. Then you can sign in and add a new passkey.",
742 "sendRecoveryLink": "Send Recovery Link",
743 "sending": "Sending..."
744 },
745 "registerPasskey": {
746 "identityType": "Identity Type",
747 "identityTypeHint": "How your decentralized identity is managed",
748 "didPlcRecommended": "did:plc (Recommended)",
749 "didPlcHint": "Portable identity via PLC Directory",
750 "didWeb": "did:web",
751 "didWebHint": "Identity hosted on this PDS",
752 "didWebDisabledHint": "Not available on this PDS",
753 "didWebBYOD": "did:web (BYOD)",
754 "didWebBYODHint": "Bring your own domain",
755 "didWebWarningTitle": "did:web trade-offs",
756 "didWebWarning1": "Permanent tie:",
757 "didWebWarning1Detail": "Your identity will be {did}",
758 "didWebWarning2": "No recovery:",
759 "didWebWarning2Detail": "No rotation keys like did:plc",
760 "didWebWarning3": "Our commitment:",
761 "didWebWarning3Detail": "We will continue hosting your DID document if you migrate",
762 "didWebWarning4": "",
763 "didWebWarning4Detail": "",
764 "externalDid": "Your did:web",
765 "externalDidPlaceholder": "did:web:yourdomain.com",
766 "externalDidHint": "Serve DID document at",
767 "passkeyName": "Passkey Name",
768 "passkeyNamePlaceholder": "MacBook Touch ID",
769 "passkeyNameHint": "Optional identifier",
770 "setupPasskey": "Create Passkey",
771 "passkeyDescription": "Register a passkey for this account",
772 "createPasskey": "Create Passkey",
773 "creatingAccount": "Creating account",
774 "activatingAccount": "Activating",
775 "errors": {
776 "handleRequired": "Handle is required",
777 "handleNoDots": "Handle cannot contain dots. You can set up a custom domain handle after creating your account.",
778 "inviteRequired": "Invite code is required",
779 "externalDidRequired": "External did:web is required",
780 "externalDidFormat": "External DID must start with did:web:",
781 "emailRequired": "Email is required for email verification",
782 "discordRequired": "Discord username is required for Discord verification",
783 "telegramRequired": "Telegram username is required for Telegram verification",
784 "signalRequired": "Signal username required",
785 "passkeysNotSupported": "Passkeys not supported in this browser",
786 "passkeyCancelled": "Cancelled",
787 "passkeyFailed": "Passkey registration failed"
788 }
789 },
790 "trustedDevices": {
791 "noDevices": "No trusted devices",
792 "lastSeen": "Last seen:",
793 "trustedSince": "Trusted since:",
794 "expired": "Expired",
795 "tomorrow": "Tomorrow",
796 "inDays": "In {days} days",
797 "revoke": "Revoke",
798 "revokeConfirm": "Revoke trust for this device?",
799 "deviceRevoked": "Trust revoked",
800 "deviceRenamed": "Device renamed",
801 "deviceNamePlaceholder": "Device name",
802 "unknownDevice": "Unknown device",
803 "noDevicesHint": "When you sign in with two-factor authentication enabled, you can choose to trust the device for 30 days."
804 },
805 "reauth": {
806 "title": "Re-authenticate",
807 "password": "Password",
808 "totp": "TOTP",
809 "passkey": "Passkey",
810 "authenticatorCode": "Authenticator Code",
811 "usePasskey": "Passkey",
812 "authenticating": "Authenticating",
813 "cancel": "Cancel"
814 },
815 "delegation": {
816 "controllers": "Controllers",
817 "controllersDesc": "Accounts that can act on your behalf",
818 "noControllers": "No controllers",
819 "inactive": "Inactive",
820 "did": "DID",
821 "granted": "Granted",
822 "remove": "Remove",
823 "removeConfirm": "Are you sure you want to remove this controller?",
824 "cannotAddControllers": "You cannot add controllers because this account controls other accounts. An account can either have controllers or control other accounts, but not both.",
825 "addController": "Add Controller",
826 "controllerDid": "Controller DID",
827 "accessLevel": "Access Level",
828 "adding": "Adding...",
829 "addControllerButton": "+ Add Controller",
830 "addControllerWarningTitle": "Important: This will change how you log in",
831 "addControllerWarningText": "Adding a controller means that only the controller account will be able to log into this account via OAuth. You will no longer be able to log in directly with your own credentials through third-party apps or the web interface.",
832 "addControllerWarningBullet1": "The controller will be able to act on your behalf with the permissions you grant",
833 "addControllerWarningBullet2": "You will need to log in as the controller first, then switch to this account",
834 "addControllerWarningBullet3": "You can remove the controller later to regain direct login access",
835 "addControllerConfirm": "I understand that I will no longer be able to log in directly",
836 "controllerAdded": "Controller added successfully",
837 "controllerRemoved": "Controller removed successfully",
838 "controlledAccounts": "Controlled Accounts",
839 "controlledAccountsDesc": "Accounts you can act on behalf of",
840 "noControlledAccounts": "You do not have access to any delegated accounts.",
841 "actAs": "Act As",
842 "cannotControlAccounts": "You cannot control other accounts because this account has controllers. An account can either have controllers or control other accounts, but not both.",
843 "createDelegatedAccount": "Create Delegated Account",
844 "handle": "Handle",
845 "emailOptional": "Email (optional)",
846 "yourAccessLevel": "Your Access Level",
847 "createAccount": "Create Account",
848 "createDelegatedAccountButton": "+ Create Delegated Account",
849 "accountCreated": "Created delegated account: {handle}",
850 "auditLog": "Audit Log",
851 "auditLogDesc": "View all delegation activity",
852 "viewAuditLog": "View Audit Log",
853 "scopeOwner": "Owner",
854 "scopeViewer": "Viewer",
855 "scopeCustom": "Custom",
856 "actor": "Actor",
857 "details": "Details",
858 "previous": "Previous",
859 "next": "Next",
860 "refresh": "Refresh",
861 "actionGrantCreated": "Grant Created",
862 "actionGrantRevoked": "Grant Revoked",
863 "actionScopesModified": "Scopes Modified",
864 "actionTokenIssued": "Token Issued",
865 "actionRepoWrite": "Repository Write",
866 "actionBlobUpload": "Blob Upload",
867 "actionAccountAction": "Account Action",
868 "noAuditEntries": "No audit entries",
869 "target": "Target",
870 "pageInfo": "{start} - {end} of {total}",
871 "failedToLoadAudit": "Failed to load audit log"
872 },
873 "actAs": {
874 "noAccountSpecified": "No account DID specified",
875 "noAccess": "You do not have access to this account",
876 "failedToInitiate": "Failed to initiate OAuth flow",
877 "invalidResponse": "Invalid OAuth response",
878 "preparing": "Preparing to switch accounts...",
879 "title": "Act As",
880 "backToControllers": "Back to Controllers"
881 },
882 "oauthDelegation": {
883 "loading": "Loading",
884 "title": "Delegated Account",
885 "isDelegated": "{handle} is delegated",
886 "enterControllerHandle": "Sign in as controller",
887 "controllerHandle": "Controller handle",
888 "handlePlaceholder": "handle.example.com",
889 "checking": "Checking",
890 "controllerNotFound": "Controller not found",
891 "missingParams": "Missing delegation parameters",
892 "missingInfo": "Missing information",
893 "passkeyCancelled": "Cancelled",
894 "passkeyFailed": "Passkey failed",
895 "failedPasskeyStart": "Passkey start failed",
896 "authFailed": "Authentication failed",
897 "unexpectedResponse": "Unexpected response",
898 "signInAsController": "Controller Sign In",
899 "authenticateAs": "Sign in as {controller} for {delegated}",
900 "useDifferentController": "Different controller",
901 "signInWithPasskey": "Passkey",
902 "authenticating": "Authenticating",
903 "usePasskey": "Passkey",
904 "or": "or",
905 "password": "Password",
906 "enterPassword": "Enter password",
907 "rememberDevice": "Remember this device",
908 "signingIn": "Signing in",
909 "signIn": "Sign in",
910 "goBack": "Back",
911 "unableToLoad": "Could not load delegation info"
912 },
913 "oauthConsent": {
914 "delegatedAccess": "Delegated Access",
915 "actingAs": "Acting as",
916 "controller": "Controller",
917 "accessLevel": "Access Level",
918 "readOnlyAccess": "Read-Only Access",
919 "readOnlyDesc": "View public information only. No write access to this account.",
920 "permissionsLimited": "Permissions Limited",
921 "permissionsLimitedDesc": "Your actual permissions will be limited to your {level} access level, regardless of what the app requests.",
922 "viewerLimitedDesc": "As a Viewer, you have read-only access. This app will not be able to create, update, or delete content on this account.",
923 "editorLimitedDesc": "As an Editor, you can create and edit content but cannot manage account settings or security."
924 },
925 "migration": {
926 "title": "Account Migration",
927 "subtitle": "Move your AT Protocol identity between servers",
928 "migrateHere": "Migrate Here",
929 "migrateHereDesc": "Move your existing AT Protocol account to this PDS from another server.",
930 "bringDid": "Bring your DID and identity",
931 "transferData": "Transfer all your data",
932 "keepFollowers": "Keep your followers",
933 "whatIsMigration": "What is account migration?",
934 "whatIsMigrationDesc": "Account migration allows you to move your AT Protocol identity between Personal Data Servers (PDSes). Your DID (decentralized identifier) stays the same, so your followers and social connections are preserved.",
935 "beforeMigrate": "Before you migrate",
936 "beforeMigrate1": "You will need your current account credentials",
937 "beforeMigrate2": "Migration requires email verification for security",
938 "beforeMigrate3": "Large accounts with many images may take several minutes",
939 "beforeMigrate4": "Your old PDS will be notified to deactivate your account",
940 "importantWarning": "Account migration is a significant action. Make sure you trust the destination PDS and understand that your data will be moved. If something goes wrong, recovery may require manual intervention.",
941 "learnMore": "Learn more about migration risks",
942 "offlineRestore": "Offline Restore",
943 "offlineRestoreDesc": "Restore from backup when your old PDS is unavailable.",
944 "offlineFeature1": "Use a CAR file backup",
945 "offlineFeature2": "Prove ownership with rotation key",
946 "offlineFeature3": "Recovery for shutdown servers",
947 "oauthCompleting": "Completing authentication...",
948 "oauthFailed": "Authentication Failed",
949 "tryAgain": "Try Again",
950 "resume": {
951 "title": "Resume Migration?",
952 "incomplete": "You have an incomplete migration in progress:",
953 "direction": "Direction",
954 "migratingHere": "Migrating here",
955 "from": "From",
956 "to": "To",
957 "progress": "Progress",
958 "reenterCredentials": "You will need to re-enter your credentials to continue.",
959 "startOver": "Start Over",
960 "resumeButton": "Resume"
961 },
962 "inbound": {
963 "welcome": {
964 "title": "Migrate to This PDS",
965 "desc": "Move your existing AT Protocol account to this server.",
966 "understand": "I understand the risks and want to proceed"
967 },
968 "sourceAuth": {
969 "title": "Enter Your Current Handle",
970 "titleResume": "Resume Migration",
971 "desc": "Enter the handle of the account you want to migrate.",
972 "descResume": "Re-authenticate to your source PDS to continue the migration.",
973 "handle": "Handle",
974 "handlePlaceholder": "alice.bsky.social",
975 "handleHint": "Your current handle on your existing PDS",
976 "continue": "Continue",
977 "connecting": "Connecting...",
978 "reauthenticate": "Re-authenticate",
979 "resumeTitle": "Migration in Progress",
980 "resumeFrom": "From",
981 "resumeTo": "To",
982 "resumeProgress": "Progress",
983 "resumeOAuthNote": "You need to re-authenticate via OAuth to continue."
984 },
985 "chooseHandle": {
986 "title": "Choose Your New Handle",
987 "desc": "Select a handle for your account on this PDS.",
988 "migratingFrom": "Migrating from",
989 "newHandle": "New Handle",
990 "checkingAvailability": "Checking availability...",
991 "handleAvailable": "Handle is available!",
992 "handleTaken": "Handle is already taken",
993 "handleTooShort": "Handle must be at least 3 characters",
994 "handleHint": "You can also use your own domain by entering the full handle (eg., alice.mydomain.com)",
995 "email": "Email Address",
996 "authMethod": "Authentication Method",
997 "authPassword": "Password",
998 "authPasswordDesc": "Traditional password-based login",
999 "authPasskey": "Passkey",
1000 "authPasskeyDesc": "Passwordless login using biometrics or security key",
1001 "password": "Password",
1002 "passwordHint": "At least 8 characters",
1003 "passkeyInfo": "You'll set up a passkey after your account is created. Your device will prompt you to use biometrics (fingerprint, Face ID) or a security key.",
1004 "inviteCode": "Invite Code"
1005 },
1006 "review": {
1007 "title": "Review Migration",
1008 "desc": "Please confirm the details of your migration.",
1009 "currentHandle": "Current Handle",
1010 "newHandle": "New Handle",
1011 "did": "DID",
1012 "sourcePds": "From PDS",
1013 "targetPds": "To PDS",
1014 "email": "Email",
1015 "authentication": "Authentication",
1016 "authPasskey": "Passkey (passwordless)",
1017 "authPassword": "Password",
1018 "warning": "After you click \"Start Migration\", your repository and data will begin transferring. This process cannot be easily undone.",
1019 "startMigration": "Start Migration",
1020 "starting": "Starting..."
1021 },
1022 "migrating": {
1023 "title": "Migration in Progress",
1024 "desc": "Please wait while your account is being transferred...",
1025 "exportRepo": "Export repository",
1026 "importRepo": "Import repository",
1027 "migrateBlobs": "Migrate blobs",
1028 "migratePrefs": "Migrate preferences"
1029 },
1030 "passkeySetup": {
1031 "title": "Set Up Your Passkey",
1032 "desc": "Your email has been verified. Now set up your passkey for secure, passwordless login.",
1033 "nameLabel": "Passkey Name (optional)",
1034 "namePlaceholder": "eg., MacBook Pro, iPhone",
1035 "nameHint": "A friendly name to identify this passkey",
1036 "instructions": "Click the button below to register your passkey. Your device will prompt you to use biometrics (fingerprint, Face ID) or a security key.",
1037 "register": "Register Passkey",
1038 "registering": "Registering..."
1039 },
1040 "appPassword": {
1041 "title": "Save Your App Password",
1042 "desc": "Your passkey has been created. An app password has been generated for you to use with apps that don't support passkeys yet.",
1043 "warning": "This app password is required to sign into apps that don't support passkeys yet (like bsky.app). You will only see this password once.",
1044 "label": "App Password for",
1045 "saved": "I have saved my app password in a secure location",
1046 "continue": "Continue"
1047 },
1048 "emailVerify": {
1049 "title": "Verify Your Email",
1050 "desc": "A verification code has been sent to {email}.",
1051 "hint": "Enter the code below, or click the link in the email to continue automatically.",
1052 "tokenLabel": "Verification Code",
1053 "tokenPlaceholder": "Enter code from email",
1054 "resend": "Resend Code"
1055 },
1056 "plcToken": {
1057 "title": "Verify Migration",
1058 "desc": "A verification code has been sent to the email registered with your old account.",
1059 "info": "This code confirms you have access to the account and authorizes updating your identity to point to this PDS.",
1060 "tokenLabel": "Verification Code",
1061 "tokenPlaceholder": "Enter code from email",
1062 "resend": "Resend Code",
1063 "complete": "Complete Migration",
1064 "completing": "Verifying..."
1065 },
1066 "didWebUpdate": {
1067 "title": "Update Your DID Document",
1068 "desc": "Since you're using a did:web identity, you need to update your DID document to point to this PDS.",
1069 "yourDid": "Your DID is:",
1070 "updateInstructions": "Update the did.json file at your domain to point the atproto_pds service endpoint to this PDS:",
1071 "important": "Important:",
1072 "verifyFirst": "Make sure your DID document is updated and publicly accessible before completing the migration.",
1073 "fileLocation": "The file should be at:",
1074 "complete": "Complete Migration",
1075 "completing": "Completing..."
1076 },
1077 "finalizing": {
1078 "title": "Finalizing Migration",
1079 "desc": "Please wait while we complete the migration...",
1080 "signingPlc": "Sign identity update",
1081 "activating": "Activate account on new PDS",
1082 "deactivating": "Deactivate account on old PDS"
1083 },
1084 "success": {
1085 "title": "Migration Complete!",
1086 "desc": "Your account has been successfully migrated to this PDS.",
1087 "yourNewHandle": "Your new handle",
1088 "did": "DID",
1089 "blobsWarning": "{count} blobs could not be migrated. These may be images or other media that are no longer available.",
1090 "redirecting": "Redirecting to dashboard..."
1091 },
1092 "error": {
1093 "title": "Migration Error",
1094 "desc": "An error occurred during migration.",
1095 "startOver": "Start Over",
1096 "unknown": "An unknown error occurred."
1097 },
1098 "common": {
1099 "back": "Back",
1100 "cancel": "Cancel",
1101 "continue": "Continue",
1102 "whatWillHappen": "What will happen:",
1103 "step1": "Log in to your current PDS",
1104 "step2": "Choose your new handle on this server",
1105 "step3": "Your repository and blobs will be transferred",
1106 "step4": "Verify the migration via email",
1107 "step5": "Your identity will be updated to point here",
1108 "beforeProceed": "Before you proceed:",
1109 "warning1": "You need access to the email registered with your current account",
1110 "warning2": "Large accounts may take several minutes to transfer",
1111 "warning3": "Your old account will be deactivated after migration"
1112 }
1113 },
1114 "offline": {
1115 "welcome": {
1116 "title": "Offline Restore",
1117 "desc": "Restore your account when your old PDS is unavailable. This is for disaster recovery when you cannot contact your previous server.",
1118 "warningTitle": "Advanced Recovery Method",
1119 "warningDesc": "This method requires your rotation key private key. Only use this if your previous PDS has shut down or you cannot access it.",
1120 "requirementsTitle": "You will need:",
1121 "requirement1": "Your DID (did:plc:...)",
1122 "requirement2": "A CAR file backup of your repository",
1123 "requirement3": "Your rotation key (private key in hex, base58, or JWK format)",
1124 "understand": "I understand this is for offline recovery only"
1125 },
1126 "provideDid": {
1127 "title": "Enter Your DID",
1128 "desc": "Enter the DID of the account you want to restore.",
1129 "label": "Your DID",
1130 "hint": "Your decentralized identifier (eg., did:plc:abc123...)"
1131 },
1132 "uploadCar": {
1133 "title": "Upload Repository Backup",
1134 "desc": "Upload the CAR file containing your repository data.",
1135 "label": "CAR File",
1136 "hint": "This should be a .car file from a previous backup of your repository",
1137 "reuploadWarningTitle": "CAR File Required",
1138 "reuploadWarning": "Your session was restored, but you need to re-upload your CAR file. For security reasons, file contents are not stored between sessions."
1139 },
1140 "rotationKey": {
1141 "title": "Provide Rotation Key",
1142 "desc": "Enter your rotation key to prove ownership of this DID.",
1143 "securityWarningTitle": "Security Warning",
1144 "securityWarning1": "Your rotation key is extremely sensitive - anyone with it can take over your identity",
1145 "securityWarning2": "Only enter it on trusted devices and connections",
1146 "securityWarning3": "The key will not be stored after migration",
1147 "label": "Rotation Key",
1148 "placeholder": "Paste your rotation key (hex, base58, or JWK)...",
1149 "hint": "Supports 64-character hex, base58, or JWK format",
1150 "valid": "Rotation key verified! You have control of this DID.",
1151 "invalid": "This key is not a valid rotation key for this DID.",
1152 "validating": "Validating...",
1153 "validate": "Validate Key"
1154 },
1155 "chooseHandle": {
1156 "migratingDid": "Restoring DID"
1157 },
1158 "review": {
1159 "desc": "Please confirm the details of your offline restoration.",
1160 "carFile": "CAR File",
1161 "rotationKey": "Rotation Key",
1162 "plcWarningTitle": "Point of No Return",
1163 "plcWarning": "Once you start, your DID document will be updated to point to this PDS. If something goes wrong, you can use your rotation key to recover, but you should complete the migration to avoid a broken identity state."
1164 },
1165 "migrating": {
1166 "title": "Restoring Account",
1167 "desc": "Please wait while your account is being restored...",
1168 "creating": "Creating account",
1169 "importing": "Importing repository"
1170 },
1171 "blobs": {
1172 "title": "Migrating Blobs",
1173 "desc": "Attempting to recover images and media from your old PDS...",
1174 "migrating": "Migrating blobs",
1175 "failedTitle": "Some blobs could not be migrated",
1176 "failedDesc": "{count} blobs could not be fetched from your old PDS. This may happen if the server is unreachable or the files were deleted."
1177 },
1178 "success": {
1179 "desc": "Your account has been successfully restored to this PDS."
1180 }
1181 }
1182 }
1183}