Files
SpineParticlesWeb/src/i18n/locales/en.json
T
2026-10-31 11:48:29 +08:00

923 lines
41 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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}"
}
}