feat(i18n): add Paraglide JS internationalization (EN/ES)#9621
Open
dfliess wants to merge 4 commits into
Open
Conversation
Set up Paraglide JS v2 for frontend internationalization: - Add @inlang/paraglide-js and @inlang/plugin-message-format dependencies - Configure Vite plugin with cookie → preferredLanguage → baseLocale strategy - Add inlang project config at web-common/project.inlang/settings.json - Add 1732 message keys in EN/ES with full parity - Commit compiled Paraglide output (locale-modules structure)
Instrument all user-facing strings in web-common with Paraglide messages: - Dashboard viewer: KPI, time series, leaderboard, big numbers - Explore: measures/dimensions dropdowns, tags, search, grain selector - Canvas: inspector, alignment, sparkline, error states - Chat: input, thinking block, feedback, history, sharing, error messages - Time controls: grain names, range labels, comparisons, relative time - Filters: dimension/measure headers, pin/required, advanced - Bookmarks: popover, form, home bookmark, categories - Alerts/Reports: forms, delivery tabs, criteria, intervals, snooze - Shared components: search, select, combobox, dialog, theme toggle - Status tables: resource tables, model actions, refresh dialogs - Connectors: database explorer, schema entry
Instrument all user-facing strings in web-admin with Paraglide messages: - Billing: plans, trial, payments, contact, quotas, cancel/renew dialogs - Settings: org/project settings, branding, visibility, danger zone - Users: members/guests/groups tabs, filters, role management, dialogs - Status: overview, deployment, resources, tables, logs, actions - Alerts: listing, history, metadata, create/edit dialogs - Reports: listing, history, run now, download, export formats - Public URLs: creation, deletion, expiration, table - Env variables: add/edit/delete dialogs, table, filters - Auth: login, CLI auth, device code, access request/grant/deny - Embeds: explore embed, unsupported kind - GitHub: connect, repo selection, pull, overwrite - Projects: home, nav, avatar, theme, card actions, hibernation - Edit session: commit, merge, publish, branch dialog - Branches: status labels, table, hibernate/resume - Error pages: user-facing error headers and bodies - Route errors: token, dashboard, billing, org/project fetch
Persist the user's language preference (preferred_locale) server-side so it survives across sessions. The LanguageSwitcher calls UpdateUserPreferences to save the choice; on next login, +layout.ts reads it from GetCurrentUser and applies it before rendering. - Add preferred_locale column (migration 0096) - Extend UpdateUserPreferences / GetCurrentUser proto + handler - LanguageSwitcher: persistLocale callback via adminServiceUpdateUserPreferences - +layout.ts: resolveInitialLocale from user preferences on load - Set emitGitIgnore: true (Paraglide best practice)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add i18n support to the Rill user-facing frontend using Paraglide JS v2 with English and Spanish locales.
Full EN/ES parity across files in
web-commonandweb-admin. Locale detection uses cookie → user preference → base locale (English). Zero runtime cost for English users — Paraglide tree-shakes unused locales.Framework setup:
@inlang/paraglide-js ^2.20.1with Vite plugin for automatic recompilationweb-common/project.inlang/settings.jsonweb-common/src/paraglide/(locale-modules structure)web-common/messages/{en,es}.jsonShared components (web-common):
Cloud admin (web-admin):
Not included: backend/API strings, email templates,
web-local.Happy to iterate on the approach based on your feedback.
Developed with the help of Claude
Checklist:
catalog-integrity.spec.ts) verifies EN/ES key parity. No e2e UI tests — i18n is visual by nature.