923 lines
41 KiB
JSON
923 lines
41 KiB
JSON
{
|
||
"app": {
|
||
"title": "Spine Particle Editor - Yeomai",
|
||
"resizeTimeline": "Drag to resize the timeline",
|
||
"systems": "Systems",
|
||
"particlesBones": "Particles (bones)",
|
||
"rootBone": "Root bone",
|
||
"hudTip": "Scroll to zoom · Drag with left mouse to pan"
|
||
},
|
||
"language": {
|
||
"label": "Language",
|
||
"zhCN": "中文",
|
||
"zhTW": "繁體中文",
|
||
"en": "English",
|
||
"ja": "日本語",
|
||
"ko": "한국어",
|
||
"fr": "Français",
|
||
"de": "Deutsch",
|
||
"ptBR": "Português",
|
||
"es": "Español"
|
||
},
|
||
"welcome": {
|
||
"documentTitle": "Yeomai Spine Tools",
|
||
"titleLead": "From Spine particles",
|
||
"titleAccent": "to the Spine toolchain",
|
||
"backToTools": "Back to tools",
|
||
"editor": {
|
||
"badge": "PARTICLE EDITOR",
|
||
"title": "Particle Editor",
|
||
"description": "Build Spine particle systems and freely export JSON and Spine project files.",
|
||
"tagPreview": "Live preview",
|
||
"tagSequence": "Spine project export",
|
||
"tagExport": "JSON export",
|
||
"cta": "Open Particle Editor"
|
||
},
|
||
"viewer": {
|
||
"badge": "EAGLE PLUGIN",
|
||
"description": "Easily review your Spine assets inside Eagle.",
|
||
"tagVersions": "3.4–4.3",
|
||
"tagSkins": "Animation preview",
|
||
"tagTimeline": "Format support",
|
||
"cta": "View SpineViewer"
|
||
},
|
||
"thumbnail": {
|
||
"badge": "EAGLE PLUGIN",
|
||
"auto": "Auto generate",
|
||
"description": "Detect Spine assets and generate thumbnails, a companion tool for SpineViewer.",
|
||
"tagPairing": "Asset pairing",
|
||
"tagModes": "Static / animated",
|
||
"tagBatch": "Batch output",
|
||
"cta": "View SpineThumbnails"
|
||
}
|
||
},
|
||
"common": {
|
||
"close": "Close",
|
||
"collapse": "Collapse",
|
||
"reset": "Reset",
|
||
"add": "Add",
|
||
"remove": "Remove",
|
||
"delete": "Delete",
|
||
"clear": "Clear",
|
||
"cancel": "Cancel",
|
||
"confirm": "Confirm",
|
||
"none": "None",
|
||
"enabled": "Enabled",
|
||
"disabled": "Disabled",
|
||
"fixed": "Fixed",
|
||
"random": "Random",
|
||
"curve": "Curve",
|
||
"followExport": "Follow export",
|
||
"linear": "Linear",
|
||
"bezier": "Bézier",
|
||
"above": "Above",
|
||
"below": "Below",
|
||
"left": "Left",
|
||
"right": "Right",
|
||
"seconds": "s",
|
||
"frames": "f"
|
||
},
|
||
"toolbar": {
|
||
"settings": "Settings",
|
||
"undo": "Undo (Ctrl+Z)",
|
||
"pan": "Pan canvas (Q)",
|
||
"translate": "Move (W)",
|
||
"rotate": "Rotate (E)",
|
||
"scale": "Scale (R)",
|
||
"zoomIn": "Zoom in",
|
||
"zoomOut": "Zoom out",
|
||
"fitView": "Fit canvas",
|
||
"toggleGrid": "Toggle grid",
|
||
"resetView": "Reset view",
|
||
"background": "Background",
|
||
"backgroundSettings": "Background settings",
|
||
"changeBackground": "Replace image",
|
||
"uploadBackground": "Upload image",
|
||
"clearBackground": "Clear background",
|
||
"noBackground": "No image",
|
||
"backgroundX": "Background X offset",
|
||
"backgroundY": "Background Y offset",
|
||
"backgroundOpacity": "Background opacity",
|
||
"opacity": "Opacity",
|
||
"help": "Help",
|
||
"openHelp": "Open help"
|
||
},
|
||
"settings": {
|
||
"title": "Settings",
|
||
"layout": "Layout",
|
||
"floatingMenu": "Floating menu",
|
||
"floatingMenuParticleOnly": "Select a particle system first",
|
||
"parameterPanelPosition": "Parameter panel position",
|
||
"panelOnRight": "Show parameter panel on the right",
|
||
"history": "History",
|
||
"maxUndo": "Maximum undo steps",
|
||
"canvasGuides": "Canvas guides",
|
||
"emitter": "Emitter point",
|
||
"bones": "Bone links",
|
||
"bonePointSize": "Bone point size",
|
||
"boneAxisSize": "Axis size",
|
||
"skinMesh": "Skin mesh",
|
||
"enableTicks": "Show ticks",
|
||
"tickFontSize": "Tick text size",
|
||
"tickWidth": "Tick line width",
|
||
"axisColor": "Axis color",
|
||
"showAxisLabels": "Show tick values",
|
||
"unsavedPrompt": "Prompt for unsaved changes",
|
||
"showProjectSize": "Show configuration storage usage",
|
||
"cacheNote": "Settings are saved automatically in this browser"
|
||
},
|
||
"config": {
|
||
"title": "Configuration",
|
||
"save": "Save Config",
|
||
"saveTitle": "Save configuration to browser cache",
|
||
"load": "Load Config",
|
||
"loadTitle": "Load an editor configuration file",
|
||
"presets": "Preset list",
|
||
"selectPreset": "Select preset",
|
||
"noPresets": "No presets",
|
||
"saved": "Configuration saved locally",
|
||
"loading": "Loading configuration…",
|
||
"loaded": "Loaded: {name}",
|
||
"presetLoading": "Loading preset…",
|
||
"presetLoaded": "Preset loaded: {name}",
|
||
"presetNamingError": "{message}. Check the preset file name.",
|
||
"presetTransferTitle": "Load Preset",
|
||
"presetDownloading": "Downloading {file}…",
|
||
"presetParsing": "Parsing preset configuration…",
|
||
"presetRestoring": "Parsing and restoring preset resources…",
|
||
"presetComplete": "Preset loaded",
|
||
"presetListError": "Unable to read preset list",
|
||
"presetReadError": "Unable to read preset: {file}",
|
||
"local": {
|
||
"listTitle": "Configuration List",
|
||
"empty": "No configurations saved in this browser",
|
||
"saveTitle": "Save configuration to browser cache",
|
||
"name": "Configuration name",
|
||
"namePlaceholder": "For example: Firework effect",
|
||
"load": "Load",
|
||
"loadHint": "Double-click to load",
|
||
"download": "Download",
|
||
"delete": "Delete",
|
||
"downloadCurrent": "Download Current Configuration",
|
||
"downloadAll": "Download All Configurations",
|
||
"loadAll": "Load All Configurations",
|
||
"loadAllConfirm": "Import {count} configuration files? Existing configurations with the same names will be overwritten.",
|
||
"loadAllDone": "Loaded {count} configurations from files",
|
||
"loadAllPartial": "Imported {imported} configurations; {failed} files failed",
|
||
"overwriteSave": "“{name}” already exists. Overwrite it?",
|
||
"loadOverwrite": "Loading “{name}” will replace the current scene and discard unsaved changes. Continue?",
|
||
"deleteConfirm": "Delete “{name}”?",
|
||
"nameRequired": "Enter a configuration name",
|
||
"nameInvalid": "The name cannot contain \\ / : * ? \" < > |",
|
||
"storageUnavailable": "Browser local storage is unavailable",
|
||
"saved": "Saved to browser: {name}",
|
||
"loaded": "Loaded from browser: {name}",
|
||
"deleted": "Deleted browser configuration: {name}",
|
||
"downloadEmpty": "No configurations to download",
|
||
"downloaded": "Downloaded: {name}"
|
||
}
|
||
},
|
||
"curve": {
|
||
"bezierHint": "Drag square handles · Double-click empty space to add · Double-click a node to delete",
|
||
"linearHint": "Double-click empty space to add · Double-click a node to delete · Drag nodes to adjust",
|
||
"resetTitle": "Restore default curve"
|
||
},
|
||
"gradient": {
|
||
"addTitle": "Double-click the color bar to add a stop",
|
||
"color": "Stop color",
|
||
"colorValue": "Stop color value",
|
||
"position": "Stop position",
|
||
"addMiddle": "Add color in the middle",
|
||
"delete": "Delete selected stop",
|
||
"hint": "Double-click to add · Drag a stop to move · Double-click a stop to delete"
|
||
},
|
||
"attributeControl": {
|
||
"angleOffset": "Angle offset",
|
||
"value": "Value",
|
||
"lower": "Min",
|
||
"upper": "Max",
|
||
"rangeLower": "Range min",
|
||
"rangeUpper": "Range max",
|
||
"curveInput": "Curve input →",
|
||
"direction": "Emission direction"
|
||
},
|
||
"pivot": {
|
||
"title": "Texture Pivot",
|
||
"zoomOut": "Zoom out",
|
||
"zoomIn": "Zoom in",
|
||
"expand": "Open full-screen pivot editor",
|
||
"interaction": "Click/drag to set pivot · Right-drag to pan · Scroll to zoom",
|
||
"previewAlt": "Pivot preview",
|
||
"noImage": "No image selected",
|
||
"resetCenter": "Center (50%, 50%)",
|
||
"coordinates": "Pivot coordinates (%)",
|
||
"rotationTest": "Pivot rotation test",
|
||
"static": "Static",
|
||
"spin": "Spin",
|
||
"swing": "Swing",
|
||
"rotationAlt": "Rotation test",
|
||
"topLeft": "Top left",
|
||
"top": "Top",
|
||
"topRight": "Top right",
|
||
"left": "Left",
|
||
"center": "Center",
|
||
"right": "Right",
|
||
"bottomLeft": "Bottom left",
|
||
"bottom": "Bottom",
|
||
"bottomRight": "Bottom right"
|
||
},
|
||
"image": {
|
||
"chooseSequence": "Choose sequence images",
|
||
"chooseLocal": "Choose local image",
|
||
"subfolder": "Subfolder",
|
||
"name": "Name",
|
||
"restore": "Restore {name}",
|
||
"deleteResource": "Delete image resource",
|
||
"imageMode": "Image mode",
|
||
"fixed": "Single image",
|
||
"sequence": "Sequence",
|
||
"playbackMode": "Playback",
|
||
"onceHide": "Once, hide at end",
|
||
"onceHold": "Once, hold last frame",
|
||
"loopForward": "Loop forward",
|
||
"loopReverse": "Loop reverse",
|
||
"playbackFps": "Playback FPS",
|
||
"chooseSequenceMulti": "Choose sequence images (multiple)",
|
||
"weight": "Weight %",
|
||
"unlockWeight": "Unlock weight",
|
||
"lockWeight": "Lock current weight",
|
||
"pivot": "Texture Pivot",
|
||
"collapsePivot": "Collapse pivot editor",
|
||
"expandPivot": "Expand pivot editor",
|
||
"pivotModal": "Full-screen texture pivot editor",
|
||
"pivotModalDesc": "Click or drag on the texture to set the exact particle rotation center",
|
||
"pivotZoomHint": "Zoom from 100% to 400% to align tips or roots precisely:",
|
||
"confirmPivot": "Apply and save pivot",
|
||
"noSequence": "No sequence selected",
|
||
"firstFrame": "Frame 1",
|
||
"firstImage": "first image",
|
||
"lastImage": "last image",
|
||
"pivotOn": "Enabled: X {x}% | Y {y}%",
|
||
"pivotOff": "Disabled, using image center (50%, 50%)",
|
||
"pivotCustom": "Custom pivot: X {x}% | Y {y}%",
|
||
"frameCountOne": "1 frame · {name}",
|
||
"frameCountMany": "{count} frames · {first} → {last}",
|
||
"sequenceSelected": "{count} frames selected, playing {first} to {last}"
|
||
},
|
||
"timeline": {
|
||
"play": "Play (D)",
|
||
"pause": "Pause (D)",
|
||
"toStart": "Go to first frame (S)",
|
||
"previous": "Previous frame",
|
||
"next": "Next frame",
|
||
"toEnd": "Go to last frame",
|
||
"continuousLoop": "Continuous loop playback",
|
||
"abLoop": "Independent A/B range loop",
|
||
"abLoopShort": "AB Loop",
|
||
"abRange": "A/B loop range",
|
||
"playbackStart": "Custom playback start frame",
|
||
"playbackEnd": "Custom playback end frame",
|
||
"startFrame": "Playback start frame",
|
||
"endFrame": "Playback end frame",
|
||
"frame": "Frame",
|
||
"emission": "Emitting",
|
||
"particleLife": "Particles alive",
|
||
"spineAnimation": "Spine animation",
|
||
"ownerAnimation": "Owner animation",
|
||
"setOwnerAnimation": "Set the animation that owns this particle system",
|
||
"chooseOwnerAnimation": "Choose owner animation",
|
||
"animationName": "Animation name",
|
||
"renameAnimation": "Rename current animation",
|
||
"rename": "Rename",
|
||
"newAnimation": "+ New",
|
||
"keepOneAnimation": "At least one animation is required",
|
||
"spinePreview": "Spine preview animation",
|
||
"noSpineAnimation": "No Spine animation available",
|
||
"none": "None",
|
||
"systemName": "System {index}",
|
||
"dragLoopDuration": "Drag to change loop duration",
|
||
"dragEmissionDuration": "Drag to change emission duration",
|
||
"dragSpineStart": "Drag to change animation start time",
|
||
"noAnimationData": "No animation data",
|
||
"animationNameEmpty": "Animation name cannot be empty",
|
||
"animationNameDuplicate": "Animation name already exists",
|
||
"animationRenameFailed": "Unable to rename animation",
|
||
"zoomIn": "Zoom in",
|
||
"zoomOut": "Zoom out",
|
||
"zoomFit": "Fit",
|
||
"frameStatus": "Frame {current} / {total}"
|
||
},
|
||
"emission": {
|
||
"title": "Emission",
|
||
"reset": "Reset emission settings",
|
||
"stream": "Stream",
|
||
"burst": "Burst",
|
||
"normalStream": "Standard stream",
|
||
"loopStream": "Loop stream",
|
||
"rate": "Emission rate",
|
||
"duration": "Emission duration",
|
||
"loopDuration": "Emission duration (f)",
|
||
"generateStart": "Generate loop start animation",
|
||
"generateEnd": "Generate loop end animation",
|
||
"customDuration": "Custom duration",
|
||
"auto": "Auto {frames}f",
|
||
"startLoopDuration": "Loop start duration",
|
||
"endLoopDuration": "Loop end duration",
|
||
"loopWarning": "Bone and path following are unavailable in loop stream mode and will be reset when entering or leaving it.",
|
||
"burstCount": "Burst count",
|
||
"delay": "Delay",
|
||
"shapeTitle": "Emitter Shape",
|
||
"shapeReset": "Reset emitter shape settings",
|
||
"shape": "Shape",
|
||
"point": "Point",
|
||
"circle": "Circle",
|
||
"rect": "Rectangle",
|
||
"cone": "Cone",
|
||
"path": "Path",
|
||
"innerDiameter": "Inner diameter",
|
||
"outerDiameter": "Outer diameter",
|
||
"innerRadius": "Inner radius",
|
||
"outerRadius": "Outer radius",
|
||
"coneDirection": "Cone direction",
|
||
"coneAngle": "Cone opening angle",
|
||
"innerWidth": "Inner width",
|
||
"innerHeight": "Inner height",
|
||
"outerWidth": "Outer width",
|
||
"outerHeight": "Outer height",
|
||
"selectPath": "Spawn path",
|
||
"noPath": "No path (point emission)",
|
||
"birthDistribution": "Birth distribution",
|
||
"evenDistribution": "Even spacing",
|
||
"randomDistribution": "Random",
|
||
"emissionAngle": "Emission angle",
|
||
"radial": "Radial (outward)",
|
||
"pathNormal": "Path normal",
|
||
"pathTangent": "Path tangent",
|
||
"fixedAngle": "Fixed angle",
|
||
"baseAngle": "Base angle",
|
||
"randomRange": "Random range",
|
||
"showShape": "Show shape"
|
||
},
|
||
"attributes": {
|
||
"title": "Particle Attributes",
|
||
"reset": "Reset particle attribute settings",
|
||
"initialParams": "Initial particle values",
|
||
"initialLife": "Initial life",
|
||
"randomSample": "Random sample →",
|
||
"initialSpeed": "Initial speed",
|
||
"initialScale": "Initial scale",
|
||
"uniform": "Uniform",
|
||
"separateXY": "Separate XY",
|
||
"scaleX": "Scale X",
|
||
"scaleY": "Scale Y",
|
||
"initialRotation": "Initial rotation",
|
||
"lifecycleTitle": "Values over particle life",
|
||
"speedOverLife": "Speed over life",
|
||
"speedMultiplier": "Speed multiplier",
|
||
"lifeTo": "Lifetime →",
|
||
"scaleOverLife": "Scale over life",
|
||
"scaleMultiplier": "Scale multiplier",
|
||
"multiplierX": "Multiplier X",
|
||
"multiplierY": "Multiplier Y",
|
||
"rotationOverLife": "Rotation over life",
|
||
"rotationSpeed": "Rotation speed"
|
||
},
|
||
"appearance": {
|
||
"title": "Appearance & Resources",
|
||
"reset": "Reset appearance and resource settings",
|
||
"opacity": "Opacity",
|
||
"curveMode": "Curve mode",
|
||
"transparent": "0 (transparent)",
|
||
"opaque": "1 (opaque)",
|
||
"renderLayer": "Render layer (Spine slot)",
|
||
"top": "Topmost",
|
||
"spineSlot": "Spine slot",
|
||
"selectSpine": "Select Spine",
|
||
"noSpine": "No Spine available",
|
||
"noSlot": "No slot selected",
|
||
"reselect": "Reselect",
|
||
"selectSlot": "Select slot",
|
||
"searchSlots": "Search slots or attachments…",
|
||
"searchSlotsAria": "Search slots",
|
||
"emptySlot": "Empty slot",
|
||
"noMatchingSlots": "No matching slots",
|
||
"above": "Above slot image",
|
||
"below": "Below slot image",
|
||
"followAttachment": "Follow attachment visibility",
|
||
"previewOnly": "Render layer changes only affect the editor preview and are not exported.",
|
||
"imageResources": "Image Resources",
|
||
"addImage": "Add image resource",
|
||
"scale": "Scale",
|
||
"color": "Color",
|
||
"fixedColor": "Fixed color",
|
||
"randomColor": "Random color",
|
||
"lifetime": "Over lifetime",
|
||
"normal": "Normal",
|
||
"add": "Add",
|
||
"multiply": "Multiply",
|
||
"screen": "Screen",
|
||
"fixedColorValue": "Fixed color value",
|
||
"randomColorHint": "Each particle samples a color from the gradient at birth and keeps it for its lifetime",
|
||
"independentAlpha": "Independent opacity",
|
||
"off": "Off"
|
||
},
|
||
"renderLayer": {
|
||
"slotLabelAbove": "{spine} / {slot} · above image",
|
||
"slotLabelBelow": "{spine} / {slot} · below image",
|
||
"resolvedAbove": "Render above {slot} and below the following slot",
|
||
"resolvedBetween": "Render between {previous} and {slot}",
|
||
"warningNoSpine": "No loaded Spine resource. Particles are temporarily rendered on top.",
|
||
"warningNoSelection": "No Spine selected. Particles are temporarily rendered on top.",
|
||
"warningMissingSpine": "The target Spine no longer exists. Particles are temporarily rendered on top.",
|
||
"warningNotReady": "The target Spine is not ready. Particles are temporarily rendered on top.",
|
||
"warningMissingSlot": "The target slot no longer exists. Particles are temporarily rendered on top.",
|
||
"warningFirstSlot": "This is the first slot, so particles cannot render below it and are temporarily shown on top."
|
||
},
|
||
"export": {
|
||
"title": "Export Resources",
|
||
"reset": "Reset export resources",
|
||
"imagesPath": "Image path (Spine Images Path)",
|
||
"spineVersion": "Spine version",
|
||
"keyframeCurve": "Keyframe interpolation",
|
||
"linear": "Linear",
|
||
"smoothBezier": "Smooth Bézier",
|
||
"bezierHelp": "Smooth Bézier fits continuous motion within the error tolerance; birth, death, attachment changes, and jumps still use stepped keys.",
|
||
"spine38Help": "Spine 3.8 does not support per-channel array Bézier curves. Export converts them to tolerance-reduced piecewise linear keys.",
|
||
"fps": "Export FPS",
|
||
"omitFps": "Omit fps",
|
||
"fpsHelp": "Changing FPS preserves real animation duration. “Omit fps” only removes the Spine fps metadata.",
|
||
"integerFrames": "Integer frame alignment",
|
||
"bonePool": "Bone object pool",
|
||
"excludeEmpty": "Exclude empty animations",
|
||
"baking": "Recalculating and baking animation",
|
||
"exportJsonTitle": "Export Spine {version} JSON",
|
||
"preparing": "Preparing export…",
|
||
"exportJson": "Export Spine JSON",
|
||
"exportImagesTitle": "Download the images used by the current particle systems as a ZIP",
|
||
"organizingImages": "Collecting images…",
|
||
"exportImages": "Export images ZIP",
|
||
"generatingProject": "Generating project…",
|
||
"exportSpine": "Export .spine package",
|
||
"authorize": "Authorize this site",
|
||
"authorizeTitle": "Authorize this site in the local connector",
|
||
"refreshConnector": "Check connector again",
|
||
"refresh": "Refresh",
|
||
"recalculating": "Recalculating particle animation…",
|
||
"exported": "Exported Spine {version}: {systems} particle systems, {animations} animations, {bones} bones{warning}",
|
||
"resourceWarning": "; {count} resource warnings (export continued without missing images)",
|
||
"timeout": "Baking timed out. Ensure the page is still running and try again.",
|
||
"preparingProject": "Collecting images and calling local Spine…",
|
||
"projectExported": "Generated {fileName}: .spine project with {images} images, Spine {version}",
|
||
"collectingImages": "Collecting images used by the current particle systems…",
|
||
"imagesExported": "Generated {fileName}: {images} images in {folder}/",
|
||
"connectorChecking": "Checking the local Spine connector…",
|
||
"connectorOffline": "Local Spine connector is not running",
|
||
"spineNotFound": "Connector is running, but Spine was not found",
|
||
"notAuthorized": "Connector is running, but this site is not authorized",
|
||
"connectorReady": "Connector available · Spine ready",
|
||
"connectorBusy": "Recalculating and generating the Spine project",
|
||
"connectorGenerate": "Generate a Spine {version} project with the local Spine",
|
||
"unknown": "Unknown",
|
||
"checking": "Checking",
|
||
"offline": "Offline",
|
||
"notFound": "Spine not found",
|
||
"unauthorized": "Not authorized",
|
||
"projectTransferTitle": "Export Spine Package",
|
||
"projectTransferDetail": "Recalculating particle animation…",
|
||
"projectTransferDownload": "Spine project download started",
|
||
"generatingJson": "Generating Spine JSON…",
|
||
"preparingProjectFiles": "Preparing project images…",
|
||
"uploading": "Uploading data to the Spine connector…",
|
||
"spineProcessing": "Spine is converting the project…",
|
||
"downloadingProject": "Downloading the generated Spine project…",
|
||
"handingToBrowser": "Starting browser download…"
|
||
},
|
||
"transfer": {
|
||
"completed": "Completed",
|
||
"failed": "Operation failed"
|
||
},
|
||
"scene": {
|
||
"title": "Scene Objects",
|
||
"addParticle": "Add particle system",
|
||
"addParticleShort": "+ Particle",
|
||
"addCollider": "Add collider",
|
||
"addColliderShort": "+ Collider",
|
||
"addPath": "Add path",
|
||
"addPathShort": "+ Path",
|
||
"addSpine": "Add Spine",
|
||
"copyTitle": "Duplicate selected scene object",
|
||
"showParticle": "Show particle system",
|
||
"hideParticle": "Hide particle system",
|
||
"showCollider": "Show collider",
|
||
"hideCollider": "Hide collider",
|
||
"showPath": "Show path",
|
||
"hidePath": "Hide path",
|
||
"showSpine": "Show Spine",
|
||
"hideSpine": "Hide Spine",
|
||
"particle": "Particle",
|
||
"subEmitter": "Sub-emitter",
|
||
"collision": "Collision",
|
||
"path": "Path",
|
||
"deleteParticle": "Delete particle system",
|
||
"deleteCollider": "Delete collider",
|
||
"deletePath": "Delete path",
|
||
"deleteSpine": "Delete Spine",
|
||
"empty": "No scene objects",
|
||
"name": "Name",
|
||
"positionX": "Position X",
|
||
"positionY": "Position Y",
|
||
"offsetX": "Offset X",
|
||
"offsetY": "Offset Y",
|
||
"rotation": "Rotation",
|
||
"scaleX": "Scale X",
|
||
"scaleY": "Scale Y",
|
||
"warmupFrames": "Warm-up frames",
|
||
"seed": "Random seed",
|
||
"seedTitle": "Controls random attributes, resource selection, and modifier sampling",
|
||
"randomizeSeed": "Generate a new global random seed",
|
||
"seedHint": "Controls initial random values, resource selection, and modifier sampling. The same seed reproduces the same result.",
|
||
"colliderTitle": "Collider Properties",
|
||
"colliderName": "Collider name",
|
||
"type": "Type",
|
||
"circle": "Circle",
|
||
"ellipse": "Ellipse",
|
||
"rect": "Rectangle",
|
||
"polygon": "Polygon",
|
||
"custom": "Custom",
|
||
"enabled": "Enabled",
|
||
"xPosition": "X position",
|
||
"yPosition": "Y position",
|
||
"scaleXShort": "Scale X",
|
||
"scaleYShort": "Scale Y",
|
||
"radius": "Radius",
|
||
"radiusX": "X radius",
|
||
"radiusY": "Y radius",
|
||
"width": "Width",
|
||
"height": "Height",
|
||
"sides": "Sides",
|
||
"collisionResponse": "Collision response",
|
||
"physics": "Physics (bounce / friction)",
|
||
"pause": "Pause in place",
|
||
"destroy": "Destroy immediately",
|
||
"elasticity": "Elasticity (0-1)",
|
||
"friction": "Friction (0-1)",
|
||
"followPath": "Follow a path",
|
||
"targetPath": "Target path",
|
||
"notSelected": "(Not selected)",
|
||
"moveDuration": "Move duration (s)",
|
||
"followDirection": "Orient along path",
|
||
"moveProgressCurve": "Movement progress curve",
|
||
"moveProgressHelp": "X: elapsed / duration · Y: path progress (0 = start, 1 = end)",
|
||
"pathTitle": "Path Properties",
|
||
"pathName": "Path name",
|
||
"closedPath": "Closed path",
|
||
"pathColor": "Path color",
|
||
"pathHelp": "Controls:",
|
||
"pathHelpItems": [
|
||
"Double-click empty space or a curve to add an anchor",
|
||
"Double-click an anchor to delete it",
|
||
"Double-click, hold on the second click, and drag to create handles",
|
||
"Drag anchors to move them and handles to reshape the curve",
|
||
"Shift + handle drag: symmetric handles",
|
||
"Alt + handle drag: independent handles",
|
||
"Ctrl + click / box select: add nodes",
|
||
"Alt + click / box select: remove nodes",
|
||
"Alt + click empty space: clear selection",
|
||
"Move multiple selected anchors together"
|
||
],
|
||
"applyPresetShape": "Apply preset shape",
|
||
"choosePreset": "Choose preset…",
|
||
"square": "Square",
|
||
"star": "Star",
|
||
"applyPreset": "Apply preset",
|
||
"clearAnchors": "Clear anchors",
|
||
"panelHint": "Use the buttons above to create a scene object"
|
||
},
|
||
"modifiers": {
|
||
"title": "Modifiers",
|
||
"reset": "Reset modifiers",
|
||
"damping": "Damping",
|
||
"enableNoise": "Enable movement noise",
|
||
"strength": "Strength",
|
||
"noiseRange": "Wander range",
|
||
"noiseSpeed": "Time speed",
|
||
"noiseHint": "Strength controls influence · Wander range controls maximum offset · Time speed controls variation rate",
|
||
"enableGravity": "Enable gravity",
|
||
"gravityStrength": "Gravity strength",
|
||
"strengthMin": "Strength min",
|
||
"strengthMax": "Strength max",
|
||
"direction": "Direction",
|
||
"gravityOverLife": "Gravity over lifetime",
|
||
"windOverLife": "Wind over lifetime",
|
||
"axisStrength": "Y: strength 0–1",
|
||
"directionHint": "0° right · -90° down · Negative strength reverses direction",
|
||
"enableWind": "Enable wind",
|
||
"windStrength": "Wind strength",
|
||
"enableForceField": "Enable force field",
|
||
"centerX": "Center X",
|
||
"centerY": "Center Y",
|
||
"forceStrength": "Force strength",
|
||
"forceRadius": "Force radius",
|
||
"falloffMode": "Falloff",
|
||
"constant": "Constant",
|
||
"linearFalloff": "Linear (zero at edge)",
|
||
"inverseFalloff": "Inverse distance (strongest at center)",
|
||
"forceHint": "Positive attracts · Negative repels · Drag the force circle on the canvas",
|
||
"showShape": "Show shape",
|
||
"enableVortex": "Enable vortex",
|
||
"vortexHint": "Positive counter-clockwise · Negative clockwise",
|
||
"enableAttraction": "Enable attraction",
|
||
"attractionX": "Attraction point X",
|
||
"attractionY": "Attraction point Y",
|
||
"attractionRadius": "Arrival radius",
|
||
"attractionDuration": "Attraction duration",
|
||
"delay": "Delay",
|
||
"delayMode": "Delay mode",
|
||
"globalTime": "Global time",
|
||
"particleLife": "Per particle life",
|
||
"attractionPath": "Attraction path",
|
||
"straight": "Straight",
|
||
"attractionHint": "Starts attraction after the delay · Dies on reaching the red radius · Drag the attraction circle on the canvas",
|
||
"enableTrail": "Enable trail",
|
||
"trailImages": "Trail Images",
|
||
"addTrailImage": "Add trail image resource",
|
||
"trailRotation": "Rotation",
|
||
"trailBones": "Trail bones",
|
||
"trailRatio": "Trail ratio (%)",
|
||
"trailLength": "Trail length",
|
||
"randomRange": "Random range",
|
||
"lengthRatio": "Length ratio (%)",
|
||
"lengthMin": "Length min (%)",
|
||
"lengthMax": "Length max (%)",
|
||
"trailWidth": "Trail width",
|
||
"widthRatio": "Width ratio (%)",
|
||
"widthMin": "Width min (%)",
|
||
"widthMax": "Width max (%)",
|
||
"widthScale": "Width scale",
|
||
"followParticle": "Follow particle",
|
||
"lifeLengthCurve": "Length over lifetime",
|
||
"shapeCurve": "Shape curve (head to tail width)",
|
||
"colorMode": "Color mode",
|
||
"blendMode": "Blend mode",
|
||
"fixedColor": "Fixed color",
|
||
"alphaMode": "Opacity mode",
|
||
"opacity": "Opacity",
|
||
"gridRows": "Grid rows",
|
||
"gridCols": "Grid columns",
|
||
"trailHint": "Each particle creates a sibling trail bone group according to the resource ratio. Random length and width are fixed at birth and reproducible with the same seed.",
|
||
"enableFollow": "Enable emitter following",
|
||
"followMode": "Follow mode",
|
||
"noFollow": "None",
|
||
"followPath": "Follow path",
|
||
"selectedBone": "Selected bone",
|
||
"emitterAngleMode": "Emitter angle mode",
|
||
"fixedAngle": "Fixed angle",
|
||
"followMoveDirection": "Follow movement direction",
|
||
"moveProgressCurve": "Movement progress curve (0→1)",
|
||
"moveDuration": "Move duration (s)",
|
||
"followSpace": "Follow space",
|
||
"localSpace": "Local space (move emitter)",
|
||
"worldSpace": "World space (move spawn point)",
|
||
"moveDirection": "Movement direction",
|
||
"forward": "Forward (start → end)",
|
||
"reverse": "Reverse (end → start)",
|
||
"followOffset": "Start offset (0-1)",
|
||
"followSpaceHint": "Local space moves the entire emitter. World space moves only the spawn point; existing particles stay in world position.",
|
||
"followTarget": "Follow target: ",
|
||
"noValidBone": "No valid bone is bound. Select a bone in the Spine hierarchy first.",
|
||
"rebind": "Rebind",
|
||
"bind": "Bind",
|
||
"selectedBoneLabel": "Selected bone: ",
|
||
"boneLocalSpace": "Local space (follow bone)",
|
||
"boneWorldSpace": "World space (keep particle position)",
|
||
"offsetX": "Position offset X",
|
||
"offsetY": "Position offset Y",
|
||
"rotationOffset": "Rotation offset",
|
||
"scaleOffsetX": "Scale offset X",
|
||
"scaleOffsetY": "Scale offset Y",
|
||
"boneFollowHint": "The emitter follows only the selected Spine bone position. Particle transforms use the particle system settings and offsets above.",
|
||
"enableCollision": "Enable collision",
|
||
"collisionObjects": "Collision objects",
|
||
"colliderDisabled": "{name} (disabled)",
|
||
"clearCollider": "Remove collider {name}",
|
||
"addCollider": "Add a scene collider",
|
||
"noAvailableColliders": "No colliders available",
|
||
"noCollidersSelected": "No collider selected. Current particles will not collide.",
|
||
"available": "Available",
|
||
"disabled": "Disabled",
|
||
"collisionHint": "Only enabled scene colliders added here participate in this particle system's collisions.",
|
||
"enableSubEmitter": "Enable sub-emitters",
|
||
"triggerTiming": "Choose trigger event",
|
||
"birth": "Birth",
|
||
"death": "Death",
|
||
"collision": "Collision",
|
||
"chooseTarget": "Choose target particle system",
|
||
"noTarget": "None (particle system)",
|
||
"deleteSubEmitter": "Delete this sub-emitter",
|
||
"probability": "Trigger probability",
|
||
"collisionLimit": "Collision trigger limit",
|
||
"inherit": "Inherit",
|
||
"colorInheritMode": "Color inheritance",
|
||
"add": "Add",
|
||
"replace": "Replace",
|
||
"addSubEmitter": "+ Add sub-emitter",
|
||
"inheritNone": "None (default)",
|
||
"inheritAll": "All attributes",
|
||
"inheritColor": "Color",
|
||
"inheritScale": "Size",
|
||
"inheritRotation": "Rotation",
|
||
"inheritLife": "Lifetime"
|
||
},
|
||
"spine": {
|
||
"title": "Spine Properties",
|
||
"name": "Spine name",
|
||
"xPosition": "X position",
|
||
"yPosition": "Y position",
|
||
"rotation": "Rotation",
|
||
"scaleX": "Scale X",
|
||
"scaleY": "Scale Y",
|
||
"startTime": "Start time",
|
||
"resources": "Spine Resources",
|
||
"chooseFolder": "Choose folder and load",
|
||
"folderHint": "Reads JSON / SKEL, Atlas, and all textures from the folder. Assets can still be replaced individually below.",
|
||
"choose": "Choose",
|
||
"chooseMultiple": "Choose multiple",
|
||
"loading": "Loading…",
|
||
"load": "↧ Load",
|
||
"clear": "Clear",
|
||
"supportNote": "Supports Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · Runtime loaded on demand · Fully local",
|
||
"currentResource": "Current asset {version}",
|
||
"animations": "Spine Animations",
|
||
"noAnimations": "No animations available",
|
||
"timelineAnimation": "Timeline animation",
|
||
"no": "None",
|
||
"hierarchy": "Hierarchy",
|
||
"clearBoneTitle": "Click to clear bone selection",
|
||
"noBoneTitle": "No bone selected",
|
||
"clearBone": "Clear selected bone: {name}",
|
||
"currentBone": "Current bone: ",
|
||
"clearSlotTitle": "Click to clear slot selection",
|
||
"noSlotTitle": "No slot selected",
|
||
"clearSlot": "Clear selected slot: {name}",
|
||
"currentSlot": "Current slot: ",
|
||
"notSelected": "Not selected",
|
||
"expandAll": "Expand all",
|
||
"collapseAll": "Collapse all",
|
||
"bones": "Bones",
|
||
"slots": "Slots",
|
||
"notLoaded": "Spine not loaded",
|
||
"searchBones": "Search bones",
|
||
"searchBonesPlaceholder": "Search bone names…",
|
||
"clearSearch": "Clear search",
|
||
"clearBoneSearch": "Clear bone search",
|
||
"noMatchingBones": "No matching bones",
|
||
"expandChildren": "Expand child bones",
|
||
"collapseChildren": "Collapse child bones",
|
||
"notLoadedSlots": "Spine slots not loaded",
|
||
"searchSlots": "Search slots",
|
||
"searchSlotsPlaceholder": "Search slots or attachments…",
|
||
"clearSlotSearch": "Clear slot search",
|
||
"noMatchingSlots": "No matching slots",
|
||
"slotTitle": "{name} (bone: {bone}, attachment: {attachment})",
|
||
"empty": "Empty",
|
||
"textureSummary": "{count} textures: {names}",
|
||
"textureImages": "texture images",
|
||
"missingFolderAssets": "The selected folder is missing: {missing}",
|
||
"chooseAssets": "Select Spine data, Atlas, and all texture images"
|
||
},
|
||
"help": {
|
||
"title": "Help",
|
||
"subtitle": "Quick start from creating particles to saving and exporting",
|
||
"close": "Close help",
|
||
"closeShort": "Close (Esc)",
|
||
"quickStart": "Quick Start",
|
||
"stepCreate": "Create objects: use + Particle / + Collider / + Path / + Spine in Scene Objects.",
|
||
"stepEdit": "Edit particles: select a particle system, then adjust Emission → Emitter Shape → Particle Attributes → Appearance & Resources → Modifiers.",
|
||
"stepPreview": "Preview: play, pause, step, or scrub on the timeline. Parameter changes are recalculated automatically.",
|
||
"stepExport": "Save and export: Save Config keeps the project; Export Spine JSON / images ZIP / .spine package produces the deliverable.",
|
||
"quickNote": "Reset beside each section restores that section's defaults. Settings are saved automatically in this browser.",
|
||
"commonOps": "Common Actions",
|
||
"eye": "Visibility",
|
||
"eyeDesc": "Show or hide an object independently. Hidden particle systems are not exported.",
|
||
"copyDesc": "Duplicate the selected object for parameter comparisons.",
|
||
"backgroundDesc": "Upload a reference image and adjust its position and opacity for canvas preview only.",
|
||
"settingsDesc": "Manage layout, canvas guides, tick display, and other editor settings.",
|
||
"undoDesc": "Ctrl+Z undoes one step. The maximum history size is configurable.",
|
||
"spineBoneDesc": "Search and select bones in the hierarchy for emitter following.",
|
||
"shortcuts": "Shortcuts",
|
||
"undoShortcut": "Undo",
|
||
"saveShortcut": "Save config",
|
||
"panShortcut": "Pan canvas",
|
||
"translateShortcut": "Move tool",
|
||
"rotateShortcut": "Rotate tool",
|
||
"scaleShortcut": "Scale tool",
|
||
"playShortcut": "Play / pause",
|
||
"startShortcut": "Go to first frame",
|
||
"shortcutNote": "Click the canvas before using Q / W / E / R. Single-key shortcuts are disabled while typing in inputs.",
|
||
"modules": "Module Guide",
|
||
"configTitle": "Configuration",
|
||
"saveConfigDesc": "Save all scene objects and parameters to a project JSON file. Ctrl+S is supported.",
|
||
"loadConfigDesc": "Load a local configuration and restore the complete project.",
|
||
"presetDesc": "Choose a preset from the dropdown. Open the dropdown to refresh the list.",
|
||
"configScope": "Scope",
|
||
"configScopeDesc": "The project includes objects and parameters. Interface settings are stored separately in the browser.",
|
||
"sceneTitle": "Scene Objects",
|
||
"particleDesc": "The core object. Set position, offset, rotation, scale, and random seed. The same seed reproduces the same result.",
|
||
"colliderDesc": "Circle, ellipse, rectangle, polygon, or custom shape with physics, pause, destroy, and path-following responses.",
|
||
"pathDesc": "Bézier path with anchors, handles, closing, color, and preset shapes.",
|
||
"spineDesc": "Load Spine data, Atlas, and textures; browse bones and slots, and use them for emitter following.",
|
||
"sceneCommonDesc": "Objects can be hidden and duplicated independently. Hidden particle systems are not exported.",
|
||
"emissionDesc": "Streaming, burst, delay, and three-part loop streaming with start, loop, and end sections.",
|
||
"burstDesc": "Emit a fixed number of particles once.",
|
||
"delayDesc": "Wait time before emission starts, shown at the left edge of the particle bar.",
|
||
"loopNote": "Loop streaming does not support bone or path following and resets those settings when enabled.",
|
||
"shapeDesc": "Point, circle, rectangle, cone, or path spawn areas. Circle/cone use inner and outer radii; rectangles use inner and outer dimensions.",
|
||
"angleDesc": "Fixed, random, radial, path normal, or path tangent.",
|
||
"initialDesc": "Life, speed, scale, and rotation support fixed, random, and curve modes. Rotation can follow emission direction.",
|
||
"overLifeDesc": "Speed, scale, and rotation can be controlled by lifetime curves.",
|
||
"alphaDesc": "Opacity can be fixed or curved. Curve mode can follow export, linear, or Bézier.",
|
||
"imageDesc": "Single images or sequence frames, weighted image selection, pivots, colors, blend modes, and independent opacity.",
|
||
"sequenceDesc": "Playback can hide after one pass, hold the last frame, loop forward, or loop in reverse.",
|
||
"noiseDesc": "Adds movement noise with strength, range, and speed controls.",
|
||
"gravityDesc": "Gravity, wind, and lifetime strength curves.",
|
||
"forceDesc": "Global force field, vortex, attraction, and collision.",
|
||
"trailDesc": "Independent trail resources with bones, length, width, shape, color, and opacity curves.",
|
||
"followDesc": "The emitter can follow a path or a Spine bone.",
|
||
"collisionDesc": "Choose scene colliders and particle collision response.",
|
||
"exportDesc": "Configure image path, Spine version, keyframe curves, FPS, frame alignment, bone pool, and empty animations.",
|
||
"exportButtonsDesc": "Export Spine JSON, an images ZIP, or a complete .spine project through the connector.",
|
||
"connectorTitle": "Spine Connector",
|
||
"connectorIntro": "The connector sends generated JSON and images to a locally installed and activated Spine editor and converts them into an editable .spine project.",
|
||
"prerequisite": "Requirements",
|
||
"prerequisiteDesc": "Install and activate Spine, then start the desktop connector.",
|
||
"download": "Download",
|
||
"webSide": "Website",
|
||
"webSideDesc": "When the connector reports ready, click Export .spine package.",
|
||
"authorization": "First authorization",
|
||
"authorizationDesc": "Approve the website origin once. The connector stores the local allowlist.",
|
||
"pathSetup": "Application path",
|
||
"pathSetupDesc": "The connector detects Spine automatically. Set the application path manually if detection fails.",
|
||
"downloadResult": "Output",
|
||
"downloadResultDesc": "The downloaded ZIP contains the .spine project and image folder.",
|
||
"version": "Version",
|
||
"versionDesc": "The connector matches Spine 3.8–4.3 from the JSON version.",
|
||
"security": "Security",
|
||
"securityDesc": "The connector listens only on the local machine and deletes temporary conversion files.",
|
||
"differenceTitle": "Config vs. export",
|
||
"differenceDesc": "Save Config preserves editable objects and parameters. Export Spine JSON includes only visible particle systems and bakes collisions, following, trails, and sub-emitters into editable animation data."
|
||
},
|
||
"errors": {
|
||
"confirmLoopFollowEnter": "Enabling loop stream disables particle following, resets its settings, and disables warm-up frames. Continue?",
|
||
"confirmLoopFollowExit": "Leaving loop stream disables particle following and resets its settings. Continue?",
|
||
"invalidJson": "The configuration file is not valid JSON",
|
||
"invalidConfigFormat": "This is not a SpineParticle editor configuration",
|
||
"unsupportedConfigVersion": "Unsupported configuration version: {version}",
|
||
"missingScene": "The configuration is missing complete scene data",
|
||
"missingEmbeddedSpine": "The configuration does not contain reusable Spine source assets",
|
||
"chooseJsonConfig": "Choose a .json configuration file",
|
||
"settingsInvalidJson": "The cached settings are not valid JSON",
|
||
"settingsFormat": "This is not a SpineParticle settings cache",
|
||
"settingsVersion": "Unsupported settings version: {version}",
|
||
"settingsMissing": "The settings cache is missing settings",
|
||
"noExportableImages": "The visible particle systems have no exportable images",
|
||
"invalidZipPath": "Invalid ZIP file path",
|
||
"spineFileType": "Spine data must be .json or .skel",
|
||
"atlasFileType": "Atlas files must use .atlas",
|
||
"chooseTexture": "Choose at least one texture image",
|
||
"binaryParseFailed": "Spine binary parsing failed (4.3: {v43}; legacy: {v42})",
|
||
"invalidSpineJson": "Invalid Spine JSON format",
|
||
"unsupportedSpineJsonVersion": "Unsupported Spine JSON version. Supported versions: {versions}",
|
||
"unsupportedSpineDataVersion": "Unsupported Spine data version. Supported versions: {versions}",
|
||
"embeddedReadFailed": "Unable to read embedded Spine file: {name}",
|
||
"missingImageWarning": "Image “{file}” is missing or has unreadable dimensions. Its path was kept.",
|
||
"missingTrailImageWarning": "Trail image “{file}” is missing. Its path was kept.",
|
||
"emptyCacheWarning": "“{name}” has no baked frame cache.",
|
||
"readExportImageFailed": "Unable to read export image: {name}",
|
||
"connectorOffline": "Local Spine connector was not detected. Start the connector first.",
|
||
"connectorHttpError": "Spine connector returned HTTP {status}",
|
||
"invalidTrailUV": "Trail mesh “{name}” has invalid UV data",
|
||
"missingTrailVertices": "Trail mesh “{name}” has no vertex data",
|
||
"trailIndexOutOfRange": "Trail mesh “{name}” has an out-of-range triangle index",
|
||
"invalidTrailHull": "Trail mesh “{name}” has an invalid hull size",
|
||
"trailHullIndexOutOfRange": "Trail mesh “{name}” has an out-of-range hull edge index",
|
||
"invalidInfluenceCount": "Trail mesh “{name}” has an invalid bone influence count",
|
||
"missingBoneReference": "Trail mesh “{name}” references a missing bone",
|
||
"invalidWeight": "Trail mesh “{name}” contains invalid weights",
|
||
"weightSum": "Trail mesh “{name}” vertex weights do not sum to 1",
|
||
"vertexCountMismatch": "Trail mesh “{name}” vertex count does not match its UV count",
|
||
"invalidInherit": "Bone “{name}” has inherit value “{inherit}” incompatible with Spine {version} JSON",
|
||
"trailBoneParent": "Trail bone “{name}” must be a direct child of the particle system bone, not a bone chain",
|
||
"trailSlotEmpty": "Weighted trail slot “{name}” cannot use an empty attachment. Hide the bones with zero scale instead.",
|
||
"spine38Version": "Spine 3.8 export must identify its version as 3.8",
|
||
"spine38Inherit": "Spine 3.8 bone “{name}” must use transform instead of inherit",
|
||
"spine38SlotColor": "Spine 3.8 slot color timelines must use color / twoColor",
|
||
"spine38AttachmentName": "Spine 3.8 hidden attachment frames must explicitly write name: null",
|
||
"spine38RotationAngle": "Spine 3.8 rotation timelines must use angle",
|
||
"spine38Curve": "Spine 3.8 does not support Spine 4.x array curves",
|
||
"unsupportedExportVersion": "Unsupported export version. Supported Spine versions: {versions}",
|
||
"exportVersionMismatch": "Export version mismatch: expected Spine {expected}, JSON reports Spine {actual}",
|
||
"exportMissingBones": "Export result contains no bones",
|
||
"missingAtlasTexture": "Atlas texture was not selected: {name}"
|
||
}
|
||
}
|