Skip to content

feat(i18n): add Japanese, Korean and Russian, and translate the README - #790

Merged
omartelo merged 1 commit into
mainfrom
feat/ja-ko-ru-languages
Oct 17, 2026
Merged

omartelo merged 1 commit into
mainfrom
feat/ja-ko-ru-languages

Conversation

@omartelo

Copy link
Copy Markdown
Collaborator

Adds Japanese (ja), Korean (ko) and Russian (ru) as interface and prompt languages, in the web and the native window, and translates the README into pt-BR, es, ja, ko and ru.

What changes

  • Catalogs: full ja, ko and ru catalogs for the web (frontend/src/lib/i18n/locales/), the native window (native/i18n/locales/) and the prompt language (internal/prompt/{ja,ko,ru}.go), registered everywhere the lich-i18n skill lists for a new language.
  • Russian plurals: CLDR one/few/many integer rules in the Go prompt catalog and in native/i18n; the web uses Intl.PluralRules. Each side checks that every form a locale's rule picks for 0..199 exists in its catalog.
  • CJK faces per language (native): the CJK fallback face follows the interface language (JP faces for ja, KR for ko, SC otherwise), and the font offer downloads Noto Sans JP or KR (pinned to the same noto-cjk commit as SC, about 14 MB each) when no face draws the chosen language.
  • READMEs: README.pt-BR.md, README.es.md, README.ja.md, README.ko.md, README.ru.md, a seven-language switcher in every README; CLAUDE.md invariant 5 and the lich-i18n skill now name every translated README for provider gap rows.

Test changes

  • TestCatalogParity: a locale's One form may now also use the arguments of English's Other. Reason: the test asserted something the contract never promised (form-by-form argument equality); Russian one covers 21, so it must show the count where English one does not. No form may drop or invent an argument.
  • TestEveryLocaleIsNamedInItself and the native needsHanFont/launchLanguage tables: the contract changed (new locales; CJK languages wait for their own font, not only Chinese).
  • Everything else is new cases only.

Verification

Local gate, each step alone: biome ci ., pnpm build, gofmt -l ., go vet ./..., go test ./..., pnpm test, and gofmt/go vet ./.../go test ./... in native/. Native shots of Settings > General in ja, ko and ru, the Pulls screen and the palette in ru, and the JP/KR font offer.

Follow-ups

  • lich-plugin needs the matching ja/ko/ru prompt catalogs (branch feat/ja-ko-ru-prompt-languages there), released after this.
  • Native-speaker review: Korean particles stay in the double form around placeholders (을(를)); Russian uses "одобрил(а)" for an author of unknown gender.
  • The font offer was not seen on a machine with no CJK font at all: the interface shaper also reads system fonts on its own, outside fontconfig.

ja, ko and ru join en, pt-BR, es and zh-CN as interface languages, in the
web and the native window, and as prompt languages, so the briefings,
relay notes and handoffs lich types into a session read in them too.

Russian counts in one, few and many. The Go prompt catalog and the native
window gain its CLDR integer rules (the web already asks Intl.PluralRules),
and each side checks that every form a locale's rule selects for 0..199 is
in its catalog. TestCatalogParity now lets a locale's one form use the
arguments of English's other form: Russian one also covers 21, so it shows
the count where English one does not. The test asserted a form-by-form
match the contract never promised; no form may still drop or invent an
argument.

The native window picks the CJK face by interface language, since Han
characters are drawn differently in Japanese, Chinese and Korean, and the
font offer that only knew Noto Sans SC now offers Noto Sans JP or KR,
pinned to the same noto-cjk commit, when no face draws the chosen language.

The README is now also in Brazilian Portuguese, Spanish, Japanese, Korean
and Russian, with a seven-language switcher in each, and CLAUDE.md and the
lich-i18n skill put a provider gap row in every translated README.
@omartelo omartelo added the ci:os Runs the backend suite on Windows and macOS runners label Oct 17, 2026
@omartelo
omartelo merged commit 5abd3e4 into main Oct 17, 2026
10 checks passed
@omartelo
omartelo deleted the feat/ja-ko-ru-languages branch October 17, 2026 12:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:os Runs the backend suite on Windows and macOS runners

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant