Files
effectcraft/docs/localization-parity.md
T
WaWu 0aa2ea5e12 i18n: an effect's name draws in the interface language, the generated Effect menu included (#821)
The interface below the menu bar is localized (618 fixed menu entries, ~490 panel rows) but an
effect's name still rendered in English everywhere it appeared: the generated Effect menu, Effect
Controls, the Timeline and Effects & Presets.

The registry's English name is the effect's identity: `effect.list`, `effect.apply {"effect": …}`,
scripts, expressions and the property tree's group name all match on it. Only the drawing changes.

`crates/ui-egui/src/i18n/effects.rs` keys the names by effect **id** rather than by the English
string — a repeat is stored as `Gaussian Blur 2` (an English key would miss it) and upstream
renames a display name now and then, while the id is stable. It carries 306 rows for Simplified
Chinese, one per effect in the registry, taken from the installed After Effects 2026 (26.5.0.89)
Simplified Chinese interface, with the `CC` series following Adobe's Chinese documentation (which
names 68 of the 69 that its interface leaves in English). `Cryptomatte`, `EXtractoR`, `IDentifier`,
`Key Light` and `Unmult` stay in English as brand names; `Face Measurements` and `Face Track
Points` are EffectCraft's own effects. The 21 category folder names are in the same file, worded
after the effect names (channel → 通道, noise → 杂色, matte → 遮罩 …).

What draws the catalog now:

- **Effect menu:** the entries and the category submenus. The command and its `{"effect": <id>}`
  params are untouched, so the menu still applies by id.
- **Effect Controls:** the header, its Rename field, the accessible name and the About popup.
- **Timeline:** effect group rows, and the search (a Chinese interface is searchable in Chinese).
- **Effects & Presets:** the rows, the drag ghost, the folder rows and the search.

Kept as they are: the effect id, the property tree's `PropGroup.name`, every automation id and
label, `effect.list`'s `name`/`category`, and the undo label (`Apply Gaussian Blur`). A name the
user typed in Effect Controls stays verbatim, and a repeated instance keeps the index the engine
appends (`Gaussian Blur 2` → `高斯模糊 2`). No other language has rows yet, Traditional Chinese
included, so those draw the registry's English name.

Tests: nine unit tests under `cargo test -p effectcraft-ui-egui --lib i18n` cover the data (every
effect has a row, the row still carries the registry's English name, ids are unique, only the five
brand names repeat their English name, every category has a row, a row names an effect the registry
knows) and the behaviour (the instance index, user renames, English and untranslated languages,
search) plus a scan pinning the drawing sites. `crates/ui-egui/tests/ui_effect_names.rs` checks the
Effect Controls header, the generated Effect menu and that the ids, automation labels and
`effect.list` stay English.

`docs/localization-parity.md` and `docs/gaps.md` no longer record effect names as deliberately
English; effect *parameter* names are still untranslated and stay the next piece.

Refs #821
2026-10-13 13:39:16 +08:00

8.2 KiB
Raw Blame History

Localization parity

Last reviewed: 2026-10-10 · Last updated: 2026-10-13 · Change: minor (effect names and the generated Effect menu go through a catalog, in Simplified Chinese) · Target: Adobe After Effects 2026

How much of EffectCraft's interface is translated, language by language, compared with After Effects. gaps.md gap 16 and workstream G9 hold the work; target-app-parity.md the overall numbers.

What After Effects ships

The installed After Effects 2026 (26.5.0.89) bundle has 11 .lproj localisations: English, French, German, Italian, Japanese, Korean, Portuguese (Brazil), Russian, Spanish, Simplified Chinese (zh_CN) and Traditional Chinese (zh_TW). Each translates the whole interface, including effect names and parameters. It ships no Hindi, Arabic, Indonesian or Vietnamese interface; Arabic and Hebrew text in layers is supported through its Middle Eastern text engine.

How EffectCraft translates

  • Menus: crates/ui-egui/src/i18n.rs, one catalog per language keyed by (command, English label). A test (every_translation_key_exists_in_the_actual_menu_tree) fails if any fixed menu entry is untranslated or a row is stale, so every catalog covers all 618 fixed entries. The generated Effect menu is not part of that fixed tree: its entries and category submenus take their labels from the effect catalog below.
  • Panels, dialogs, buttons, tooltips: crates/ui-egui/src/i18n/ui.rs, keyed by the English source string, with English fallback. Catalogs exist for Japanese, Simplified and Traditional Chinese, Ukrainian and Czech.
  • Effect names: crates/ui-egui/src/i18n/effects.rs, keyed by effect id, in Simplified Chinese (306 rows, one per effect in the registry, plus its 21 categories). The registry's English name stays the effect's identity: effect.list, effect.apply {"effect": …}, scripts and expressions match on it, and the property tree stores it as the effect group's name. Only the drawing — the Effect menu, Effect Controls, the Timeline and Effects & Presets — goes through the catalog, so a project file is identical whichever interface language opens it. A repeat (Gaussian Blur 2) keeps the index the engine appends, and a group the user renamed in Effect Controls stays verbatim. No other language has rows yet, so they draw English.
  • Not translated anywhere yet: effect parameter names (≈ 1,650, crates/effects), engine-generated text (property names, errors, undo labels), the Home screen's unwrapped literals (#574), Learn tutorials and documentation.
  • Language choice: Settings ▸ General ▸ Language, or Match System (match_system_uses_the_system_language_where_there_is_a_catalog).
  • Fonts: no bundled CJK font; the UI installs system fallbacks probed by script (Kana, Han, Arabic, Hebrew, Devanagari, Bengali, Gurmukhi, Gujarati, Tamil, Telugu, Kannada, Malayalam, Thai: crates/ui-egui/src/theme.rs). There is no Hangul probe, so Korean renders as boxes on macOS (#599). The web build has no system fonts.
  • Script support in the interface: egui draws text without complex shaping or right-to-left layout, so an Arabic or Hindi interface would render unshaped and left to right. In text layers (crates/text) shaping (harfrust), bidi (UAX #9), vertical text and Tate-Chu-Yoko work; text-layer typing goes through the IME (viewer_text.rs handles preedit and commit).

Measurement

Measured 10 October 2026 at origin/main 1446e27 by counting catalog rows. The denominator, ≈ 3,900 user-visible strings, is estimated: 618 fixed menu entries + ≈ 1,320 capitalised UI literals in crates/ui-egui/src outside tests and catalogs (a regex count, so an upper bound) + ≈ 1,650 distinct effect parameter names + 306 effect names. Engine messages are not counted, so the true percentages are slightly lower.

Language Code UI strings translated Dialogs / tooltips / help Script support Native review Status To full
English en ≈ 3,900 (100%, source) All; docs in English — yes full —
Simplified Chinese zh-hans 1,081 (≈ 28%): menus 618/618, panels 463 Panels and dialogs partly (≈ 35% of panel strings); no help, effect names translated (306) and their parameter names not; Home screen literals unwrapped (#574) System CJK fallback; Han follows the UI language; CJK text in comps renders wrongly (#453); IME in text layers no partial 6–9 h + review
Spanish es 618 (≈ 16%) Menus only Latin, fine no menus only 7–10 h + review
Hindi hi 0 — UI: Devanagari fallback font but no shaping; text layers shape Devanagari no none (After Effects: none) 9–13 h + shaping in the UI
Arabic ar 0 — UI: Arabic fallback font but no shaping and no RTL layout; text layers: bidi + shaping no none (After Effects: none) 9–13 h + 15–25 h RTL UI
French fr 0 — Latin, fine no none 8–12 h + review
Portuguese (Brazil) pt-br 618 (≈ 16%) Menus only Latin, fine no menus only 7–10 h + review
Indonesian id 0 — Latin, fine no none (After Effects: none) 8–12 h + review
Japanese ja 1,015 (≈ 26%): menus 618/618, panels 397 Panels and dialogs partly (≈ 30% of panel strings) Japanese system fallback; vertical text and Tate-Chu-Yoko in text layers; IME no partial 6–9 h + review
German de 0 — Latin, fine no none 8–12 h + review
Korean ko 0 — No Hangul fallback probe: boxes on macOS (#599) no none 9–13 h + review
Vietnamese vi 0 — Latin with stacked diacritics; untested no none (After Effects: none) 8–12 h + review

Other languages EffectCraft ships (3):

Language Code UI strings translated Status To full
Traditional Chinese zh-hant 1,081 (≈ 28%): menus 618/618, panels 463 partial 6–9 h + review
Ukrainian uk 1,113 (≈ 29%): menus 618/618, panels 495/496 partial 6–9 h + review
Czech cs 1,114 catalog entries (≈ 29%): menus 618/618, panels 496/496 (current Chinese catalog); added after the measurement above All existing catalog entries covered; unwrapped UI, effects and engine text still in English; AI-assisted, not yet native-speaker proofread Remaining strings + independent native review

After Effects also ships Italian and Russian, which EffectCraft does not (8–12 h each).

Overall: ≈ 12%, the average coverage of After Effects' 10 non-English languages (Simplified and Traditional Chinese 28%, Japanese 26%, Spanish and Portuguese 16%, French, German, Korean, Italian and Russian 0%). This is the localization row in target-app-parity.md.

Effort. One-time work first: route parameter names and engine messages through a catalog, wrap the remaining panel literals, and add a Hangul probe (10–20 h). Then each language needs ≈ 2,900 more strings (≈ 5–9 h per language at the pace of #398 and #401). Parity with After Effects' 10 non-English languages: ≈ 60–110 h; the four extra languages of the standard list (Hindi, Arabic, Indonesian, Vietnamese) add ≈ 50–80 h, most of it right-to-left layout and complex shaping in the interface. Every language needs native-speaker review, which only a human can give; none has had it.

Revision history

Date Change Summary
2026-10-10 major First localization parity document: catalog rows counted for all six languages, the twelve-language table, After Effects' 11 shipped languages from its bundle
2026-10-11 minor Ukrainian panel catalog brought level with the Chinese ones (495 of 496 rows, counted at this commit); its share rises to ≈ 29%. The other languages' panel counts are the 10 October measurement
2026-10-13 minor Effect names and the generated Effect menu leave English: i18n/effects.rs adds 306 rows keyed by effect id (Simplified Chinese, from After Effects 2026's interface and Adobe's Chinese documentation for the CC series) and the 21 category names. Parameter names are still English; no other language has rows