Files
wordcraft/docs/localization-parity.md
T
dab5092e83 Font dialog: separate Asian and Latin text fonts (#505) (#536)
* Font list: installed Chinese fonts are listed, by their Chinese names in a Chinese interface (#505)

The font database read only the English family name of each font, so a
Chinese interface listed SimSun, Microsoft YaHei and WenQuanYi Zen Hei
by their English names and never as 宋体, 微软雅黑 or 文泉驿正黑, and a
document naming a font by its Chinese name fell back to another font.

- fonts: keep each face's localized family names (name IDs 16 and 1,
  every face of a collection, read during the scan without loading the
  file); FontDb::families_in(lang) lists them in place of the English
  names for a matching interface language (zh-hans, zh-hant, ja, ko);
  face, has_family and styles accept either name.
- ui: the ribbon and mini toolbar font boxes show the interface
  language's names and store the English name.
- East Asian font: choosing a Chinese, Japanese or Korean font also sets
  it as the East Asian font (w:eastAsia), read and written in DOCX;
  layout draws CJK text in a run's installed East Asian font.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Font dialog: separate Asian and Latin text fonts (#505)

Word's Font dialog sets the font of Chinese, Japanese and Korean text
apart from the font of Latin text; WordCraft's had one font box.

- Font dialog: an "Asian text font" box (the installed Chinese, Japanese
  and Korean fonts, by their interface-language names, type to find)
  above the "Latin text font" box, shown for a Chinese or Japanese
  interface, East Asian text in the selection or a selection with an
  Asian font. OK sets only the fonts changed, in one undo step.
- format.font takes "eastAsia" (w:eastAsia) besides "name"; either or
  both; format.state reports fontEastAsia.
- fonts: the scan reads each font's OS/2 code pages, so
  FontDb::east_asian_families lists CJK fonts without loading them.
- Tests: dialog sets each font on its own; layout sets CJK text in the
  run's Asian font and Latin text in its Latin font (skipped without an
  installed CJK font); command and undo; the scan finds a CJK font.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Brandon Thomas <echelon@gmail.com>
2026-10-11 21:42:56 -04:00

7.4 KiB
Raw Blame History

Localization parity with Microsoft Word

Last reviewed: 2026-10-10 · Last updated: 2026-10-11 · Change: minor (font list shows fonts by their names in the interface language, #505; previously minor: Turkish interface added; previously major: first version; catalogs measured from crates/ui-egui/src/i18n, Word's languages from its bundle listing) · Target: Microsoft Word (Microsoft 365) for Mac 16.113.4

Interface languages, script support and proofing per language. How translation works (catalog format, adding a language, clean-room rule): crates/ui-egui/src/i18n/mod.rs.

Dimension: ~25% (estimated), 80–130 h to full for the twelve key languages plus ~50 h for the other ~18 languages Word ships, plus native-speaker review (human).

What Word ships (measured by listing the bundle)

  • 30 interface languages (31 .lproj folders incl. Base): ar, cs, da, de, el, en, en-GB, es, es-MX, fi, fr, fr-CA, he, hu, id, it, ja, ko, nl, no, pl, pt (BR), pt-PT, ru, sk, sv, th, tr, zh-CN, zh-TW. Arabic and Hebrew get a mirrored interface. No Hindi or Vietnamese interface on Mac.
  • 120 proofing tools (SharedSupport/Proofing Tools): spellers for ~50 languages, grammar checkers for ~20, hyphenators for ~16, thesauri for ~20.

What WordCraft ships (measured)

  • 12 interface languages: English plus zh-hans, zh-hant, ja, uk, es, pt-br, Serbian sr/sr-latn (#250), Estonian et, Turkish tr and Russian ru. Catalogs have 1,305–1,450 entries each. A test (every_tab_and_command_is_translated) enforces that every ribbon tab, command label and ribbon location is translated in every language.
  • Of the 675 English strings a scan extracts from tl!(…) calls and command labels/locations, each catalog covers 661 (98%). Some newer dialog and pane strings (Equation tab tooltips, Zotero, Read Aloud, Backstage greetings) aren't wrapped in tl! yet, so they show in English in every language: the true share of visible strings is ~93–95% (estimated).
  • Pending PRs: German (#203), Norwegian Bokmål (#208) and Nynorsk (#210), Hebrew with RTL (#20).
  • Proofing: English only (one dictionary, rule-based grammar, English hyphenation patterns).
  • Document scripts: shaping via HarfRust (HarfBuzz port) for every script; bidi (UAX #9) and Arabic shaping tested (#207); IME on all desktop platforms (winit fixes pending, #155–#164).

The twelve key languages

Status: full = every user-visible string translated and the script renders and edits correctly; partial; menus only; none. Hours are to full, Opus 5.5 agent wall-clock, excluding the shared items below.

Language Code UI strings translated Dialogs / tooltips / help Script support Native review Status Hours to full
English en source (100%) ✅ Latin ✅ yes full 0
Simplified Chinese (Mandarin) zh-hans 929 entries; 98% of extracted, ~95% of visible most; newer panes English CJK ✅, IME ✅; Windows UI font fixed (#248); interface font chain covers every catalog character, installed CJK font after the embedded ones when it doesn't, PingFang found on macOS 12 (#486); font list by Chinese names (宋体, 微软雅黑, #505); no vertical text no partial 3–5
Spanish es ~930; 98% / ~95% most Latin ✅ no partial 1–2
Hindi hi 0 ❌ Devanagari shaping via HarfRust, untested; no hyphenation no none 4–6
Arabic ar 0 ❌ shaping, joining, lam-alef, bidi ✅ (#207); no kashida; no mirrored UI no none 6–8
French fr 0 ❌ Latin ✅ no none 3–4
Portuguese pt-br (pt-PT none) ~930; 98% / ~95% (pt-BR) most Latin ✅ no partial 2–4 (pt-BR finish + pt-PT)
Indonesian id 0 ❌ Latin ✅ no none 3–4
Japanese ja ~930; 98% / ~95% most CJK ✅, IME ✅; no vertical text, ruby or document grid no partial 3–5
German de 0 (PR #203 open) ❌ Latin ✅ no none 1–2
Korean ko 0 ❌ Hangul ✅; macOS Korean IME fixes pending (#163, #164) no none 3–5
Vietnamese vi 0 ❌ Latin with stacked diacritics, untested no none 3–4

Other shipped languages: 7 — Traditional Chinese (zh-hant), Ukrainian (uk), Serbian Cyrillic and Latin (sr, sr-latn, #250), Estonian (et), Turkish (tr) and Russian (ru), all partial. Estonian uses the existing fonts, follows et-EE system locales, and is available in Options or through ui.language with {"value":"et"}. Its 1,307 entries cover the existing interface catalog. Estonian spelling, grammar, dates and document templates are not added by the interface catalog. Turkish works the same way (tr-TR and tr-CY system locales, {"value":"tr"}) with all 1,307 entries. Command search folds the Turkish dotted and dotless I (italik finds İtalik, YAZI TİPİ finds Yazı Tipi) while English labels and ASCII command ids keep their usual matching. Turkish proofing is not included; terminology and checks: localization-tr.md.

Shared work (not in the per-language hours)

Item Hours Notes
Wrap the remaining English literals in tl! and translate them in every catalog 4–6 Makes the six partial languages full except script items
Mirrored (right-to-left) interface for Arabic and Hebrew 15–25 Ribbon, panes, dialogs, rulers
Vertical text, ruby, document grid (Chinese, Japanese, Korean) counted in layout-parity.md
Proofing dictionaries, grammar and hyphenation for the 11 non-English key languages 25–45 Open dictionaries only (licence check per dictionary); issues #25, #40, #100
Native-speaker review of every catalog human None reviewed yet

Revision history

Date Change Summary
2026-10-11 minor Font dialog sets the Asian text font (w:eastAsia) and the Latin text font separately; the Asian list holds the installed Chinese, Japanese and Korean fonts by their interface-language names (#505)
2026-10-11 minor Font list shows installed fonts by their names in the interface language (宋体 for SimSun in Chinese, Japanese and Korean names likewise) and finds them by either name; a Chinese, Japanese or Korean font is stored as w:eastAsia too (#505)
2026-10-11 minor Chinese/Japanese interface fonts: a test checks every catalog character has a glyph; an installed CJK font follows the embedded faces whenever they miss one; macOS font asset folders searched for PingFang (#486)
2026-10-10 minor Russian interface (#300; 1,524 entries, built-in style names shown translated; covers everything the interface audit finds)
2026-10-11 minor Turkish interface catalog (1,307 entries), locale selection, saved preference, Turkish casing in command search and font coverage checks; catalog sizes re-counted
2026-10-11 trivial English spelling (#520): our supplement assets/spelling/en-extra.txt adds ~220 common modern words the Moby list lacks ("desktop", "download", "email"…)
2026-10-10 minor Estonian interface catalog, locale selection, saved preference and font coverage checks
2026-10-10 minor Serbian (Cyrillic and Latin) interface merged (#250)
2026-10-10 major First version: twelve-language table, catalog coverage measured, Word's 30 UI languages and 120 proofing tools listed