/** * UI strings the editor paints into the DOM (toolbar tooltips, the * fullscreen exit button) and onto the timeline canvas (phantom new- * track label, track header labels). Every user-visible literal in * `@aicut/core` flows through this interface — there are no hidden * hard-coded translations elsewhere in the library. * * Defaults to English. Hosts that want Chinese (or any other locale) * pass `locale: localeZh` to `Editor.create` / `Timeline.create`, or * override individual keys with `locale: { undo: "撤销" }`. */ interface Locale { undo: string; redo: string; split: string; trimLeft: string; trimRight: string; playPause: string; fullscreen: string; snap: string; /** Title shown on the snap button when snap is ON (clicking turns OFF). */ snapOnTitle: string; /** Title shown when snap is OFF (clicking turns ON). */ snapOffTitle: string; zoomOut: string; zoomIn: string; reset: string; /** Toolbar tooltip when no keyframe exists at the playhead. */ keyframeAdd: string; /** Toolbar tooltip when one exists — clicking removes it. */ keyframeRemove: string; /** Toolbar tooltip — jump the playhead to the selected clip's start. */ seekClipStart: string; /** Toolbar tooltip — jump the playhead to the selected clip's end. */ seekClipEnd: string; /** Toolbar tooltip — "+ PiP overlay" action button (host's file * picker takes over on click). */ pipAdd: string; /** Toolbar button tooltip — opens the aspect picker popover. */ aspectTitle: string; /** Header inside the popover — sits above the ratio grid. */ aspectMenuLabel: string; /** Label for the "follow source clip" item — clears `Project.aspect`. */ aspectOriginal: string; /** Header text on the keyframe parameter panel. */ keyframePanelTitle: string; /** Row label for the X-translation numeric input. */ keyframePanelLabelX: string; /** Row label for the Y-translation numeric input. */ keyframePanelLabelY: string; /** Row label for the scale numeric input. */ keyframePanelLabelScale: string; /** Row label for the easing dropdown. */ keyframePanelLabelEasing: string; /** Reset button label — pins this kf to identity (0, 0, 1). */ keyframePanelReset: string; /** Reset button tooltip. */ keyframePanelResetTitle: string; /** Badge tooltip — kf for THIS prop is pinned at this moment. */ keyframePanelBadgePinned: string; /** Badge tooltip — prop has kfs elsewhere but not at this moment. */ keyframePanelBadgeAnimated: string; /** Badge tooltip — prop has no kfs (riding the static base). */ keyframePanelBadgeStatic: string; /** Time display suffix — appended after the seconds value. */ keyframePanelTimeSuffix: string; keyframeEasingLinear: string; keyframeEasingEaseIn: string; keyframeEasingEaseOut: string; keyframeEasingEaseInOut: string; exitFullscreen: string; exitFullscreenTitle: string; /** Phantom row that appears under the last track during a drag. */ newTrack: string; /** Track header — `{n}` is replaced with the 1-based track index. */ videoTrackLabel: string; /** Same template format as videoTrackLabel. */ audioTrackLabel: string; } /** English. The library default — chosen over Chinese as the OSS norm. */ declare const localeEn: Locale; /** Simplified Chinese. */ declare const localeZh: Locale; /** Spread defaults under host overrides — host can supply a partial. */ declare function mergeLocale(partial: Partial | undefined): Locale; /** * Replace `{key}` placeholders in a template. We only need `{n}` * substitution today; the implementation is generic so additional * keys (e.g. `{name}`) won't need a second pass. */ declare function formatLabel(template: string, vars: Record): string; export { type Locale as L, localeZh as a, formatLabel as f, localeEn as l, mergeLocale as m };