TWO_FACTOR_ENCRYPTION_KEY has no default, so instances upgrading to 3.3
without setting it hit an unhandled throw from encryptSecret: the setup
dialog only reported "Something went wrong", and where 2FA was required
the blocking dialog made the whole app unusable. The status endpoint now
reports 2FA as not required while the key is missing or invalid, and
setup initiation returns 503 with a two-factor-error-not-configured code
that the setup dialog renders as a readable message. Also documents the
variable in the README and the example compose file.
Closes#4443
Several keys present in en-US were missing from ru-RU, so the UI showed
raw keys (e.g. label.heatmaps) on the Russian locale. Adds translations
for the missing label.* and message.* keys, including heatmap, replay
recorder, board, LLM, and upgrade/plan strings.
- Add 12 missing translation keys to fa-IR.json
- Set lang and dir on document.documentElement via useEffect on locale
change, fixing the hardcoded lang="en" and ensuring both attributes
are on the same element and applied on initial load
PR #4262 introduced a DataGrid view-toggle button with two hardcoded
English tooltip strings ("Switch to table view" / "Switch to card view")
and explicitly deferred translation to a follow-up. Without the keys in
the locale JSON files, next-intl would surface the raw label paths at
runtime for any non-English user once the strings move to t().
Adds switchToTableView and switchToCardView label entries in
messages.ts, swaps the hardcoded strings in DataGrid.tsx for
t(labels.x), and populates "switch-to-table-view" and
"switch-to-card-view" in all 52 locale JSON files with proper
translations (no English fallbacks).
Verified in Playwright that the toggle tooltip renders the expected
translated string in en-US, fr-FR and ja-JP via the same useMessages
pipeline already used for the search field placeholder, with no
MISSING_MESSAGE errors in the console.