中英双语
This commit is contained in:
1 parent
ea26af26ee
commit
b98c0333e6
50 files changed
+4082
-2049
No files matched your search
@@ -0,0 +1,857 @@
|
||||
{
|
||||
"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": "中文",
|
||||
"en": "English"
|
||||
},
|
||||
"common": {
|
||||
"close": "Close",
|
||||
"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",
|
||||
"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",
|
||||
"cacheNote": "Settings are saved automatically in this browser"
|
||||
},
|
||||
"config": {
|
||||
"title": "Configuration",
|
||||
"save": "Save Config",
|
||||
"saveTitle": "Save the complete editor configuration (Ctrl+S)",
|
||||
"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}"
|
||||
},
|
||||
"presets": {
|
||||
"particleSweep": "1. Particle Sweep",
|
||||
"barBlocks": "2. Bar Blocks",
|
||||
"forceTrail": "3. Force Field Trail",
|
||||
"lightningSequence": "4. Lightning Sequence",
|
||||
"texturePivot": "5. Texture Pivot",
|
||||
"subEmitter": "6. Sub-emitter"
|
||||
},
|
||||
"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 Settings",
|
||||
"reset": "Reset export settings",
|
||||
"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",
|
||||
"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 and resets its settings. 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}"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user