Skip to content

feat(i18n): add Indonesian (id) locale for Desktop UI - #92336

Open
Noah-Ky wants to merge 1 commit into
NousResearch:mainfrom
Noah-Ky:feat/indonesian-locale
Open

Noah-Ky wants to merge 1 commit into
NousResearch:mainfrom
Noah-Ky:feat/indonesian-locale

Conversation

@Noah-Ky

@Noah-Ky Noah-Ky commented Aug 22, 2026 •

Copy link
Copy Markdown

What does this PR do?

Adds an Indonesian (id) locale for the Hermes Desktop UI (Electron app).
Implemented as a partial locale via defineLocale(): uncovered strings fall
back to English gracefully, while the Translations type contract keeps every
key type-checked.

This is an i18n-only change. No agent logic, tools, or unrelated files are
touched.

Translation approach:

  • Register: professional but conversational Indonesian ("Anda", direct
    imperatives, no bureaucratic phrasing).
  • Developer terms stay in English where that is what Indonesian developers
    actually say: session, token, model, provider, branch, checkpoint, rollback,
    context, etc.
  • Partial coverage by design: keys not yet translated fall back to English;
    coverage will grow in follow-up PRs.

Scope note

The CLI/gateway catalog (locales/id.yaml + agent/i18n.py registration) is
intentionally out of scope here and will be proposed in a separate
follow-up PR. This PR registers id only in the Desktop locale system.

Changes Made

  • apps/desktop/src/i18n/id.ts — new Desktop UI catalog (Indonesian, partial via defineLocale)
  • apps/desktop/src/i18n/languages.ts — LOCALE_OPTIONS / LOCALE_META / LOCALE_ALIASES entries for id (aliases: indonesian, bahasa, bahasa-indonesia, id-id)
  • apps/desktop/src/i18n/catalog.ts — import and re-export id
  • apps/desktop/src/i18n/types.ts — add 'id' to the Locale union
  • apps/desktop/src/i18n/languages.test.ts — registration assertions for id

How to Test

cd apps/desktop
npm run typecheck
npx vitest run src/i18n/languages.test.ts

Then switch language to Bahasa Indonesia in Settings → Language and verify UI
strings render in Indonesian, with English fallback for uncovered keys.

Checklist

  • Conventional Commits — feat(i18n): add Indonesian (id) locale for Desktop UI
  • i18n-only scope (5 desktop files)
  • npm run typecheck passes
  • npx vitest run src/i18n/languages.test.ts passes (4 tests)
  • Tested on Windows 11

@alt-glitch alt-glitch added type/feature New feature or request P3 Low — cosmetic, nice to have comp/agent Core agent runtime: loop, agent_init, prompt builder, context-compression, responses endpoint comp/desktop Electron desktop app (apps/desktop/*) area/i18n Localization, locales, translations labels Aug 22, 2026
@Enough1122

Copy link
Copy Markdown
Contributor

AI code review — automated review for reference, author can ignore or act on any point.

Verified mechanically rather than by sampling: extracted every leaf key from this PR's locales/id.yaml and from current main's locales/en.yaml — 354 vs 354 keys, zero missing, zero extra. The 1:1 parity claim holds exactly. Registration (agent/i18n.py: SUPPORTED_LANGUAGES + aliases indonesian/bahasa/bahasa-indonesia/id-id), desktop Locale type, catalog.ts, and the new languages.test.ts assertions all look correct and consistent.

One forward-looking note:

  • This PR's parity is against today's en.yaml. feat(i18n): localize remaining gateway static bubbles #92338 (open in parallel) adds a new gateway.busy_ack.* / gateway.onboarding.* / gateway.session.* block (~40 keys) to en.yaml and all other locales. Whichever merges second will leave id.yaml without that block, and those strings will silently fall back to English for Indonesian users until a follow-up lands. Suggest adding the corresponding Indonesian block right after both merge — the fallback is graceful, so there is no breakage, just a coverage gap worth tracking.

ahliweb commented Aug 26, 2026

Copy link
Copy Markdown

2026-08-26 current-main parity check

I rechecked this Indonesian CLI/Desktop lane against current upstream main (dcfdc8deec3c5918fc55be8807cb7e307417f91e).

The original 354/354 parity evidence is no longer sufficient for the current tree:

  • this PR is still on head 9a14cb7ed312b58af4e6319e662969fd48141fa8 and is currently not mergeable;
  • its base is 912 upstream commits behind current main;
  • the English core catalog changed since this branch (locales/en.yaml blob b395fb99... on this PR branch vs dbce02e0... on current main);
  • the Desktop English catalog also changed (apps/desktop/src/i18n/en.ts blob 66fcc36c... on this branch vs 19d3fd77... on current main);
  • feat(i18n): localize remaining gateway static bubbles #92338 is still open, not merged, so its previously predicted gateway-key gap should not be treated as the sole cause of current drift.

Recommendation: synchronize/rebase this branch to current main, resolve the i18n registration/type conflicts, then rerun mechanical key/placeholder parity against the exact current locales/en.yaml and Desktop Translations contract plus the existing i18n/typecheck tests. I am not modifying the contributor-owned branch.

@Noah-Ky
Noah-Ky force-pushed the feat/indonesian-locale branch 2 times, most recently from a2b087e to 1f1ca42 Compare August 28, 2026 22:03

ahliweb commented Aug 29, 2026

Copy link
Copy Markdown

2026-08-29 current-main recheck

Current upstream main is aff5125f8edf5095aef5d3d79bbbb101c95b9413. This PR remains open at head 1f1ca426822593edf0516fc878f8c665414a8320 and GitHub currently reports it not mergeable.

The latest upstream segment since 1d8946b40b9333a7fda81be890be31771a312d4f adds another gateway i18n key (gateway.compress.turnhold_deferred) to locales/en.yaml and every currently merged locale catalog. Because id is still PR-only, this is an additional concrete parity drift on top of the previously noted current-main drift.

Recommendation remains: rebase/synchronize this contributor-owned branch onto current main, resolve the i18n registration/type conflicts, regenerate/update locales/id.yaml against the exact current English catalog, then rerun key + placeholder parity, tests/agent/test_i18n.py, Desktop typecheck, and languages.test.ts. I am not modifying the contributor-owned branch.

ahliweb commented Aug 29, 2026 •

Copy link
Copy Markdown

2026-08-30 current-main parity update

Current upstream main is 26350357d76e4508c8df9304a3374bdc5a6f6220. This PR remains open at head 1f1ca426822593edf0516fc878f8c665414a8320; GitHub currently reports it mergeable.

Exact comparison against current upstream is now 1 commit ahead / 248 commits behind, with merge base e60983a69730c058ce772829df3273aee6de3889. The seven-file i18n-only PR scope remains intact.

The original 354 keys, 1:1 parity with locales/en.yaml statement is still stale against current main. The upstream comparison confirms continued changes in both locales/en.yaml and apps/desktop/src/i18n/en.ts since this PR's merge base, in addition to the previously identified /bg, gateway.btw.*, gateway.compress.turnhold_deferred, and Desktop-catalog drift. Mergeability is therefore positive but does not establish current translation parity.

Exact-head workflows on 1f1ca426... are also still execution-blocked rather than source-failing:

  • CI 33215261443 → action_required
  • Nix 33215260745 → action_required
  • Docker 33215260649 → action_required

Recommended maintainer-safe path remains: synchronize/rebase this contributor-owned branch onto current main, preserve the seven-file i18n-only scope, resolve only real registration/type conflicts, update the Indonesian CLI and Desktop catalogs to the exact current English key/placeholder contracts, then rerun:

python -m pytest tests/agent/test_i18n.py -q
# mechanical en/id key + placeholder parity check
cd apps/desktop
npm run typecheck
npx vitest run src/i18n/languages.test.ts

I am not modifying the contributor-owned branch, and no no-op CI retrigger is warranted.

ahliweb commented Aug 30, 2026

Copy link
Copy Markdown

2026-08-30 current-main parity update

Fresh re-check against upstream main 89b38ed734ab2d5c3d263bc24fbdb8c74e931af4 finds additional Desktop English-catalog drift since the previous review point: apps/desktop/src/i18n/en.ts gained 10 new entries in the latest upstream segment, including a new browserRealProfile group. locales/en.yaml did not change in that same segment.

This PR remains at head 1f1ca426822593edf0516fc878f8c665414a8320 and is currently non-mergeable. Its fixed 354 keys, 1:1 parity claim is therefore still stale, and Desktop parity has widened further.

Recommended repair remains narrowly scoped: synchronize with current main, reconcile apps/desktop/src/i18n/id.ts with the current English Translations shape, re-check CLI YAML key/placeholder parity, then run:

python -m pytest tests/agent/test_i18n.py -q
cd apps/desktop
npm run typecheck
npx vitest run src/i18n/languages.test.ts

No merge requested.

@Noah-Ky
Noah-Ky force-pushed the feat/indonesian-locale branch 3 times, most recently from b94bf69 to 7b71064 Compare September 2, 2026 03:15
@Noah-Ky
Noah-Ky force-pushed the feat/indonesian-locale branch from 7b71064 to a838bec Compare September 9, 2026 04:40
@Noah-Ky
Noah-Ky force-pushed the feat/indonesian-locale branch from a838bec to 9c1f689 Compare September 22, 2026 06:39
@Noah-Ky Noah-Ky changed the title feat(i18n): add Indonesian (id) locale for CLI, gateway, and Desktop feat(i18n): add Indonesian (id) locale for Desktop UI Sep 22, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/i18n Localization, locales, translations comp/agent Core agent runtime: loop, agent_init, prompt builder, context-compression, responses endpoint comp/desktop Electron desktop app (apps/desktop/*) P3 Low — cosmetic, nice to have type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants