// Which language pairs the add-a-book form OFFERS. // // ⚠ This is a client-side offer list and it is the honest weak point of the intake screen: the // contract has no handle for "what this deployment can translate", and which pairs a deployment // can actually run is its own property — the engine reads a pair out of a language pack, and a // deployment shipping a different set would make this list lie. A code the user cannot enter is // worse than a list that is short, so the form offers what the product translates today and the // gap is written down rather than papered over (BACKLOG Ф-57: a handle in the contract). // // Codes only, never names: the name is computed by `Intl.DisplayNames` for the language of the // INTERFACE, so a second interface language renames the list without an edit here (the same rule // the whole zone follows — CLAUDE.md §2). export const sourceLanguages = ['zh', 'ja', 'en'] as const; export const targetLanguages = ['ru'] as const;