Skip to content

feat(i18n): add gettext localization and translation workflow - #49

Open
CatSema wants to merge 1 commit into
amidaware:developfrom
CatSema:final/i18n-rollout
Open

CatSema wants to merge 1 commit into
amidaware:developfrom
CatSema:final/i18n-rollout

Conversation

@CatSema

@CatSema CatSema commented Apr 12, 2026 •

Copy link
Copy Markdown

Add gettext localization across the frontend with English source messages, browser/system language detection, a language selector in user preferences, and synchronized Quasar language packs.

Include a complete Russian catalogue and an initial Italian catalogue. All additional languages are optional: missing or fuzzy translations fall back to English, and incomplete translations do not block releases.

Implementation

  • Use complete source messages, named parameters, translation contexts, and locale-aware plural forms.
  • Keep translatable text separate from API values, identifiers, and user-provided content.
  • Add POT/PO extraction, catalogue compilation, and source validation.
  • Document the translation workflow and how to add or maintain a language.
  • Preserve license files and embedded legal notices.
  • Add automated tests and a shared CI environment.

Why gettext

This frontend contains many user-facing strings spread across Vue components, composables, and background services. Gettext lets English messages remain readable directly in the source, without maintaining a separate catalogue of artificial translation keys.

POT/PO catalogues provide an established workflow for extracting new messages, reviewing changed translations, and working with translation editors. Contexts distinguish identical words used with different meanings, while plural forms support languages with different counting rules.

Using source messages also keeps changes easier to compare with upstream: reviewers can see the original English text at each translation call. Upstream updates still require integration, but extraction identifies new or changed messages without requiring a parallel key hierarchy.

English remains the source language. Additional catalogues can be incomplete or become unmaintained without blocking releases.

Supporting changes

  • Localize counted messages and time intervals using plural forms instead of assembling translated fragments.
  • Keep background transfer messages responsive to language changes.
  • Add checks for untranslated source strings, interpolation parameters, and catalogue compatibility with the runtime.
  • Test English fallback independently of translation completeness.
  • Provide a shared Node.js and GNU gettext environment for development and CI.
  • Exclude license and similar legal files from formatting.
  • Guard dashboard counter updates against empty WebSocket values.

Validation

Passed locally:

  • Formatting and ESLint checks.
  • Catalogue validation and extraction synchronization.
  • 43 tests, 16 service tests, and 50 runtime checks.
  • Production build.

The service TypeScript regression check reports no new diagnostics; 16 existing diagnostics remain.

Screenshots

Screenshot Tactical RMM - 1 Screenshot Tactical RMM - 2 Screenshot Tactical RMM - 3

Notes

AI was used as an assistance tool while preparing this PR.

An internal frontend build including this localization work has been used within our organization. The latest changes were validated locally with the checks listed above.

@CLAassistant

CLAassistant commented Apr 12, 2026 •

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@wh1te909

Copy link
Copy Markdown
Member

hi, the frontend is undergoing a significant rewrite, so this needs to wait until it’s complete, then be rebased and any merge conflicts resolved.

@CatSema

CatSema commented Apr 16, 2026

Copy link
Copy Markdown
Author

hi, the frontend is undergoing a significant rewrite, so this needs to wait until it’s complete, then be rebased and any merge conflicts resolved.

Understood, thank you. I’ll wait for the frontend changes before adapting this PR further.
Do you have an approximate timeline for when those changes are expected?

@CatSema

CatSema commented Apr 28, 2026

Copy link
Copy Markdown
Author

Hi @wh1te909 !

Do you have any rough ETA for the frontend rework?

@CatSema

CatSema commented Jun 29, 2026

Copy link
Copy Markdown
Author

Hi @wh1te909 , just checking in on this PR.

Is the frontend rewrite still in progress, or should I start rebasing and adapting this PR to the current develop branch?

I’m happy to update it when the frontend changes are ready.

Add source-English gettext messages, locale selection and Quasar language
synchronization with Russian and Italian catalogues.

Handle counted messages with locale-aware plurals and preserve English
fallback for missing or unreviewed translations. Add catalogue extraction,
validation, runtime tests, CI checks and language contribution guidance.
@CatSema
CatSema force-pushed the final/i18n-rollout branch from 3ecd891 to 905c8b4 Compare October 29, 2026 16:21
@CatSema CatSema changed the title feat(i18n): implement localization foundation (Russian) and phased rollout feat(i18n): add gettext localization and translation workflow Oct 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants