en.yml 927 lignes · 42038 octets
# English translations — rustwarden-ui
# UI-specific sections (pages, forms, navigation, admin panels)

# Login
login:
  title: "Login"
  page_title: "Login"
  page_description: "Sign in to your account"
  subtitle: "Sign in to your account"
  username: "Username or email"
  password: "Password"
  submit: "Sign in"
  remember_me: "Remember me"
  tab_login: "Login"
  tab_register: "Register"
  register_title: "Create an account"
  register_submit: "Create my account"
  username_placeholder: "Username or email"
  password_placeholder: "Your password"
  username_placeholder_register: "Your username (min. 3 characters)"
  username_pattern_register: "Lowercase letters, digits and hyphens only, 3 to 39 characters"
  password_placeholder_register: "Your password (min. 8 characters)"
  email_placeholder: "your@email.com"
  forgot_password: "Forgot password?"
  email_not_verified: "Email not verified?"
  resend_verification: "Resend verification email"
  already_have_account: "Already have an account?"
  sign_in_link: "Sign in"
  success_message: "Login successful! Redirecting..."
  error_message: "Login error. Check your credentials."
  email_unverified_message: "Your email is not verified. Click below to resend the link."
  resend_button: "Resend verification email"
  resend_success: "Verification email sent if the account exists."
  resend_error: "Unable to send the request at this time."
  resend_prompt: "Please enter your email before resending."
  register_success: "Account created successfully! Please check your email."
  register_error: "Registration error"
  email_label: "Email"
  footer_text: "Accounts and authentication"

# Request a password-reset link
forgot_password:
  page_title: "Forgot password"
  title: "Forgot password"
  subtitle: "Enter your email address. If an account exists, a reset link will be sent."
  email_label: "Email address"
  email_placeholder: "you@example.com"
  submit: "Send reset link"
  back_to_login: "Back to sign in"
  error_default: "Unable to send the request."
  success_default: "If an account exists for this address, a reset email has been sent."
  error_missing_email: "Please enter your email."
  error_cannot_send: "Unable to send the request right now."

# Resend verification email
resend_verification:
  page_title: "Resend verification email - RustWarden"
  title: "Resend verification email"
  subtitle: "Enter your email address to receive a new verification link."
  email_label: "Email address"
  email_placeholder: "you@example.com"
  submit: "Send verification link"
  back_to_login: "Back to login"
  error_default: "Unable to send the request."
  success_default: "If the account exists and is not verified, an email has been sent."
  error_missing_email: "Please enter your email."
  error_cannot_send: "Unable to send the request at this time."

# Password reset (from email link)
password_reset:
  page_title: "Reset password"
  title: "Reset password"
  subtitle: "Enter your new password below."
  new_password_label: "New password"
  new_password_placeholder: "New secure password"
  requirements: "⚠️ Must contain: 8+ characters, uppercase, lowercase, digit, special character"
  confirm_password_label: "Confirm password"
  confirm_password_placeholder: "Confirm your new password"
  missing_token_url: "Reset token missing in URL."
  missing_token: "Reset token is missing."
  missing_new_password: "Please enter a new password."
  passwords_not_match: "Passwords do not match."
  success_message: "Your password has been reset successfully. You can now log in."
  error_link_invalid: "Unable to reset password. The link may be expired or invalid."
  error_generic: "Unable to reset password at this time."

# 2FA Login page
login_2fa:
  page_title: "2FA Verification"
  title: "Two-Step Verification"
  subtitle: "Enter the code from your authenticator app"
  code_label: "Authentication code"
  backup_code_label: "Backup code"
  verify_button: "Verify"
  use_backup_code: "Use a backup code"
  use_totp_code: "Use authenticator app code"
  back_to_login: "Back to login"
  error_invalid_code: "Invalid code. Please try again."
  error_network: "Network error. Please try again."

# 2FA Security
settings_security:
  page_title: "Security - RustWarden"
  title: "Two-Factor Authentication"
  subtitle: "Protect your account with an extra layer of security"
  totp_title: "TOTP Authentication"
  status_enabled: "Enabled"
  status_disabled: "Disabled"
  enabled_message: "Your account is protected by two-factor authentication."
  disabled_message: "Add an extra layer of security to your account by enabling two-factor authentication using an app like Google Authenticator or Authy."
  enable_button: "Enable 2FA"
  disable_button: "Disable 2FA"
  scan_qr: "Scan this QR code with your authenticator app"
  manual_entry: "Or enter this code manually"
  enter_code: "Enter the 6-digit code from your app"
  verify_button: "Verify and Enable"
  backup_codes_title: "Backup Codes"
  backup_codes_warning: "Save these codes in a safe place. Each code can only be used once."
  backup_codes_remaining: "Backup codes remaining"
  regenerate_button: "Regenerate codes"
  regenerate_confirm: "Are you sure? Old codes will be replaced."
  confirm_disable: "Enter your password to disable 2FA"
  password_label: "Current password"
  copy_button: "Copy"
  saved_codes_button: "I've saved my codes"
  breadcrumb: "Security"
  force_2fa_message: "Your administrator requires two-factor authentication. You must set up 2FA before you can access the rest of the application."
  force_2fa_logout: "Sign out"

# Settings
settings:
  title: "Settings"
  page_title: "Settings - RustWarden"
  subtitle: "Manage your preferences and account settings"
  profile_title: "My Profile"
  profile_desc: "Edit your personal information (username, email)"
  password_title: "Password"
  password_desc: "Change your password to secure your account"
  sessions_title: "Active Sessions"
  sessions_desc: "Manage your active sessions and revoke access from other devices"
  preferences_title: "Preferences"
  preferences_desc: "Customize your experience (theme, language)"
  access: "Access"
  info_title: "Information"
  info_desc: "Use the sections above to manage different aspects of your account. All changes are secure and require your authentication."
  language: "Language"
  language_description: "Choose your preferred language"
  save: "Save"
  saved: "Settings saved"

# Home page
home:
  welcome: "Welcome, {username}!"
  subtitle: "Welcome to your personal space"
  my_account: "My Account"
  stat_username: "Username"
  stat_email: "Email"
  stat_member_since: "Member since"
  stat_roles: "Roles"

# Preferences
preferences:
  title: "Display Preferences"
  page_title: "Display Preferences"
  subtitle: "Customize the interface appearance"
  theme: "Theme"
  theme_light: "Light"
  theme_light_desc: "Bright and clean interface"
  theme_dark: "Dark"
  theme_dark_desc: "Reduces eye strain"
  theme_auto: "Automatic"
  theme_auto_desc: "Adapts to time of day"
  theme_preview: "The theme will be applied immediately after saving"
  language: "Language"
  language_fr: "Français"
  language_fr_desc: "Interface in French"
  language_en: "English"
  language_en_desc: "English interface"
  language_de: "Deutsch"
  language_de_desc: "German interface"
  language_es: "Español"
  language_es_desc: "Spanish interface"
  language_it: "Italiano"
  language_it_desc: "Italian interface"
  language_pt: "Português"
  language_pt_desc: "Portuguese interface"
  translation_warning: "Complete interface translation is under development. Some elements may remain in French."
  modified: "Preferences modified"
  modified_desc: "Save your changes to apply them"
  save: "Save preferences"
  saving: "Saving..."
  cancel: "Cancel"
  saved_success: "Preferences saved successfully!"
  saved_reload: "Preferences saved successfully!\n\nThe language has been changed. Do you want to reload the page now to apply the changes?"
  error: "Error: {message}"
  network_error: "Network error. Please try again."
  sync_title: "Your preferences are synchronized"
  sync_desc: "Your display preferences are saved and automatically apply to all devices connected to your account."
  preview_dark: "Preview: Dark theme will be applied"
  preview_light: "Preview: Light theme will be applied"
  preview_auto: "Preview: Automatic theme will be applied"

# Profile
profile:
  title: "My Profile"
  page_title: "My Profile"
  subtitle: "Edit your personal information"
  account_info: "Account Information"
  username: "Username"
  username_public: "Publicly visible"
  username_placeholder: "Your username"
  username_pattern: "Lowercase letters, digits and hyphens only, 3 to 39 characters"
  email: "Email"
  email_placeholder: "your@email.com"
  save: "Save changes"
  saving: "Saving..."
  saved: "Profile updated successfully"
  error: "Error updating profile"
  email_label: "Email address"
  email_used_for: "Used for login"
  email_warning: "The current address is not changed here."
  email_change_info: "A confirmation link is sent to the new address. The current address receives a notice. The account changes only after confirmation."
  email_change_title: "Change email address"
  new_email_label: "New address"
  current_password_label: "Current password"
  request_button: "Request change"
  email_change_error: "Unable to send the request."
  network_error: "Network error. Please try again."
  username_help: "3 to 39 characters (a-z, 0-9, -)"
  additional_info: "Additional Information"
  account_created: "Account created on"
  roles: "Roles"
  linked_accounts_title: "Linked Accounts"
  no_linked_accounts: "No external accounts linked."
  linked_since: "Linked since"
  unlink_button: "Unlink"
  unlink_confirm: "Are you sure you want to unlink this account?"
  unlink_error: "Unable to unlink this account."
  cannot_unlink_last: "Cannot remove your last authentication method."

# Breadcrumb
breadcrumb:
  home: "Home"
  settings: "Settings"
  admin: "Administration"
  preferences: "Preferences"
  profile: "Profile"
  password: "Password"
  sessions: "Sessions"

# Admin
admin:
  dashboard:
    title: "Administration"
    heading: "Administrator Dashboard"
    users_card_title: "Users"
    users_card_subtitle: "Total users"
    access_button: "Access"
    sessions_card_title: "Active Sessions"
    sessions_card_subtitle: "Ongoing sessions"
    admins_card_title: "Administrators"
    admins_card_subtitle: "Admin accounts"
    last_activity_card_title: "Last Activity"
    last_activity_card_subtitle: "Last login"
    audit_section_title: "Audit Log Statistics"
    audit_total_logs: "Total logs"
    audit_last_24h: "Last 24h"
    audit_by_level: "By level"
    chart_label: "Logs by level"
    view_logs: "View logs"
    logs_card_title: "Audit logs"
    logs_card_desc: "Latest recorded actions: email changes, blocked sign-ins."
    roles_card_title: "Roles Management"
    roles_card_desc: "Manage roles and granular permissions"
    roles_stat_title: "Roles"
    settings_card_title: "Application Settings"
    settings_card_desc: "Configure global application settings"
    apps_card_title: "Application Management"
    apps_card_desc: "Enable or disable modular applications"
    fediverse_card_title: "ActivityPub Federation"
    fediverse_card_desc: "Settings, trust list, outbound queue, remote sessions, NodeInfo"
    orgs_card_title: "Organisation Management"
    orgs_card_desc: "Create and manage organisations and their members"
    orgs_stat_title: "Organisations"
    orgs_members_stat_title: "Total members"
  logs:
    page_title: "Audit logs"
    heading: "Audit logs"
    empty: "No entries yet."
    col_date: "Date"
    col_level: "Level"
    col_action: "Action"
    col_message: "Message"
  roles_list:
    page_title: "Roles Management"
    breadcrumb_roles: "Roles"
    title: "Roles"
    create_role: "Create a role"
    table_name: "Name"
    table_description: "Description"
    table_users: "Users"
    table_permissions: "Permissions"
    table_actions: "Actions"
    edit: "Edit"
    delete: "Delete"
    no_roles: "No roles found."
    protected_hint: "Protected"
    delete_confirm_title: "Confirm deletion"
    delete_confirm_message: "Are you sure you want to delete the role"
    delete_button: "Delete"
  role_form:
    title_create: "Create a role"
    title_edit: "Edit role"
    breadcrumb_create: "Create"
    breadcrumb_edit: "Edit"
    back_to_list: "Back to list"
    name_label: "Role name"
    name_placeholder: "e.g. moderator"
    description_label: "Description"
    description_placeholder: "Role description..."
    permissions_label: "Permissions"
    protected_name_hint: "This role name cannot be changed."
    cancel: "Cancel"
    submit_create: "Create role"
    submit_edit: "Save changes"
  errors:
    title: "Error Codes"
    description: "Application error code documentation. Each error code is associated with a middleware and provides context information for debugging."
    breadcrumb_errors: "Error Codes"
    table_code: "Code"
    table_description: "Description"
    table_category: "Category"
    table_middleware: "Middleware"
    table_context: "Context"
    table_example: "Example"
    legend_title: "Legend"
    legend_code: "Unique error identifier (format: CATEGORY_NUMBER)"
    legend_description: "Description of the error"
    legend_category: "Error type (Authentication, CSRF, Rate Limiting, etc.)"
    legend_middleware: "Middleware responsible for generating this error"
    legend_context: "Detailed explanation of when this error occurs"
    legend_example: "Concrete example of a situation generating this error"
    error_auth001_desc: "Invalid credentials"
    error_auth001_category: "Authentication"
    error_auth001_context: "The user provided incorrect credentials during login"
    error_auth001_example: "Login attempt with an incorrect password"
    error_auth002_desc: "Invalid token"
    error_auth002_category: "Authentication"
    error_auth002_context: "The provided JWT token is invalid or malformed"
    error_auth002_example: "Corrupted JWT token or signed with a different key"
    error_auth003_desc: "Token expired"
    error_auth003_category: "Authentication"
    error_auth003_context: "The JWT token has expired and needs to be renewed"
    error_auth003_example: "Access attempt with an expired token after the validity period"
    error_csrf001_desc: "Missing CSRF token"
    error_csrf001_category: "CSRF Protection"
    error_csrf001_context: "The POST/PUT/DELETE request does not contain a CSRF token"
    error_csrf001_example: "Form submitted without a CSRF token in the header or body"
    error_csrf002_desc: "Invalid CSRF token"
    error_csrf002_category: "CSRF Protection"
    error_csrf002_context: "The provided CSRF token does not match the session token"
    error_csrf002_example: "Modified or stolen CSRF token"
    error_rate001_desc: "Rate limit exceeded"
    error_rate001_category: "Rate Limiting"
    error_rate001_context: "The number of requests per minute has been exceeded"
    error_rate001_example: "More than 100 requests/min on admin endpoints"
    error_valid001_desc: "Invalid input data"
    error_valid001_category: "Validation"
    error_valid001_context: "The provided data does not comply with validation rules"
    error_valid001_example: "Invalid email format or missing required field"
    error_valid002_desc: "Password complexity not met"
    error_valid002_category: "Validation"
    error_valid002_context: "The password does not meet the configured complexity rules"
    error_valid002_example: "Password too short or missing required characters"
    error_rbac001_desc: "Insufficient permissions"
    error_rbac001_category: "Authorization"
    error_rbac001_context: "The user does not have the necessary permissions for this action"
    error_rbac001_example: "Non-admin user attempting to access /admin/users"
    error_rbac002_desc: "Admin role required"
    error_rbac002_category: "Authorization"
    error_rbac002_context: "The action requires an administrator role"
    error_rbac002_example: "Attempting to delete a user without admin role"
    error_db001_desc: "Database operation error"
    error_db001_category: "Database"
    error_db001_context: "A database operation failed"
    error_db001_example: "Foreign key constraint violated or DB connection lost"
    error_db002_desc: "Resource not found"
    error_db002_category: "Database"
    error_db002_context: "The requested resource does not exist in the database"
    error_db002_example: "User with non-existent ID"
  user_form:
    breadcrumb_create: "Create"
    breadcrumb_edit: "Edit"
    title_create: "Create a user"
    title_edit: "Edit a user"
    back_to_list: "Back to list"
    username_label: "Username"
    username_placeholder: "username"
    username_pattern: "Lowercase letters, digits and hyphens only, 3 to 39 characters"
    username_readonly_hint: "Username cannot be changed after creation"
    email_label: "Email"
    email_placeholder: "user@example.com"
    email_change_hint: "Changing the address writes it immediately, marks the email as verified, and closes this user's sessions."
    password_label: "Password"
    password_optional: "Optional"
    password_placeholder: "Leave empty to generate a random password"
    password_hint: "If left empty, a secure password will be automatically generated"
    roles_label: "Roles"
    roles_hint: "Select at least one role"
    must_change_password_label: "Force password change"
    must_change_password_desc: "The user will have to change their password at next login"
    cancel: "Cancel"
    submit_create: "Create user"
    submit_edit: "Save changes"
  settings:
    title: "Application Settings"
    page_title: "Application Settings - Admin"
    subtitle: "Global application configuration"
    general: "General"
    app_name: "Application name"
    app_domain: "Domain"
    app_domain_placeholder: "example.com"
    app_description: "Description"
    allow_registration: "Allow registration"
    allow_registration_desc: "Users can create accounts from the home page"
    email_validation_required: "Email validation required"
    email_validation_required_desc: "Users must validate their email before they can log in"
    save: "Save settings"
    cancel: "Cancel"
    saved: "Settings saved successfully"
    error: "Error saving settings"
    network_error: "Network error. Please try again."
    password_security: "Password Security"
    password_min_length: "Minimum length"
    password_min_length_hint: "Between 6 and 128 characters"
    password_complexity: "Complexity requirements"
    require_uppercase: "Uppercase required"
    require_lowercase: "Lowercase required"
    require_digits: "Digit required"
    require_special: "Special character required"
    password_change_require_email: "Email confirmation for password change"
    password_change_require_email_desc: "When enabled, a confirmation email is sent to validate any password change. Otherwise, the change is applied immediately."
    password_expiration: "Password expiration"
    password_expiration_desc: "Force periodic password change"
    expiration_days: "Expiration after (days)"
    expiration_alert: "Email alert before expiration"
    expiration_alert_days: "Alert (days before)"
    audit_logging: "Audit Logging"
    log_level: "Log level"
    log_level_debug: "DEBUG - All details"
    log_level_info: "INFO - Normal information"
    log_level_warn: "WARN - Warnings only"
    log_level_error: "ERROR - Errors only"
    log_level_hint: "Controls the verbosity of audit logs"
    log_retention: "Log retention (days)"
    log_retention_hint: "Log retention period (1-365 days)"
    audit_info_message: "Audit logs record all administrative actions (creation, modification, deletion of users)."
    save_changes: "Save changes"
    save_changes_desc: "Settings will be applied immediately"
    saving: "Saving..."
    save_success: "Settings saved successfully!"
    save_error_prefix: "Error"
    # OAuth / SSO admin settings
    oauth_sso_title: "OAuth / SSO"
    oauth_enabled_label: "Enable OAuth"
    oauth_enabled_desc: "Allow login via external providers (Google, GitHub, etc.)"
    oauth_redirect_url_label: "Base redirect URL"
    oauth_redirect_url_desc: "Base URL for OAuth callbacks (e.g. https://myapp.example.com)"
    oauth_auto_register_label: "Auto-registration"
    oauth_auto_register_desc: "Automatically create an account if the email does not exist"
    oauth_link_existing_label: "Link existing accounts"
    oauth_link_existing_desc: "Automatically link an OAuth account if the verified email matches"
    oauth_client_id: "Client ID"
    oauth_client_secret: "Client Secret"
    oauth_tenant: "Tenant ID"
    oauth_redirect_uri: "Redirect URI"
    oauth_copy_uri: "Copy"
    oauth_secret_configured: "Configured"
    oauth_secret_not_configured: "Not configured"
    oauth_secret_change: "Change"
    oauth_restart_warning: "Credential changes require an application restart."
    oauth_env_info: "Credentials can also be set via environment variables (OAUTH_*_CLIENT_ID, etc.)."
    oauth_google_label: "Google"
    oauth_google_desc: "OpenID Connect"
    oauth_github_label: "GitHub"
    oauth_github_desc: "OAuth2"
    oauth_discord_label: "Discord"
    oauth_discord_desc: "OAuth2"
    oauth_microsoft_label: "Microsoft"
    oauth_microsoft_desc: "OpenID Connect"
    # Audience measurement. The script URL is read-only here: it feeds
    # the CSP, which is frozen at startup (see config::analytics).
    analytics_title: 'Audience measurement'
    analytics_desc: 'Third-party tracking script injected into pages. The script address is configured through an environment variable; the settings below apply without a restart.'
    analytics_enabled_label: 'Enable audience measurement'
    analytics_enabled_desc: 'When disabled, no tracking script is sent to visitors.'
    analytics_site_id_label: 'Site identifier'
    analytics_site_id_desc: 'Provided by your audience-measurement service.'
    analytics_attributes_label: 'Extra attributes'
    analytics_attributes_desc: 'A JSON object of data-* attributes, for example a data-consent / opt-in pair.'
    analytics_script_url_label: 'Script address'
    analytics_script_url_desc: 'Read-only: this address feeds the Content Security Policy, which is frozen at startup. Configure it through ANALYTICS_SCRIPT_URL.'
    analytics_not_configured: 'No audience-measurement script is configured. Set ANALYTICS_SCRIPT_URL and restart the application to enable this section.'
  users_list:
    page_title: "User Management - Admin"
    title: "User Management"
    breadcrumb_users: "Users"
    create_user: "Create user"
    search_label: "Search"
    search_placeholder: "Username or email..."
    role_filter_label: "Role"
    all_roles: "All roles"
    per_page_label: "Per page"
    search_button: "Search"
    results_summary: "Showing {count} user(s) out of {total} total"
    page_info: "Page {page} of {total_pages}"
    table_username: "Username"
    table_email: "Email"
    table_roles: "Roles"
    table_created_at: "Created on"
    table_last_login: "Last login"
    table_actions: "Actions"
    never: "Never"
    edit: "Edit"
    no_users: "No users found"
    reset_password_title: "Reset password"
    reset_generate: "Generate random password"
    reset_custom: "Set custom password"
    reset_email: "Reset by email"
    reset_new_password_label: "New password"
    reset_new_password_placeholder: "Minimum 8 characters, uppercase, lowercase, digit, special character"
    reset_password_requirements: "⚠️ Must contain: 8+ characters, uppercase, lowercase, digit, special character"
    reset_invalidate_sessions: "Invalidate all active sessions for this user"
    reset_invalidate_sessions_desc: "The user will need to log in again after the change"
    reset_button: "Reset"
    delete_confirm_title: "⚠️ Confirm deletion"
    delete_confirm_message: "Are you sure you want to delete this user?"
    delete_confirm_username: "Username:"
    delete_confirm_email: "Email:"
    delete_irreversible: "This action is irreversible!"
    delete_button: "Delete permanently"
    delete: "Delete"
    delete_error: "Error deleting user"
    network_error: "Network error"
    edit_user_title: "Edit user"
    resetting: "Resetting..."
    reset_by_email_title: "Reset by email"
    close: "Close"
    password_reset_success_title: "Password reset"
    password_warning_once: "This password will only be displayed once. Copy it now!"
    new_password_label: "New password"
    copy: "Copy"
    password_copied: "Password copied to clipboard"
    password_set_success: "Password reset successfully"
    reset_error: "Error resetting password"

# Password Change
password:
  title: "Change my password"
  page_title: "Change my password"
  subtitle: "Modify your password to secure your account. A confirmation email will be sent to validate the change."
  subtitle_no_email: "Modify your password to secure your account."
  must_change_message: "⚠️ You must change your password before continuing."
  new_password: "New password"
  current_password: "Current password"
  current_password_placeholder: "Your current password"
  new_password_placeholder: "Secure new password"
  required: "Required"
  requirements: "📌 Requirements: 8+ characters, uppercase, lowercase, digit, special character"
  strength: "Password strength:"
  strength_weak: "Weak"
  strength_medium: "Medium"
  strength_strong: "Strong ✓"
  strength_too_short: "too short"
  strength_missing_lowercase: "missing lowercase"
  strength_missing_uppercase: "missing uppercase"
  strength_missing_digit: "missing digit"
  strength_missing_special: "missing special character"
  confirm_password: "Confirm new password"
  confirm_password_placeholder: "Repeat the new password"
  passwords_match: "✓ Passwords match"
  passwords_not_match: "✗ Passwords do not match"
  change_button: "Change password"
  changing: "Changing..."
  logout_warning_title: "Logout from other sessions"
  logout_warning_desc: "All your other active sessions will be automatically logged out after the password change. Only your current session will remain active."
  save: "Save new password"
  saving: "Saving..."
  saved: "A confirmation email has been sent to your address. Click the link in the email to validate the password change."
  saved_direct: "Password changed successfully! Your other sessions have been logged out."
  error: "Error changing password"
  error_all_fields_required: "All fields are required."
  error_empty_data: "The data to send is empty."
  error_invalid_data: "Invalid data. Check that all fields are filled."
  error_incorrect_current: "Current password is incorrect."
  error_reading_response: "Error reading server response"
  error_415: "Error 415: The server did not receive the data in the expected JSON format. Please try again."
  network_error: "Network error. Please try again."
  security_tips_title: "Security Tips"
  security_tip_unique: "Use a unique password that you don't use elsewhere"
  security_tip_share: "Never share your password with anyone"
  security_tip_regular: "Change your password regularly (every 3-6 months)"
  security_tip_2fa: "Enable two-factor authentication if available"
  security_tip_manager: "Use a password manager for better security"
  pending_request_message: "⚠️ A password change request is pending email confirmation."
  pending_request_info: "A confirmation email has been sent to your address. Click the link in the email to confirm the change."
  pending_request_cancel: "Cancel pending request"
  pending_request_canceled: "Request canceled successfully"
  pending_request_cancel_error: "Error canceling the request"
  confirmation_sent: "Confirmation email sent! Check your inbox."
  confirmation_error: "Error sending confirmation email"

# Sessions
sessions:
  title: "Active sessions"
  page_title: "Active sessions"
  subtitle: "Manage devices connected to your account"
  current_session: "Current session"
  current_badge: "Current"
  unknown_device: "Unknown device"
  ip_address: "IP Address:"
  created_at: "Created on:"
  last_activity: "Last activity:"
  session_id: "Session ID:"
  revoke: "Revoke"
  revoke_confirm: "Are you sure you want to revoke the session for \"{device}\"?\n\nThis device will be disconnected immediately."
  revoke_success: "Session revoked successfully!"
  revoke_error: "Error revoking session"
  no_sessions: "No active sessions"
  no_sessions_desc: "You currently have no active sessions"
  danger_zone: "Danger Zone"
  danger_zone_desc: "Disconnect all other devices in one action (your current session will remain active)."
  revoke_all: "Revoke all other sessions"
  revoke_all_confirm: "⚠️ WARNING\n\nAre you sure you want to revoke ALL your other sessions?\n\nAll your other devices will be disconnected. Only your current session will remain active."
  revoke_all_success: "All other sessions have been revoked!"
  revoke_all_error: "Error revoking. Some sessions may not have been revoked."
  about_title: "About sessions"
  about_desc: "A session is created each time you log in from a different device or browser. Revoking a session immediately disconnects that device. Your current session cannot be revoked from this page (log out to do that)."
  back_to_settings: "Back to settings"

# Navigation menu (navbar)
nav:
  home: "Home"
  settings: "Settings"
  admin: "Administration"

# User menu
user_menu:
  profile: "Profile"
  logout: "Logout"
  settings: "Settings"

# ActivityPub federation - RFC 0021 admin foundations
fediverse:
  settings:
    title: "Federation settings"
    breadcrumb: "Federation"
    heading: "ActivityPub federation settings"
    subtitle: "Enable and configure federation with other Rustwarden instances and ActivityPub-compatible servers. Experimental feature."
    card_activation: "Activation"
    card_trust: "Trust"
    card_interop: "Interoperability"
    card_security: "Advanced security"
    enabled_label: "Enable ActivityPub federation (experimental)"
    enabled_desc: "When disabled, /admin/fediverse/* routes other than this page return 404."
    trust_mode_label: "Trust mode"
    trust_mode_allowlist: "Allowlist (zero-trust, recommended)"
    trust_mode_open: "Open with blocklist (Mastodon-style)"
    interop_scope_label: "Interoperability scope"
    interop_scope_rustwarden_only: "Rustwarden only (politely refuse other instances)"
    interop_scope_rustwarden_plus: "Rustwarden + universal read"
    interop_scope_open: "Open (any ActivityPub instance)"
    authorized_fetch_label: "Authorized-fetch"
    authorized_fetch_desc: "Require an HTTP signature to fetch a remote actor. Enable after audit."
    save_button: "Save"
    saved_toast: "Settings saved."
  trust:
    title: "Trusted domains"
    breadcrumb: "Trust"
    heading: "Federation trust list"
    subtitle: "Manage domains accepted or blocked for ActivityPub federation. The active mode (allowlist or blocklist) is set on the Federation settings page."
    mode_allowlist: "Allowlist mode (zero-trust)"
    mode_blocklist: "Blocklist mode (Mastodon-style)"
    add_legend: "Add a domain"
    domain_label: "Domain"
    domain_placeholder: "example.tld"
    note_label: "Note (optional)"
    reason_label: "Block reason (optional)"
    severity_label: "Severity"
    severity_suspend: "Suspend (full reject)"
    severity_silence: "Silence (quiet filtering)"
    severity_reject_auth: "Reject auth only"
    add_button: "Add"
    table_domain: "Domain"
    table_note_or_reason: "Note / Reason"
    table_severity: "Severity"
    table_created_at: "Added on"
    table_actions: "Actions"
    delete_button: "Delete"
    delete_confirm_title: "Confirm deletion"
    delete_confirm_body: "This action is irreversible. The domain below will be removed from the active list."
    modal_cancel: "Cancel"
    modal_confirm: "Confirm deletion"
    empty_title: "Empty list"
    empty_body: "No domain is configured. Add one to start federating."
    saved_toast: "List updated."
  auth:
    error:
      page_title: "Federated authentication error"
      subtitle: "An error occurred during ActivityPub authentication."
      back_to_login: "Back to login"
      timeout:
        title: "Request timed out"
        body: "Your origin instance did not respond in time. Make sure it is reachable and try again shortly."
      rejected:
        title: "Request rejected"
        body: "Your origin instance rejected the authentication request. If you did not initiate this attempt, you can safely ignore it."
      untrusted:
        title: "Untrusted domain"
        body: "Your identity's domain is not in this instance's trust list. Contact the administrator if you believe this is a mistake."
      invalid_signature:
        title: "Invalid signature"
        body: "Your origin instance's signature could not be verified. This may indicate a misconfiguration or a malicious attempt."
      unknown:
        title: "Unknown error"
        body: "An unexpected error occurred. Try again or contact the administrator if the problem persists."
    login:
      page_title: "ActivityPub login"
      subtitle: "Sign in with an identity hosted on another federated instance."
      heading: "Sign in with an ActivityPub identity"
      field_label: "Identity"
      field_placeholder: "@user@instance.tld"
      field_help: "Mastodon format: @ followed by the username, then @, then the instance domain."
      submit: "Continue"
      back_to_login: "Back to the classic login"
    waiting:
      page_title: "Signing you in"
      subtitle: "Hang tight while your origin instance approves the request."
      heading: "Signing you in…"
      explainer: "Your origin instance needs to confirm your identity. This page will update automatically as soon as a response arrives (up to 5 minutes)."
      cancel: "Cancel"
    consent:
      page_title: "Confirm a federated sign-in"
      heading: "An instance is requesting authentication"
      explainer: "A federated instance wants to authenticate you on its side. Verify the domain and identity below before approving."
      label_requester: "Requesting domain"
      label_handle: "Identity at stake"
      approve: "Approve"
      reject: "Reject"
      already_decided: "This request has already been handled."
  queue:
    title: "Federation outbound queue"
    breadcrumb: "Outbound queue"
    heading: "Outbound deliveries"
    subtitle: "Dashboard of ActivityPub activities to dispatch to remote instances. Last 100 rows displayed."
    stats_pending: "Pending"
    stats_delivered: "Delivered"
    stats_failed: "Failed"
    stats_dead: "Dead"
    table_activity: "Activity"
    table_target: "Target"
    table_status: "Status"
    table_attempts: "Attempts"
    table_last_error: "Last error"
    table_next_retry: "Next retry"
    table_created_at: "Created at"
    empty_title: "Empty queue"
    empty_body: "No outbound activity. The worker is healthy or federation has not produced activity yet."
  sessions_remote:
    title: "Remote sessions"
    breadcrumb: "Remote sessions"
    heading: "Active remote sessions"
    subtitle: "Federated identities that contacted this instance and are not disabled. Revoke = mark as disabled (matching remote JWT sessions will be rejected)."
    kill_switch_legend: "Kill switch by domain"
    kill_switch_label: "Disable all identities from a domain"
    kill_switch_button: "Kill domain"
    kill_switch_confirm_title: "Confirm kill switch"
    kill_switch_confirm_body: "All federated identities for the domain below will be marked as disabled. This action is irreversible from the UI (a new federated login will recreate the row)."
    table_handle: "Handle"
    table_display_name: "Display name"
    table_domain: "Domain"
    table_last_seen: "Last seen"
    table_actions: "Actions"
    revoke_button: "Revoke"
    revoke_confirm_title: "Confirm revocation"
    revoke_confirm_body: "This identity will be marked as disabled. The next remote JWT check will reject it."
    modal_cancel: "Cancel"
    modal_confirm: "Confirm"
    empty_title: "No remote sessions"
    empty_body: "No federated identity has contacted this instance yet, or all have been disabled."
    saved_toast: "Action completed."
  admin:
    tabs:
      settings: "Settings"
      trust_list: "Trust list"
      queue: "Outbound queue"
      sessions_remote: "Remote sessions"
      nodeinfo: "NodeInfo"
      invites: "Invitations"
    hub:
      title: "ActivityPub Federation"
      subtitle: "Centralized control panel to drive federation with other Rustwarden and ActivityPub-compatible instances."
      card:
        settings:
          title: "Settings"
          desc: "Enable federation, choose the trust mode, the interop scope and the authorized-fetch."
        trust_list:
          title: "Trust list"
          desc: "Manage accepted (allowlist) or blocked (blocklist) domains."
        queue:
          title: "Outbound queue"
          desc: "Operator dashboard for the outbound delivery queue (RFC 0011 + RFC 0019)."
        sessions_remote:
          title: "Remote sessions"
          desc: "Active federated identities, kill switch per identity or per domain."
        nodeinfo:
          title: "NodeInfo"
          desc: "Humanized statistics for the federated instance (NodeInfo 2.1)."
        invites:
          title: "Invitations"
          desc: "Invite a remote account to join a team (per-team view)."
    teams_for_invites:
      title: "Pick a team to manage its invitations"
      breadcrumb: "Invitations"
      heading: "Federated invitations per team"
      subtitle: "Pick a team to view and create invitations targeting remote accounts."
      empty_title: "No team"
      empty_body: "Create a team first so you can invite federated accounts to it."

# Common (RFC 0024 Slice C iter. 3)
common:
  yes: "Yes"
  no: "No"

# NodeInfo stats (RFC 0024 Slice C iter. 3). Kept top-level dedicated
# namespace to avoid re-opening `fediverse:` (which would shadow
# settings/trust/auth/queue/sessions_remote under yaml-rust2).
fediverse_nodeinfo:
  title: "NodeInfo - Federation stats"
  breadcrumb: "NodeInfo"
  heading: "NodeInfo - Humanised stats"
  subtitle: "Overview of runtime configuration + stats for local users and remote identities."
  card_software: "Software"
  card_runtime: "Runtime configuration"
  card_users: "Local users"
  card_remotes: "Remote identities"
  label_name: "Name"
  label_version: "Version"
  label_domain: "Domain"
  label_enabled: "Federation enabled"
  label_trust_mode: "Trust mode"
  label_interop_scope: "Interop scope"
  label_authorized_fetch: "Authorized-fetch"
  label_users_total: "Total"
  label_users_active_month: "Active 30d"
  label_users_active_halfyear: "Active 180d"
  label_remote_identities_active: "Active"
  label_remote_distinct_domains: "Distinct domains"

# Cross-instance team invitations (RFC 0024 Slice C iter. 4).
fediverse_invites:
  title: "Federated team invitations"
  breadcrumb: "Invitations"
  heading: "Cross-instance invitations"
  subtitle: "Invite an ActivityPub identity to join the team:"
  add_legend: "Invite by handle"
  handle_label: "User handle"
  handle_placeholder: "@user@instance.tld"
  role_label: "Role"
  role_member: "Member"
  role_admin: "Administrator"
  role_owner: "Owner"
  add_button: "Send invitation"
  table_handle: "Invited handle"
  table_role: "Role"
  table_status: "Status"
  table_created_at: "Sent at"
  table_actions: "Actions"
  revoke_button: "Revoke"
  revoke_confirm_title: "Confirm revocation"
  revoke_confirm_body: "The invitation will be cancelled. If already accepted, the identity will be removed from the team via the Revoke{Membership} signal (RFC 0010)."
  modal_cancel: "Cancel"
  modal_confirm: "Confirm"
  empty_title: "No invitations"
  empty_body: "No invitation has been sent for this team yet."
  saved_toast: "Action completed."

# Connected federated apps (RFC 0024 Slice C iter. 5).
fediverse_connected_apps:
  page_title: "Connected federated apps"
  heading: "My connected federated apps"
  subtitle: "ActivityPub instances where you authenticated using your identity on this server."
  table_domain: "Instance"
  table_count: "Sessions"
  table_last_seen: "Last activity"
  empty_title: "No federated apps"
  empty_body: "You have not approved any federated authentication to another instance yet."
  revoke_note: "Note: manual revocation of a remote session from this page will be available with RFC 0006 Phase 2 (remote JWT blacklisting). Meanwhile, ask the admin via /admin/fediverse/sessions_remote or wait for the JWT to expire naturally."
  back_to_profile: "Back to profile"

# Cross-instance team invitation acceptance (RFC 0024 Slice C iter. 6).
fediverse_invite_landing:
  page_title: "Team invitation"
  heading: "You received an invitation"
  explainer: "A team from another federated instance invites you to join. Verify the details below before responding."
  team_label: "Team"
  role_label: "Proposed role"
  status_label: "Status"
  accept_button: "Accept"
  reject_button: "Reject"
  already_decided: "This invitation has already been handled."
  cannot_accept_note: "To accept, you must be signed in via a federated identity (login from your origin instance). You can reject from this local account, but accepting goes through the AP-native flow."

# 404 page (unknown route)
http_errors:
  not_found_title: "Page not found"
  not_found_message: "This address does not match any page."
  code_label: "Error 404"
  home: "Back to home"
  login: "Sign in"

analytics:
  opt_out:
    hint: 'You can object to audience measurement at any time. Your choice is stored in your browser and takes effect on the next page load.'
    opt_out_label: 'Opt out of audience measurement'
    opt_in_label: 'Re-enable audience measurement'
    opted_out_badge: 'You are opted out'