bak
This commit is contained in:
1 parent
fcefd258eb
commit
6b6157d786
23 files changed
+1140
-237
No files matched your search
@@ -0,0 +1,232 @@
|
||||
export const en = {
|
||||
app: {
|
||||
undo: 'Undo (Ctrl+Z)',
|
||||
redo: 'Redo (Ctrl+Shift+Z)',
|
||||
jumpToStart: 'Jump to start',
|
||||
pause: 'Pause (Space)',
|
||||
play: 'Play (Space)',
|
||||
stop: 'Stop',
|
||||
recentProjects: 'Recent projects',
|
||||
saveProject: 'Save project (browser storage)',
|
||||
documentSettings: 'Document settings',
|
||||
export: 'Export',
|
||||
mainTimeline: 'Main timeline',
|
||||
dragResize: 'Drag to resize timeline',
|
||||
loadFailed: 'Failed to load project.',
|
||||
savedToast: '"{name}" saved',
|
||||
saveDialog: {
|
||||
title: 'Save project',
|
||||
message: 'What should the project be called?',
|
||||
confirm: 'Save',
|
||||
defaultName: 'Project {date}',
|
||||
},
|
||||
replaceDialog: {
|
||||
title: 'Replace project?',
|
||||
message:
|
||||
'The current project will be replaced by the loaded file. Unsaved changes will be lost.',
|
||||
confirm: 'Continue',
|
||||
},
|
||||
},
|
||||
|
||||
welcome: {
|
||||
heading: 'Welcome to Animatr',
|
||||
subheading: 'Recent projects',
|
||||
loading: 'Loading…',
|
||||
empty: 'No saved projects yet.',
|
||||
layerCount: '{n} layers',
|
||||
today: 'today {time}',
|
||||
deleteTooltip: 'Delete project',
|
||||
newProject: 'New project',
|
||||
importFile: 'Import file…',
|
||||
exportCurrent: 'Export current',
|
||||
deleteDialog: {
|
||||
title: 'Delete project?',
|
||||
message: '"{name}" will be permanently removed from browser storage.',
|
||||
confirm: 'Delete',
|
||||
},
|
||||
},
|
||||
|
||||
sidebar: {
|
||||
addFile: 'Add SVG / image',
|
||||
library: 'Library',
|
||||
thumbnailsHide: 'Hide thumbnails',
|
||||
thumbnailsShow: 'Show thumbnails',
|
||||
imageLabel: 'Image',
|
||||
addLayerTooltip: 'Insert as layer (or drag to stage)',
|
||||
noImages: 'No images imported',
|
||||
clips: 'Clips',
|
||||
createClipTooltip: 'Create new clip',
|
||||
clipLayerCount: '{n} layers',
|
||||
renameTooltip: 'Rename',
|
||||
deleteTooltip: 'Delete',
|
||||
noClips: 'No clips',
|
||||
shape: {
|
||||
rect: 'Rect',
|
||||
circle: 'Circle',
|
||||
text: 'Text',
|
||||
},
|
||||
newTextDialog: {
|
||||
title: 'New text object',
|
||||
message: 'Text:',
|
||||
default: 'Hello',
|
||||
confirm: 'Insert',
|
||||
fallback: 'Text',
|
||||
},
|
||||
newClipDialog: {
|
||||
title: 'New clip',
|
||||
message: 'Clip name:',
|
||||
default: 'Clip',
|
||||
confirm: 'Create',
|
||||
},
|
||||
renameClipDialog: {
|
||||
title: 'Rename clip',
|
||||
confirm: 'Apply',
|
||||
},
|
||||
deleteClipDialog: {
|
||||
title: 'Delete clip?',
|
||||
message: 'The clip and all placed instances will be removed.',
|
||||
confirm: 'Delete',
|
||||
},
|
||||
},
|
||||
|
||||
properties: {
|
||||
keyframeLabel: 'Keyframe',
|
||||
interpolated: 'Interpolated',
|
||||
removeKeyframe: 'Remove keyframe here',
|
||||
deleteLayer: 'Delete layer',
|
||||
noLayer: 'No layer selected.',
|
||||
},
|
||||
|
||||
fullscreen: {
|
||||
pause: 'Pause',
|
||||
play: 'Play',
|
||||
jumpToStart: 'Jump to start',
|
||||
close: 'Close (Esc)',
|
||||
},
|
||||
|
||||
timeline: {
|
||||
colors: {
|
||||
none: 'None',
|
||||
red: 'Red',
|
||||
orange: 'Orange',
|
||||
yellow: 'Yellow',
|
||||
green: 'Green',
|
||||
cyan: 'Cyan',
|
||||
blue: 'Blue',
|
||||
purple: 'Purple',
|
||||
pink: 'Pink',
|
||||
gray: 'Gray',
|
||||
},
|
||||
noTracks: 'No tracks yet.',
|
||||
addClipTrack: 'Add clip track',
|
||||
addClipTrackTooltip: 'Add another clip track',
|
||||
clipTrackName: 'Clip track',
|
||||
toggleTimeUnit: 'Toggle time unit',
|
||||
snapOn: 'Snapping on (playhead & keyframes snap together)',
|
||||
snapOff: 'Snapping off',
|
||||
stillFrameTooltip: 'Still frame {time} — holds until the next keyframe',
|
||||
keyframeTooltip: 'Keyframe {time} — drag to move, right-click for options',
|
||||
trimTooltip: '{name} · {duration}s{trims} · Drag edges to trim, double-click to open',
|
||||
trimStart: 'Start -{value}s',
|
||||
trimEnd: 'End -{value}s',
|
||||
easing: 'Easing',
|
||||
easingLinear: 'Linear',
|
||||
easingEaseIn: 'Ease In',
|
||||
easingEaseOut: 'Ease Out',
|
||||
easingEaseInOut: 'Ease In-Out',
|
||||
firstKfHint: 'First keyframe — easing has no effect',
|
||||
holdDisabledHint: 'Still frame — easing disabled',
|
||||
lastKfHint: 'Last keyframe — still frame has no effect',
|
||||
stillFrame: 'Still frame',
|
||||
duplicate: 'Duplicate',
|
||||
delete: 'Delete',
|
||||
color: 'Color',
|
||||
lock: 'Lock',
|
||||
unlock: 'Unlock',
|
||||
deleteLayer: 'Delete layer',
|
||||
deleteClipTrack: 'Delete clip track',
|
||||
separate: 'Separate Position and Rotation',
|
||||
rotation: 'Rotation',
|
||||
position: 'Position',
|
||||
removeInstanceDialog: {
|
||||
title: 'Remove clip instance?',
|
||||
message: 'Remove "{name}" at {time}s from the timeline.',
|
||||
generic: 'Remove this clip instance from the timeline.',
|
||||
confirm: 'Remove',
|
||||
},
|
||||
},
|
||||
|
||||
canvas: {
|
||||
zoomIn: 'Zoom in',
|
||||
zoomOut: 'Zoom out',
|
||||
zoomOneToOne: 'Zoom 1:1',
|
||||
fitToView: 'Fit to view',
|
||||
cropOn: 'Show stage only (crop)',
|
||||
cropOff: 'Show everything',
|
||||
},
|
||||
|
||||
settings: {
|
||||
title: 'Settings',
|
||||
tab: {
|
||||
document: 'Document',
|
||||
timeline: 'Timeline',
|
||||
theme: 'UI Theme',
|
||||
},
|
||||
canvas: 'Canvas',
|
||||
width: 'Width',
|
||||
height: 'Height',
|
||||
background: 'Background',
|
||||
duration: 'Duration (s)',
|
||||
fps: 'FPS',
|
||||
timelineHint: 'Timeline length sets the ruler scale. Playback stops at the last keyframe.',
|
||||
themeHint: 'Saved in the browser and reused on next open.',
|
||||
themeDark: 'Dark',
|
||||
themeLight: 'Light',
|
||||
done: 'Done',
|
||||
},
|
||||
|
||||
export: {
|
||||
title: 'Export',
|
||||
runtimeBadge: '1× per page',
|
||||
runtimeDesc: 'Engine — include once; all scenes on the page share the runtime',
|
||||
sceneBadge: 'Scene',
|
||||
sceneDesc: 'Scene data only — requires the runtime to be loaded',
|
||||
exampleTitle: 'Example HTML',
|
||||
exampleDesc: 'Standalone HTML — just open it in a browser',
|
||||
mp4Badge: 'Server · Frame-accurate',
|
||||
mp4Desc: 'H.264, any resolution — requires render server',
|
||||
webmBadge: 'Browser · Realtime',
|
||||
webmDesc: 'No server — recorded in real time',
|
||||
webmNotSupported: 'Browser does not support MediaRecorder',
|
||||
cancel: 'Cancel',
|
||||
failed: 'Export failed',
|
||||
back: 'Back',
|
||||
labelWebm: 'Rendering WebM (browser, realtime)…',
|
||||
labelMp4: 'Rendering MP4 (server)…',
|
||||
},
|
||||
|
||||
tests: {
|
||||
running: 'Tests running',
|
||||
title: 'Test Runner',
|
||||
runAgain: 'Run again',
|
||||
close: 'Close',
|
||||
copyTooltip: 'Copy report to clipboard',
|
||||
copiedTooltip: 'Report copied',
|
||||
copiedBanner: 'Error report copied to clipboard.',
|
||||
copyFailedBanner: 'Copy failed — use the clipboard icon to trigger manually.',
|
||||
emptyState: 'No results — click "Run again" or press {shortcut}.',
|
||||
testsCountLabel: '{n} tests',
|
||||
passedLabel: '{n} passed',
|
||||
failedLabel: '{n} failed',
|
||||
},
|
||||
|
||||
dialog: {
|
||||
confirm: 'Confirm',
|
||||
input: 'Input',
|
||||
ok: 'OK',
|
||||
cancel: 'Cancel',
|
||||
close: 'Close',
|
||||
},
|
||||
} as const
|
||||
|
||||
export type Messages = typeof en
|
||||
Reference in new issue
Block a user