Files
wordcraft/crates/engine
8ac57f0312 i18n: add Serbian, both scripts (sr, sr-latn) (#250)
Serbian is officially digraphic — Cyrillic and Latin are both in
everyday use, with Cyrillic the default per BCP 47 when no script is
given. Adds both as separate catalogs, same as the existing
Simplified/Traditional Chinese split handles script rather than
region:

- sr-latn.tsv: the actual translation, written clean-room from the
  plain meaning of each English label (never from Microsoft Word's or
  another product's Serbian localisation), covering the full existing
  catalog (874 entries, same key set as zh-hans.tsv).
- sr.tsv: mechanically transliterated from sr-latn.tsv by a small
  script (not committed — a one-off; the mapping is the standard
  digraph-aware Serbian Latin→Cyrillic table). Brand/product/format
  names (WordCraft, PDF, Discord, Zotero, SmartArt, file extensions…)
  and `{placeholders}` are protected from transliteration, same names
  that stay in Latin letters in every other catalog. Hand-editing this
  file isn't the workflow — change sr-latn.tsv and re-transliterate.
- mod.rs: registers `sr` (Cyrillic) and `sr-latn`. No special-casing
  needed in `candidates()` for the script split, unlike Chinese's
  region-implies-script fallback — `sr-Latn-RS` already produces
  `sr-latn` as a candidate before falling back to plain `sr`, and a
  bare `sr`/`sr-RS` (no script tag, the common case) resolves straight
  to `sr` since that's the registered default-script code.
- tests.rs: locale-matching coverage for both scripts, full-catalog
  parity with the reference language, and bundled-font glyph coverage
  for both Cyrillic and Serbian Latin's extended letters (š č ć ž đ),
  mirroring the existing Ukrainian/Portuguese tests.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Brandon Thomas <echelon@gmail.com>
2026-10-10 13:47:38 -04:00
..