Skip to content

feat(i18n): Hebrew (he-IL) translation + RTL layout support#490

Open
cdtauman wants to merge 2 commits into
intel:mainfrom
cdtauman:feat/i18n-hebrew-rtl
Open

feat(i18n): Hebrew (he-IL) translation + RTL layout support#490
cdtauman wants to merge 2 commits into
intel:mainfrom
cdtauman:feat/i18n-hebrew-rtl

Conversation

@cdtauman
Copy link
Copy Markdown

@cdtauman cdtauman commented May 28, 2026

Description:

Adds a full Hebrew (he-IL) translation, end-to-end Right-to-Left (RTL) layout support, and externalizes the remaining hardcoded UI strings into the en-US dictionary so the whole app can be localized. Rebased cleanly on the latest main.

This supersedes #488 (which had merge conflicts and unsigned commits). This branch is rebased on current main with no conflicts and a single DCO Signed-off-by commit.

Related Issue:

None.

Changes Made:

  • Hebrew localization: new he-IL.json with 100% key parity to en-US.json (829/829 keys, 0 missing / 0 extra). Hebrew added to the language selector.
  • RTL engine: isRTL computed in the i18n store + a watcher that toggles document.documentElement.dir (rtl/ltr) and lang on language change.
  • Logical CSS: migrated directional Tailwind utilities to logical properties (ml/mr → ms/me, left/right → start/end, pl/pr → ps/pe) across components so layouts mirror correctly in RTL.
  • String externalization: replaced remaining hardcoded English text with languages.* keys across App, Chat, PromptArea, settings, dialogs, history and preset components; added the matching en-US keys as a foundation for future languages.
  • Helpers: added preset / variant / tag translation helpers in lib/utils.ts.
  • Layout: long translated labels now wrap instead of truncating in workflow settings.

Testing Done:

  • vue-tsc --noEmit (type-check): passes, 0 errors.
  • eslint . (lint:ci): passes, 0 errors.
  • prettier --check . (format:ci): passes.
  • Verified en-US / he-IL key parity (829/829, 0 missing, 0 extra).
  • Manually toggled English (LTR) ↔ Hebrew (RTL) and confirmed the layout mirrors.

Screenshots:

N/A (text/layout changes) — can add on request.

Checklist:

  • I have tested the changes locally.
  • I have self-reviewed the code changes.
  • I have updated the documentation, if necessary.

…ize remaining UI strings

- Add Hebrew (he-IL) dictionary with full parity to en-US (829/829 keys).
- Register Hebrew in the language selector and drive document dir/lang via an
  isRTL watcher in the i18n store (rtl/ltr toggling on language change).
- Externalize remaining hardcoded UI strings into en-US keys across App, Chat,
  PromptArea, settings, dialogs, history, and preset components.
- Migrate directional Tailwind utilities to logical properties
  (ml/mr -> ms/me, left/right -> start/end, pl/pr -> ps/pe) so layouts mirror in RTL.
- Add preset/variant/tag translation helpers in lib/utils.ts.
- Let long translated labels wrap instead of truncating in workflow settings.

Verified: vue-tsc, eslint, and prettier all pass.
Signed-off-by: חיים דב טאומן <cdtauman@gmail.com>
@cdtauman
Copy link
Copy Markdown
Author

@qiacheng @mschuettlerTNG — would appreciate your review when you have a moment.

A few notes that may help:

  • This is a purely additive change to en-US.json (no existing keys renamed or removed) and a new he-IL.json file.
  • The RTL layout work uses logical CSS properties (ms-*/me-*, start-*/end-*) which are a no-op for existing LTR languages — existing users won't notice any difference.
  • All three CI gates pass locally: vue-tsc, eslint, and prettier.

Happy to split into a smaller RTL-infrastructure-only PR (store watcher + logical CSS migration, ~20 files) if that's easier to review first, with the Hebrew dictionary as a follow-up.

Note on base branch: I targeted main because the dev branch referenced in CONTRIBUTING no longer exists in this repo.

Signed-off-by: חיים דב טאומן <cdtauman@gmail.com>
@cdtauman
Copy link
Copy Markdown
Author

cdtauman commented May 28, 2026

Screenshots

Hebrew (RTL) — עברית

Main UI Chat Settings Image Settings

English (LTR) — same screens for comparison

Main UI Image Settings Chat Settings

Key observations:

  • All buttons, labels, and layout elements flip correctly to the right side in RTL.
  • Labels wrap gracefully instead of truncating (visible in settings panels).
  • Switching back to English instantly restores LTR — no page reload needed.
  • Existing LTR languages are completely unaffected.

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.

1 participant