Replaces the hand-rolled 25-key i18n.rs with 15 generated locale modules (~700 keys each) mirrored from apps/web/src/i18n/locales/*.ts via tools/convert-locales.py. Locale enum expanded to match the TS dropdown: EnUs / ZhCn / ZhTw / Ja / Ko / Fr / Es / De / Pt / Ru / Hi / Tr / Th / Vi / Id (15 total). Each carries its native-script display_name() (English / 简体中文 / 繁體中文 / 日本語 / 한국어 / Français / Español / Deutsch / Português / Русский / हिन्दी / Türkçe / ไทย / Tiếng Việt / Bahasa Indonesia). Globe icon click cycles all 15 via Locale::next() (round-robin through Locale::ALL). Chrome key references updated to TS dot.case naming so the same key resolves on both sides: - topbar.untitled → common.untitled - layer_panel.pages → pages.title - layer_panel.layers → layers.title - chat.new_chat → ai.newChat - chat.start_with_ai → ai.tryExample - chat.input_placeholder → ai.designWithAgent Generator script lives at tools/convert-locales.py (re-run when TS strings update). Each locale .rs file is ≤ 710 lines (under the 800-line ceiling). Cross-locale fallback: missing keys try EN before falling through to the key itself. 68 lib tests pass (+1 i18n fallback test). |
||
|---|---|---|
| .. | ||
| openpencil-app | ||
| openpencil-shell-core | ||
| openpencil-shell-native | ||
| openpencil-shell-web | ||
| pen-codegen | ||
| pen-core | ||
| pen-engine | ||
| pen-figma | ||
| pen-types | ||
| wasm-libc-shim | ||
| CLAUDE.md | ||