Newer
Older
gnexus-creds / frontend / src / i18n / messages / en.js
// English source dictionary. Flat slugs grouped by area; a value may be an
// object {one, few, many, other} where a plural form is needed.
export default {
  // navigation
  "nav.secrets": "Secrets",
  "nav.history": "History",
  "nav.audit": "Audit",
  "nav.tokens": "Tokens",
  "nav.extension": "Extension",
  "nav.settings": "Settings",
  "nav.admin": "Admin",

  // common
  "common.loading": "Loading",
  "common.error": "Error",
  "common.cancel": "Cancel",
  "common.close": "Close",
  "common.delete": "Delete",
  "common.download": "Download",
  "common.restore": "Restore",
  "common.revoke": "Revoke",
  "common.save": "Save",
  "common.refresh": "Refresh",
  "common.notSet": "Not set",
  "common.uncategorized": "uncategorized",
  "common.user": "User",
  "common.hide": "Hide",
  "common.reveal": "Reveal",
  "common.records": "{n} records",

  // profile
  "profile.logout": "Logout",
  "profile.languageAuto": "Auto (from account)",
  "profile.langEn": "English",
  "profile.langUk": "Українська",
  "profile.langRu": "Русский",
  "profile.saved": "Profile updated.",

  // secrets list
  "secrets.searchPlaceholder": "service, login, tag, source",
  "secrets.sort": "Sort",
  "secrets.sortUpdatedNewest": "Updated (newest)",
  "secrets.sortUpdatedOldest": "Updated (oldest)",
  "secrets.sortTitleAz": "Title (A–Z)",
  "secrets.sortTitleZa": "Title (Z–A)",
  "secrets.sortStatus": "Status",
  "secrets.create": "Create",
  "secrets.empty": "No secrets yet",
  "secrets.emptyText": "Create the first record using the Create button.",
  "secrets.openSecret": "Open secret",

  // table columns
  "col.title": "Title",
  "col.purpose": "Purpose",
  "col.category": "Category",
  "col.status": "Status",
  "col.name": "Name",
  "col.scopes": "Scopes",
  "col.user": "User",
  "col.role": "Role",
  "col.lastSeen": "Last seen",
  "col.time": "Time",
  "col.action": "Action",
  "col.channel": "Channel",
  "col.ip": "IP",
  "col.metadata": "Metadata",
  "col.file": "File",
  "col.size": "Size",
  "col.created": "Created",

  // detail panel (SecretDetailPanel.vue)
  "detail.purpose": "Purpose",
  "detail.category": "Category",
  "detail.tags": "Tags",
  "detail.noTags": "No tags",
  "detail.access": "Access",
  "detail.accessState": "UI {ui} · REST {rest} · MCP {mcp}",
  "detail.on": "on",
  "detail.off": "off",
  "detail.encrypted": "encrypted",
  "detail.plain": "plain",
  "detail.versions": "Versions",
  "detail.editFields": "Edit fields",
  "detail.markOutdated": "Mark outdated",
  "detail.markActual": "Mark actual",
  "detail.archive": "Archive",
  "detail.deleteAction": "Delete",
  "detail.maskValues": "Mask values",
  "detail.showValues": "Show decrypted values",
  "detail.hideSecret": "Hide secret",
  "detail.revealSecret": "Reveal secret",
  "detail.editMetadata": "Edit metadata",
  "detail.secretActions": "Secret actions",
  "detail.backToList": "Back to list",
  "detail.selectSecret": "Select a secret",
  "detail.selectSecretText": "Metadata is shown by default. Values are available through reveal.",
  "detail.revealedFields": "Revealed fields",
  "detail.hideValue": "Hide value",
  "detail.showValue": "Show value",
  "detail.hideFieldValue": "Hide field value",
  "detail.showFieldValue": "Show field value",

  // history
  "history.toolbar": "Version history",
  "history.selectSecret": "Select a secret first from the Secrets tab",
  "history.version": "Version {n}",
  "history.fields": { one: "{n} field", other: "{n} fields" },
  "history.noVersions": "No versions",
  "history.noVersionsText": "Select a secret and open its history to see versions.",

  // audit
  "audit.toolbar": "Audit",
  "audit.allSecrets": "All secrets",
  "audit.empty": "No audit events",
  "audit.emptyText": "Activity will appear here once actions are performed.",

  // tokens
  "tokens.toolbar": "API tokens",
  "tokens.create": "Create token",
  "tokens.intro": "API tokens let external clients and MCP tools authenticate with gnexus-creds without a browser session. Pick a descriptive name and select the scopes this token should have.",
  "tokens.tokenName": "Token name",
  "tokens.scopeRead": "Read",
  "tokens.scopeReveal": "Reveal",
  "tokens.scopeWrite": "Write",
  "tokens.scopeAdmin": "Admin",
  "tokens.token": "Token",
  "tokens.copyNotice": "Copy this token now. It will not be shown again.",
  "tokens.empty": "No tokens",
  "tokens.emptyText": "Create an API token to access secrets programmatically.",
  "tokens.revokeTitle": "Revoke token",
  "tokens.revokeText": "This will permanently revoke token '{name}'. It can no longer be used for API or MCP access.",

  // extension tab
  "extension.toolbar": "Browser extension",
  "extension.description": "Autofill saved credentials, capture new logins, and browse secrets from the toolbar. Download the build for your browser, load it unpacked, and point it at this server with an API token.",
  "extension.download": "Download {browser} build",
  "extension.createToken": "Create an API token",
  "extension.loadFailed": "Failed to load extension info.",

  // settings tab
  "settings.overview": "Storage overview",
  "settings.totalSecrets": "Total secrets",
  "settings.activeSecrets": "Active secrets",
  "settings.mcpEnabled": "MCP enabled",
  "settings.languageToolbar": "Interface language",
  "settings.languageDescription": "The service follows your gnexus-auth account language by default; a choice here overrides it for gnexus-creds only. Auto switches back to the account language.",
  "settings.importToolbar": "Import data",
  "settings.importTitle": "Import JSON",
  "settings.importDescription": "Only gnexus-creds export JSON files are supported.",
  "settings.importPrimary": "Choose export file",
  "settings.importSecondary": "The file is parsed locally before import.",
  "settings.importAction": "Import selected file",
  "settings.importReady": "{n} secrets ready",
  "settings.exportToolbar": "Export data",
  "settings.exportDescription": "Export all secrets as decrypted JSON. Store the file securely — it contains plaintext values.",
  "settings.exportAction": "Export decrypted JSON",
  "settings.gateToolbar": "Biometric gate",
  "settings.gateDescription": "Require a fingerprint (Android), Touch ID or Windows Hello before every secret reveal. Verification runs entirely on this browser — the server never sees biometric data. Disable needs the same proof, so the gate cannot be switched off from an unattended session.",
  "settings.gateUnavailable": "Biometric authentication is unavailable on this device.",
  "settings.gateBroken": "The enrolled passkey is no longer on this device. Re-enroll the gate to restore protection.",
  "settings.gateDisable": "Disable biometric gate",
  "settings.gateEnable": "Enable biometric gate",
  "settings.dangerToolbar": "Danger zone",
  "settings.dangerDescription": "Deleting all data removes every secret and version. Audit records and API tokens are preserved.",
  "settings.deleteAll": "Delete all data",

  // biometric gate toasts
  "bio.gateTitle": "Biometric gate",
  "bio.canceled": "Canceled",
  "bio.canceledText": "Biometric verification canceled — nothing revealed.",
  "bio.noCredential": "Passkey not found on this device — re-enroll the gate in Settings.",
  "bio.failedText": "Verification failed — the secret was not revealed.",
  "bio.stayOnCanceled": "Canceled — the gate stays on.",
  "bio.stayOnFailed": "Verification failed — the gate stays on.",
  "bio.disabled": "Biometric gate disabled — reveals no longer require verification.",
  "bio.enabled": "Biometric gate enabled — every reveal will ask for the sensor.",
  "bio.enrollCanceled": "Enrollment canceled — the gate stays off.",
  "bio.enrollFailed": "Enrollment failed.",
  "bio.saved": "Saved",

  // admin
  "admin.usersToolbar": "Users",
  "admin.refresh": "Refresh",
  "admin.checkDiagnostics": "Check diagnostics",
  "admin.noUsers": "No users",
  "admin.noUsersText": "Users will appear here once they sign in.",
  "admin.backups": "Backups",
  "admin.createBackup": "Create backup",
  "admin.noBackups": "No backups",
  "admin.noBackupsText": "Create a backup before making major changes.",
  "admin.noBackupsYet": "No backups yet",

  // confirm dialogs
  "confirm.deleteAllTitle": "Delete all data",
  "confirm.deleteAllText": "This permanently removes all secrets and versions. Audit records remain.",
  "confirm.deleteSecretTitle": "Delete secret",
  "confirm.deleteSecretText": "This permanently deletes {title} and all its versions. Audit records remain.",
  "confirm.restoreTitle": "Restore database",
  "confirm.restoreText": "This will overwrite the current database with {file}. All existing data will be replaced.",

  // toasts
  "toast.deleted": "Deleted",
  "toast.allDataRemoved": "All data has been removed.",
  "toast.backup": "Backup",
  "toast.backupCreated": "Database backup created.",
  "toast.restored": "Restored",
  "toast.databaseRestored": "Database restored. Please reload the page.",

  // create modal
  "create.title": "Create secret",
  "create.titleHelp": "Human-readable name shown in lists and search results.",
  "create.purposeHelp": "Target service, server, account, or other secret destination.",
  "create.categoryHelp": "Single grouping value for browsing, for example work or banking.",
  "create.sourceHelp": "Where this secret came from: person, import, ticket, or note.",
  "create.tagsHelp": "Keywords used by search.",
  "create.notesHelp": "Short context for the secret. Limited to 140 characters.",
  "create.fieldsTitle": "Fields",
  "create.fieldsMeta": "One row per secret value",
  "create.addField": "Add field",
  "create.fieldsHelp": "Add one row per secret value. Enable encryption for passwords, tokens, PINs, and keys.",
  "create.fieldName": "Field name",
  "create.fieldNameHelp": "Name copied into API and MCP responses, for example username.",
  "create.fieldValue": "Value",
  "create.fieldValueHelp": "Actual value stored for this field.",
  "create.encrypt": "Encrypt",
  "create.removeField": "Remove field",
  "create.accessTitle": "Access",
  "create.accessMeta": "Global channels for this secret",
  "create.accessMetaEdit": "Global availability channels for this secret",
  "create.channelUi": "UI",
  "create.channelRest": "REST API",
  "create.channelMcp": "MCP",
  "create.uiInfo": "Available from the web interface after login.",
  "create.restInfo": "Available to external clients using API tokens.",
  "create.mcpInfo": "Available to MCP clients when token scopes allow it.",
  "create.statusTitle": "Status",
  "create.statusMeta": "Metadata shown in lists and filters",
  "create.statusActual": "Actual",
  "create.statusOutdated": "Outdated",
  "create.archived": "Archived",
  "create.saveMetadata": "Save metadata",
  "create.saveNewVersion": "Save new version",
  "create.sourceLabel": "Source",
  "create.notesLabel": "Notes",
  "create.fieldsLabel": "Fields",

  // import/export errors
  "import.unsupportedFile": "Unsupported import file",
};