towerops/GETTEXT_MIGRATION_NOTES.md

4.1 KiB

Gettext Migration Progress Notes

Current Status: COMPLETE

All Phases Completed

  1. Phase 1: Infrastructure - DONE

    • Created gettext helpers with domain-specific functions
    • Set up pot files for each domain
    • Created mix populate_english task
  2. Phase 2: Equipment Features - DONE

    • DeviceLive.Index: device discovery, reordering, error messages
    • DeviceLive.Show: backup messages, permission errors
    • DeviceLive.Form: device CRUD operations
    • AlertLive.Index: alert acknowledgment messages
    • SiteLive.Show: site discovery messages
    • SiteLive.Form: site CRUD and SNMP/agent propagation
    • All equipment tests passing
  3. Phase 3: Admin Features - DONE

    • Admin.UserLive.Index: user deletion messages
    • Admin.OrgLive.Index: organization deletion messages
    • UserAuth: impersonation start/stop messages (3 strings)
    • All admin tests passing
  4. Phase 4: Core Components - DONE

    • ConsentPrompt component migrated:
      • Modal title, policy review message
      • Policy acceptance labels
      • Consent disclaimer text
      • Accept button text
  5. Phase 5: Authentication Flash Messages - DONE

    • user_auth.ex: All auth-related plugs and LiveView callbacks
    • user_auth.ex: Policy consent acceptance message
    • Added use Gettext, backend: ToweropsWeb.Gettext to user_auth.ex
    • Added import ToweropsWeb.GettextHelpers to user_auth.ex
  6. Phase 6: User Settings - DONE

    • session_manager.ex: Mobile device removal (2 messages)
    • session_manager.ex: Alert preferences (2 messages)
    • session_manager.ex: Browser session revocation (5 messages)
    • session_manager.ex: Revoke all sessions (1 message)
    • totp_manager.ex: Device creation, verification, deletion (6 messages)
    • api_token_manager.ex: Token creation and deletion (5 messages)
  7. Phase 7: Agent Management - DONE

    • agent_live/edit.ex: Agent update success (1 message)
    • agent_live/index.ex: Agent/cloud poller creation (3 messages)
    • agent_live/index.ex: Token regeneration (3 messages)
    • agent_live/index.ex: Agent deletion (2 messages)
    • agent_live/index.ex: Global default cloud poller settings (2 messages)

Final Test Results

  • Tests: 4165 tests, 0 failures
  • Precommit: All checks passed
  • Extraction: All strings extracted and populated

Git Commits

  1. 89a076f - Equipment features + sudo mode test fixes
  2. a995e62 - Admin features migration
  3. 2ef154e - Core components (consent prompt)
  4. 0d85e85 - Session manager mobile and policy consent messages
  5. 9a60bfe - User settings and agent management (final commit)

Migration Complete! 🎉

All user-facing flash messages have been successfully migrated to use gettext with domain-specific helper functions:

  • t_equipment() - Equipment/agent/site domain
  • t_admin() - Admin domain (user/org management, impersonation)
  • t_auth() - Authentication domain (login, TOTP, sudo mode, sessions)
  • gettext() - Default domain (generic UI strings)

Helper Functions Reference

  • t_equipment(msg) - Equipment domain (devices, sites, alerts, agents)
  • t_admin(msg) - Admin domain (user management, org management, impersonation)
  • t_auth(msg) - Auth domain (login, TOTP, sudo mode, permissions)
  • gettext(msg) - Default domain (generic UI strings)

All helpers support interpolation: t_equipment("Device %{name} created", name: device.name)

User Question Answered

Agent WebSocket Connection Issue: User tried connecting agent to http://localhost:4000 but got WebSocket errors.

Solution provided:

  • Agent auto-converts http://localhost:4000 to ws://localhost:4000/socket/agent/websocket
  • Suggested troubleshooting:
    1. Verify Phoenix running with mix phx.server
    2. Test WebSocket with wscat -c ws://localhost:4000/socket/agent/websocket
    3. Create valid agent token in UI at /agents
    4. Run agent with debug: RUST_LOG=debug cargo run -- --api-url http://localhost:4000 --token <token>
  • Common issues: expired token, Phoenix not running, wrong port

Design Document Location

docs/plans/2026-02-02-gettext-internationalization-design.md