中英双语
This commit is contained in:
1 parent
ea26af26ee
commit
b98c0333e6
50 files changed
+4082
-2049
No files matched your search
@@ -0,0 +1,72 @@
|
||||
import { createI18n } from 'vue-i18n'
|
||||
import en from './locales/en.json'
|
||||
import zhCN from './locales/zh-CN.json'
|
||||
|
||||
export const SUPPORTED_LOCALES = [
|
||||
{ code: 'zh-CN', label: '中文' },
|
||||
{ code: 'en', label: 'English' },
|
||||
] as const
|
||||
|
||||
export type AppLocale = typeof SUPPORTED_LOCALES[number]['code']
|
||||
|
||||
const STORAGE_KEY = 'spine-particle.locale'
|
||||
|
||||
function isAppLocale(value: unknown): value is AppLocale {
|
||||
return SUPPORTED_LOCALES.some((locale) => locale.code === value)
|
||||
}
|
||||
|
||||
export function resolveAppLocale(saved: unknown, browserLanguages: readonly string[]): AppLocale {
|
||||
if (isAppLocale(saved)) return saved
|
||||
return browserLanguages.some((language) => language.toLowerCase().startsWith('zh')) ? 'zh-CN' : 'en'
|
||||
}
|
||||
|
||||
function detectInitialLocale(): AppLocale {
|
||||
let saved: string | null = null
|
||||
if (typeof window !== 'undefined') {
|
||||
try {
|
||||
saved = localStorage.getItem(STORAGE_KEY)
|
||||
} catch {
|
||||
// Storage can be unavailable in privacy modes.
|
||||
}
|
||||
}
|
||||
const languages = typeof navigator === 'undefined'
|
||||
? []
|
||||
: navigator.languages?.length
|
||||
? [...navigator.languages]
|
||||
: [navigator.language]
|
||||
return resolveAppLocale(saved, languages)
|
||||
}
|
||||
|
||||
const initialLocale = detectInitialLocale()
|
||||
|
||||
export const i18n = createI18n({
|
||||
legacy: false,
|
||||
locale: initialLocale,
|
||||
fallbackLocale: 'en',
|
||||
messages: {
|
||||
'zh-CN': zhCN,
|
||||
en,
|
||||
},
|
||||
})
|
||||
|
||||
export function setAppLocale(locale: AppLocale) {
|
||||
i18n.global.locale.value = locale
|
||||
if (typeof window !== 'undefined') {
|
||||
try {
|
||||
localStorage.setItem(STORAGE_KEY, locale)
|
||||
} catch {
|
||||
// Keep the current session when storage is unavailable.
|
||||
}
|
||||
}
|
||||
if (typeof document !== 'undefined') {
|
||||
document.documentElement.lang = locale
|
||||
document.title = i18n.global.t('app.title')
|
||||
}
|
||||
}
|
||||
|
||||
export function translate(key: string, named?: Record<string, unknown>) {
|
||||
return named ? i18n.global.t(key, named) : i18n.global.t(key)
|
||||
}
|
||||
|
||||
// Persist both automatic first-use detection and later manual changes.
|
||||
setAppLocale(initialLocale)
|
||||
@@ -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}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,857 @@
|
||||
{
|
||||
"app": {
|
||||
"title": "Spine粒子编辑器-Yeomai",
|
||||
"resizeTimeline": "拖动调整时间轴高度",
|
||||
"systems": "系统",
|
||||
"particlesBones": "粒子(骨骼)",
|
||||
"rootBone": "根骨骼",
|
||||
"hudTip": "滚轮缩放 · 左键拖动画布"
|
||||
},
|
||||
"language": {
|
||||
"label": "语言",
|
||||
"zhCN": "中文",
|
||||
"en": "English"
|
||||
},
|
||||
"common": {
|
||||
"close": "关闭",
|
||||
"reset": "重置",
|
||||
"add": "添加",
|
||||
"remove": "移除",
|
||||
"delete": "删除",
|
||||
"clear": "清除",
|
||||
"cancel": "取消",
|
||||
"confirm": "确定",
|
||||
"none": "无",
|
||||
"enabled": "启用",
|
||||
"disabled": "禁用",
|
||||
"fixed": "固定",
|
||||
"random": "随机",
|
||||
"curve": "曲线",
|
||||
"followExport": "跟随导出",
|
||||
"linear": "线性",
|
||||
"bezier": "贝塞尔",
|
||||
"above": "之上",
|
||||
"below": "之下",
|
||||
"left": "左侧",
|
||||
"right": "右侧",
|
||||
"seconds": "秒",
|
||||
"frames": "帧"
|
||||
},
|
||||
"toolbar": {
|
||||
"settings": "系统设置",
|
||||
"undo": "撤回上一步 (Ctrl+Z)",
|
||||
"pan": "拖动画布 (Q)",
|
||||
"translate": "位移 (W)",
|
||||
"rotate": "旋转 (E)",
|
||||
"scale": "缩放 (R)",
|
||||
"zoomIn": "放大",
|
||||
"zoomOut": "缩小",
|
||||
"fitView": "适配画布",
|
||||
"toggleGrid": "切换网格",
|
||||
"resetView": "重置视图",
|
||||
"background": "背景图",
|
||||
"backgroundSettings": "背景图显示设置",
|
||||
"changeBackground": "更换图像",
|
||||
"uploadBackground": "上传图像",
|
||||
"clearBackground": "清除背景",
|
||||
"noBackground": "未上传图像",
|
||||
"backgroundX": "背景图 X 偏移",
|
||||
"backgroundY": "背景图 Y 偏移",
|
||||
"backgroundOpacity": "背景图透明度",
|
||||
"opacity": "透明度",
|
||||
"help": "使用说明",
|
||||
"openHelp": "查看使用说明"
|
||||
},
|
||||
"settings": {
|
||||
"title": "系统设置",
|
||||
"layout": "界面布局",
|
||||
"parameterPanelPosition": "参数面板位置",
|
||||
"panelOnRight": "参数面板显示在右侧",
|
||||
"history": "操作历史",
|
||||
"maxUndo": "最大撤回步数",
|
||||
"canvasGuides": "画布辅助显示",
|
||||
"emitter": "发射点",
|
||||
"bones": "骨骼连线",
|
||||
"bonePointSize": "骨骼点绘制大小",
|
||||
"boneAxisSize": "坐标轴绘制大小",
|
||||
"skinMesh": "蒙皮网格",
|
||||
"enableTicks": "启用刻度",
|
||||
"tickFontSize": "刻度文字大小",
|
||||
"tickWidth": "刻度线粗细",
|
||||
"axisColor": "坐标轴颜色",
|
||||
"showAxisLabels": "显示刻度数值",
|
||||
"cacheNote": "整个系统设置会自动保存到当前浏览器"
|
||||
},
|
||||
"config": {
|
||||
"title": "配置管理",
|
||||
"save": "保存配置",
|
||||
"saveTitle": "保存全部编辑器配置 (Ctrl+S)",
|
||||
"load": "加载配置",
|
||||
"loadTitle": "加载本地编辑器配置",
|
||||
"presets": "预设列表",
|
||||
"selectPreset": "选择预设",
|
||||
"noPresets": "无预设文件",
|
||||
"saved": "配置已保存到本地",
|
||||
"loading": "正在加载配置…",
|
||||
"loaded": "已加载:{name}",
|
||||
"presetLoading": "正在加载预设…",
|
||||
"presetLoaded": "已加载预设:{name}",
|
||||
"presetNamingError": "{message},请检查预设文件命名",
|
||||
"presetTransferTitle": "加载预设",
|
||||
"presetDownloading": "正在下载 {file}…",
|
||||
"presetParsing": "正在解析预设配置…",
|
||||
"presetRestoring": "正在解析并恢复预设资源…",
|
||||
"presetComplete": "预设加载完成",
|
||||
"presetListError": "无法读取预设列表",
|
||||
"presetReadError": "无法读取预设:{file}"
|
||||
},
|
||||
"presets": {
|
||||
"particleSweep": "1.粒子扫过",
|
||||
"barBlocks": "2.长条方块",
|
||||
"forceTrail": "3.力场拖尾",
|
||||
"lightningSequence": "4.雷电序列帧",
|
||||
"texturePivot": "5.贴图轴点",
|
||||
"subEmitter": "6.子发射器"
|
||||
},
|
||||
"curve": {
|
||||
"bezierHint": "拖动方形手柄调整弧度 · 双击空白新建 · 双击节点删除",
|
||||
"linearHint": "双击空白新建 · 双击节点删除 · 拖动节点调整",
|
||||
"resetTitle": "恢复默认曲线"
|
||||
},
|
||||
"gradient": {
|
||||
"addTitle": "双击色带添加色标",
|
||||
"color": "色标颜色",
|
||||
"colorValue": "色标颜色值",
|
||||
"position": "色标位置",
|
||||
"addMiddle": "在中间新增颜色",
|
||||
"delete": "删除当前色标",
|
||||
"hint": "双击色带新增 · 拖动色标调整位置 · 双击色标删除"
|
||||
},
|
||||
"attributeControl": {
|
||||
"angleOffset": "角度偏移",
|
||||
"value": "数值",
|
||||
"lower": "下限",
|
||||
"upper": "上限",
|
||||
"rangeLower": "范围下限",
|
||||
"rangeUpper": "范围上限",
|
||||
"curveInput": "曲线输入 →",
|
||||
"direction": "发射方向"
|
||||
},
|
||||
"pivot": {
|
||||
"title": "贴图轴点",
|
||||
"zoomOut": "缩小",
|
||||
"zoomIn": "放大",
|
||||
"expand": "放大到全屏操作",
|
||||
"interaction": "左键点击/拖动设置轴点 · 右键拖动画布 · 滚轮缩放",
|
||||
"previewAlt": "轴点预览",
|
||||
"noImage": "未选择图片",
|
||||
"resetCenter": "复位居中 (50%, 50%)",
|
||||
"coordinates": "轴点坐标(%)",
|
||||
"rotationTest": "轴心旋转测试",
|
||||
"static": "静止",
|
||||
"spin": "自转",
|
||||
"swing": "摆动",
|
||||
"rotationAlt": "旋转测试",
|
||||
"topLeft": "左上",
|
||||
"top": "正上",
|
||||
"topRight": "右上",
|
||||
"left": "正左",
|
||||
"center": "正中",
|
||||
"right": "正右",
|
||||
"bottomLeft": "左下",
|
||||
"bottom": "正下·底部",
|
||||
"bottomRight": "右下"
|
||||
},
|
||||
"image": {
|
||||
"chooseSequence": "选择序列帧图片",
|
||||
"chooseLocal": "选择本地图片",
|
||||
"subfolder": "子文件夹",
|
||||
"name": "名称",
|
||||
"restore": "恢复 {name}",
|
||||
"deleteResource": "删除图片资源",
|
||||
"imageMode": "图片模式",
|
||||
"fixed": "固定",
|
||||
"sequence": "序列帧",
|
||||
"playbackMode": "播放模式",
|
||||
"onceHide": "单次-尾帧消失",
|
||||
"onceHold": "单次-尾帧固定",
|
||||
"loopForward": "正向循环",
|
||||
"loopReverse": "反向循环",
|
||||
"playbackFps": "播放帧率",
|
||||
"chooseSequenceMulti": "选择序列帧(多选)",
|
||||
"weight": "占比%",
|
||||
"unlockWeight": "解除占比锁定",
|
||||
"lockWeight": "锁定当前占比",
|
||||
"pivot": "贴图轴点",
|
||||
"collapsePivot": "收起轴点调整",
|
||||
"expandPivot": "展开轴点调整",
|
||||
"pivotModal": "贴图旋转轴点大图精修",
|
||||
"pivotModalDesc": "在下方贴图上任意点击或拖拽,精确设置粒子的旋转/摆动中心",
|
||||
"pivotZoomHint": "支持 100% ~ 400% 放大,精确对准尖端或根部:",
|
||||
"confirmPivot": "确定并保存轴点",
|
||||
"noSequence": "未选择序列帧",
|
||||
"firstFrame": "第 1 帧",
|
||||
"firstImage": "第一张图片",
|
||||
"lastImage": "最后一张图片",
|
||||
"pivotOn": "已开启:X {x}% | Y {y}%",
|
||||
"pivotOff": "未开启,默认围绕图片正中心 (50%, 50%)",
|
||||
"pivotCustom": "轴点已自定义:X {x}% | Y {y}%",
|
||||
"frameCountOne": "1 帧 · {name}",
|
||||
"frameCountMany": "{count} 帧 · {first} → {last}",
|
||||
"sequenceSelected": "已选择 {count} 帧,按 {first}-{last} 顺序播放"
|
||||
},
|
||||
"timeline": {
|
||||
"play": "播放 (D)",
|
||||
"pause": "暂停 (D)",
|
||||
"toStart": "回到第一帧 (S)",
|
||||
"previous": "前一帧",
|
||||
"next": "后一帧",
|
||||
"toEnd": "移动到最后一帧",
|
||||
"continuousLoop": "持续循环播放",
|
||||
"abLoop": "独立 A/B 区间循环",
|
||||
"abLoopShort": "AB 循环",
|
||||
"abRange": "AB 循环区间",
|
||||
"playbackStart": "自定义播放起始帧",
|
||||
"playbackEnd": "自定义播放结束帧",
|
||||
"startFrame": "播放起始帧",
|
||||
"endFrame": "播放结束帧",
|
||||
"frame": "帧",
|
||||
"emission": "持续发射",
|
||||
"particleLife": "粒子存在",
|
||||
"spineAnimation": "Spine 动画",
|
||||
"ownerAnimation": "所属动画",
|
||||
"setOwnerAnimation": "设置当前粒子系统所属的动画",
|
||||
"chooseOwnerAnimation": "选择所属动画",
|
||||
"animationName": "动画名称",
|
||||
"renameAnimation": "重命名当前动画",
|
||||
"rename": "重命名",
|
||||
"newAnimation": "+ 新增",
|
||||
"keepOneAnimation": "至少需要保留一个动画",
|
||||
"spinePreview": "Spine 预览动画",
|
||||
"noSpineAnimation": "无可用 Spine 动画",
|
||||
"none": "无",
|
||||
"systemName": "系统 {index}",
|
||||
"dragLoopDuration": "拖动循环段时长",
|
||||
"dragEmissionDuration": "拖动持续发射时长",
|
||||
"dragSpineStart": "拖动调整动画开始时间",
|
||||
"noAnimationData": "暂无可显示的动画数据",
|
||||
"animationNameEmpty": "动画名称不能为空",
|
||||
"animationNameDuplicate": "动画名称不能重复",
|
||||
"animationRenameFailed": "无法修改动画名称",
|
||||
"zoomIn": "放大",
|
||||
"zoomOut": "缩小",
|
||||
"zoomFit": "适中",
|
||||
"frameStatus": "帧 {current} / {total}"
|
||||
},
|
||||
"emission": {
|
||||
"title": "发射模式",
|
||||
"reset": "重置发射模式参数",
|
||||
"stream": "持续",
|
||||
"burst": "爆发",
|
||||
"normalStream": "常规持续",
|
||||
"loopStream": "循环持续",
|
||||
"rate": "发射速率",
|
||||
"duration": "发射时长",
|
||||
"loopDuration": "发射时长 (f)",
|
||||
"generateStart": "生成开始循环动画",
|
||||
"generateEnd": "生成结束循环动画",
|
||||
"customDuration": "指定时长",
|
||||
"auto": "自动 {frames}f",
|
||||
"startLoopDuration": "开始循环段时长",
|
||||
"endLoopDuration": "结束循环段时长",
|
||||
"loopWarning": "循环持续模式不支持骨骼跟随和路径跟随;进入或退出时会将粒子跟随设置恢复默认值。",
|
||||
"burstCount": "单次数量",
|
||||
"delay": "延迟时间",
|
||||
"shapeTitle": "发射器形状",
|
||||
"shapeReset": "重置发射器形状参数",
|
||||
"shape": "形状",
|
||||
"point": "点",
|
||||
"circle": "圆形",
|
||||
"rect": "矩形",
|
||||
"cone": "锥形",
|
||||
"path": "路径",
|
||||
"innerDiameter": "内径",
|
||||
"outerDiameter": "外径",
|
||||
"innerRadius": "内半径",
|
||||
"outerRadius": "外半径",
|
||||
"coneDirection": "锥形朝向",
|
||||
"coneAngle": "锥形开口角度",
|
||||
"innerWidth": "内宽",
|
||||
"innerHeight": "内高",
|
||||
"outerWidth": "外宽",
|
||||
"outerHeight": "外高",
|
||||
"selectPath": "选择路径",
|
||||
"noPath": "无路径(点发射)",
|
||||
"birthDistribution": "出生分布",
|
||||
"evenDistribution": "等间距固定分布",
|
||||
"randomDistribution": "随机分布",
|
||||
"emissionAngle": "发射角度",
|
||||
"radial": "径向(中心向外)",
|
||||
"pathNormal": "垂直于路径",
|
||||
"pathTangent": "沿路径方向",
|
||||
"fixedAngle": "固定角度",
|
||||
"baseAngle": "基准角度",
|
||||
"randomRange": "随机范围",
|
||||
"showShape": "显示形状"
|
||||
},
|
||||
"attributes": {
|
||||
"title": "粒子属性",
|
||||
"reset": "重置粒子属性参数",
|
||||
"initialParams": "粒子初始参数",
|
||||
"initialLife": "初始生命周期",
|
||||
"randomSample": "随机采样 →",
|
||||
"initialSpeed": "初始速度",
|
||||
"initialScale": "初始缩放",
|
||||
"uniform": "统一",
|
||||
"separateXY": "XY分离",
|
||||
"scaleX": "缩放 X",
|
||||
"scaleY": "缩放 Y",
|
||||
"initialRotation": "初始旋转",
|
||||
"lifecycleTitle": "粒子生命周期变化参数",
|
||||
"speedOverLife": "生命周期内速度",
|
||||
"speedMultiplier": "速度倍率",
|
||||
"lifeTo": "生命周期 →",
|
||||
"scaleOverLife": "生命周期内缩放",
|
||||
"scaleMultiplier": "缩放倍率",
|
||||
"multiplierX": "倍率 X",
|
||||
"multiplierY": "倍率 Y",
|
||||
"rotationOverLife": "生命周期内旋转",
|
||||
"rotationSpeed": "旋转速度"
|
||||
},
|
||||
"appearance": {
|
||||
"title": "外观与资源",
|
||||
"reset": "重置外观与资源参数",
|
||||
"opacity": "透明度",
|
||||
"curveMode": "曲线模式",
|
||||
"transparent": "0(透明)",
|
||||
"opaque": "1(不透明)",
|
||||
"renderLayer": "渲染层级(Spine 插槽)",
|
||||
"top": "最上层",
|
||||
"spineSlot": "Spine 插槽",
|
||||
"selectSpine": "请选择 Spine",
|
||||
"noSpine": "无可用 Spine",
|
||||
"noSlot": "尚未选择插槽",
|
||||
"reselect": "重新选择",
|
||||
"selectSlot": "选择插槽",
|
||||
"searchSlots": "搜索插槽或附件名称…",
|
||||
"searchSlotsAria": "搜索插槽",
|
||||
"emptySlot": "空插槽",
|
||||
"noMatchingSlots": "没有匹配的插槽",
|
||||
"above": "在此插槽图片之上",
|
||||
"below": "在此插槽图片之下",
|
||||
"followAttachment": "随插槽附件显隐",
|
||||
"previewOnly": "调整显示层级只影响编辑器预览,不影响导出数据。",
|
||||
"imageResources": "图片资源",
|
||||
"addImage": "新增图片资源",
|
||||
"scale": "缩放",
|
||||
"color": "颜色",
|
||||
"fixedColor": "固定色",
|
||||
"randomColor": "随机颜色",
|
||||
"lifetime": "生命周期",
|
||||
"normal": "正常",
|
||||
"add": "相加",
|
||||
"multiply": "相乘",
|
||||
"screen": "滤色",
|
||||
"fixedColorValue": "固定颜色值",
|
||||
"randomColorHint": "每个粒子出生时从色带随机取色,生命周期内保持不变",
|
||||
"independentAlpha": "独立透明度",
|
||||
"off": "关闭"
|
||||
},
|
||||
"renderLayer": {
|
||||
"slotLabelAbove": "{spine} / {slot} · 图片之上",
|
||||
"slotLabelBelow": "{spine} / {slot} · 图片之下",
|
||||
"resolvedAbove": "渲染在 {slot} 图片之上、其后插槽之下",
|
||||
"resolvedBetween": "渲染在 {previous} 与 {slot} 之间",
|
||||
"warningNoSpine": "没有已加载的 Spine,粒子临时显示在最上层。",
|
||||
"warningNoSelection": "尚未选择 Spine,粒子临时显示在最上层。",
|
||||
"warningMissingSpine": "目标 Spine 不存在,粒子临时显示在最上层。",
|
||||
"warningNotReady": "目标 Spine 未就绪,粒子临时显示在最上层。",
|
||||
"warningMissingSlot": "目标插槽不存在(资源可能已更换),粒子临时显示在最上层。",
|
||||
"warningFirstSlot": "这是第一个插槽,无法显示在其下方,粒子临时显示在最上层。"
|
||||
},
|
||||
"export": {
|
||||
"title": "导出设置",
|
||||
"reset": "重置导出设置",
|
||||
"imagesPath": "图片路径 (Spine Images Path)",
|
||||
"spineVersion": "Spine 版本",
|
||||
"keyframeCurve": "关键帧插值曲线",
|
||||
"linear": "线性 (Linear)",
|
||||
"smoothBezier": "平滑贝塞尔 (Smooth Bézier)",
|
||||
"bezierHelp": "平滑贝塞尔会在误差允许范围内拟合连续运动;出生、死亡、附件切换和突变仍使用阶跃关键帧。",
|
||||
"spine38Help": "Spine 3.8 不支持 4.x 的逐通道数组贝塞尔,导出时会转换为经过容差精简的分段线性关键帧。",
|
||||
"fps": "导出 FPS",
|
||||
"omitFps": "不写 fps",
|
||||
"fpsHelp": "修改 FPS 时保持动画实际秒数不变;“不写 fps”只省略 Spine 的 fps 元数据。",
|
||||
"integerFrames": "整数帧对齐",
|
||||
"bonePool": "骨骼对象池",
|
||||
"excludeEmpty": "排除无内容动画",
|
||||
"baking": "正在重新计算并烘焙动画",
|
||||
"exportJsonTitle": "导出 Spine {version} JSON",
|
||||
"preparing": "正在准备导出…",
|
||||
"exportJson": "导出Spine Json",
|
||||
"exportImagesTitle": "单独下载当前粒子系统使用的图片 ZIP",
|
||||
"organizingImages": "正在整理图片…",
|
||||
"exportImages": "导出 images 包",
|
||||
"generatingProject": "正在生成工程…",
|
||||
"exportSpine": "导出 .spine 包",
|
||||
"authorize": "授权当前网站",
|
||||
"authorizeTitle": "在本机连接器中授权当前网站",
|
||||
"refreshConnector": "重新检测连接器",
|
||||
"refresh": "刷新",
|
||||
"recalculating": "正在重新计算粒子动画…",
|
||||
"exported": "已导出 Spine {version}:{systems} 个粒子系统、{animations} 个动画、{bones} 根骨骼{warning}",
|
||||
"resourceWarning": ";{count} 条资源提示(缺图仍已导出)",
|
||||
"timeout": "重新计算动画超时,请确认页面仍在运行后重试",
|
||||
"preparingProject": "正在整理图片并调用本机 Spine…",
|
||||
"projectExported": "已生成 {fileName}:包含 .spine 工程和 {images} 张图片,Spine {version}",
|
||||
"collectingImages": "正在整理当前粒子系统使用的图片…",
|
||||
"imagesExported": "已生成 {fileName}:{folder}/ 内包含 {images} 张图片",
|
||||
"connectorChecking": "正在检测本地 Spine 连接器…",
|
||||
"connectorOffline": "本地 Spine 连接器未启动",
|
||||
"spineNotFound": "连接器已启动,但未找到 Spine",
|
||||
"notAuthorized": "连接器已启动,当前网站尚未授权",
|
||||
"connectorReady": "连接器可用 · Spine 已就绪",
|
||||
"connectorBusy": "正在重新计算并生成 Spine 工程",
|
||||
"connectorGenerate": "调用本机 Spine 自动生成 {version} 工程",
|
||||
"unknown": "未知",
|
||||
"checking": "检测中",
|
||||
"offline": "未启动",
|
||||
"notFound": "未找到 Spine",
|
||||
"unauthorized": "未授权",
|
||||
"projectTransferTitle": "导出 Spine 包",
|
||||
"projectTransferDetail": "正在重新计算粒子动画…",
|
||||
"projectTransferDownload": "Spine 工程包已开始下载",
|
||||
"generatingJson": "正在生成 Spine JSON…",
|
||||
"preparingProjectFiles": "正在整理工程图片…",
|
||||
"uploading": "正在上传数据到 Spine 连接器…",
|
||||
"spineProcessing": "Spine 正在转换工程,请稍候…",
|
||||
"downloadingProject": "正在下载生成的 Spine 工程包…",
|
||||
"handingToBrowser": "正在交给浏览器下载…"
|
||||
},
|
||||
"transfer": {
|
||||
"completed": "已完成",
|
||||
"failed": "操作失败"
|
||||
},
|
||||
"scene": {
|
||||
"title": "场景对象",
|
||||
"addParticle": "添加粒子系统",
|
||||
"addParticleShort": "+粒子",
|
||||
"addCollider": "添加碰撞体",
|
||||
"addColliderShort": "+碰撞",
|
||||
"addPath": "添加路径",
|
||||
"addPathShort": "+路径",
|
||||
"addSpine": "添加 Spine",
|
||||
"copyTitle": "复制当前选中的场景对象",
|
||||
"showParticle": "显示粒子系统",
|
||||
"hideParticle": "隐藏粒子系统",
|
||||
"showCollider": "显示碰撞体",
|
||||
"hideCollider": "隐藏碰撞体",
|
||||
"showPath": "显示路径",
|
||||
"hidePath": "隐藏路径",
|
||||
"showSpine": "显示 Spine",
|
||||
"hideSpine": "隐藏 Spine",
|
||||
"particle": "粒子",
|
||||
"subEmitter": "子发射器",
|
||||
"collision": "碰撞",
|
||||
"path": "路径",
|
||||
"deleteParticle": "删除粒子系统",
|
||||
"deleteCollider": "删除碰撞体",
|
||||
"deletePath": "删除路径",
|
||||
"deleteSpine": "删除 Spine",
|
||||
"empty": "场景中暂无对象",
|
||||
"name": "名称",
|
||||
"positionX": "位置X",
|
||||
"positionY": "位置Y",
|
||||
"offsetX": "偏移X",
|
||||
"offsetY": "偏移Y",
|
||||
"rotation": "旋转",
|
||||
"scaleX": "缩放X",
|
||||
"scaleY": "缩放Y",
|
||||
"seed": "随机种子",
|
||||
"seedTitle": "控制粒子系统内全部随机属性、资源选择与修改器随机采样",
|
||||
"randomizeSeed": "生成新的全局随机种子",
|
||||
"seedHint": "控制初始随机参数、资源选择和修改器随机采样;相同种子可复现相同效果",
|
||||
"colliderTitle": "碰撞体属性",
|
||||
"colliderName": "碰撞体名称",
|
||||
"type": "类型",
|
||||
"circle": "圆形",
|
||||
"ellipse": "椭圆",
|
||||
"rect": "矩形",
|
||||
"polygon": "多边形",
|
||||
"custom": "自定义",
|
||||
"enabled": "启用",
|
||||
"xPosition": "X 位置",
|
||||
"yPosition": "Y 位置",
|
||||
"scaleXShort": "缩放 X",
|
||||
"scaleYShort": "缩放 Y",
|
||||
"radius": "半径",
|
||||
"radiusX": "X 半径",
|
||||
"radiusY": "Y 半径",
|
||||
"width": "宽度",
|
||||
"height": "高度",
|
||||
"sides": "边数",
|
||||
"collisionResponse": "碰撞响应",
|
||||
"physics": "物理(弹跳/摩擦)",
|
||||
"pause": "暂停(停止不动)",
|
||||
"destroy": "消失(立即销毁)",
|
||||
"elasticity": "弹性 (0-1)",
|
||||
"friction": "摩擦 (0-1)",
|
||||
"followPath": "跟随路径移动",
|
||||
"targetPath": "目标路径",
|
||||
"notSelected": "(未选择)",
|
||||
"moveDuration": "移动时长(秒)",
|
||||
"followDirection": "方向沿路径",
|
||||
"moveProgressCurve": "移动进度曲线",
|
||||
"moveProgressHelp": "横轴:实时/移动时长 纵轴:路径进度(0=起点 → 1=终点)",
|
||||
"pathTitle": "路径属性",
|
||||
"pathName": "路径名称",
|
||||
"closedPath": "闭合路径",
|
||||
"pathColor": "路径颜色",
|
||||
"pathHelp": "操作说明:",
|
||||
"pathHelpItems": [
|
||||
"双击空白处/曲线:新建锚点",
|
||||
"双击锚点:删除节点",
|
||||
"双击第二下按住拖动:新建并拉出手柄",
|
||||
"拖动锚点移动位置,拖动手柄调整曲线",
|
||||
"Shift+拖动手柄:两侧完全对称",
|
||||
"Alt+拖动手柄:独立控制单侧",
|
||||
"Ctrl+点击/框选:加选节点",
|
||||
"Alt+点击/框选:减选节点",
|
||||
"Alt+单击空白处:清除全部选中",
|
||||
"选中多个节点后可整体拖动"
|
||||
],
|
||||
"applyPresetShape": "应用预设形状",
|
||||
"choosePreset": "选择预设...",
|
||||
"square": "方形",
|
||||
"star": "星形",
|
||||
"applyPreset": "应用预设",
|
||||
"clearAnchors": "清空锚点",
|
||||
"panelHint": "使用右上角按钮创建场景对象"
|
||||
},
|
||||
"modifiers": {
|
||||
"title": "修改器",
|
||||
"reset": "重置修改器参数",
|
||||
"damping": "阻尼",
|
||||
"enableNoise": "开启移动噪声",
|
||||
"strength": "强度",
|
||||
"noiseRange": "波动范围",
|
||||
"noiseSpeed": "时间流速",
|
||||
"noiseHint": "强度控制影响比例 · 波动范围控制最大偏移 · 时间流速控制变化速度",
|
||||
"enableGravity": "开启重力",
|
||||
"gravityStrength": "重力强度",
|
||||
"strengthMin": "强度 min",
|
||||
"strengthMax": "强度 max",
|
||||
"direction": "方向",
|
||||
"gravityOverLife": "生命周期内重力",
|
||||
"windOverLife": "生命周期内风力",
|
||||
"axisStrength": "纵轴:强度 0~1",
|
||||
"directionHint": "0° 向右 · -90° 向下 · 负强度会反转方向",
|
||||
"enableWind": "开启风力",
|
||||
"windStrength": "风力强度",
|
||||
"enableForceField": "开启力场",
|
||||
"centerX": "中心 X",
|
||||
"centerY": "中心 Y",
|
||||
"forceStrength": "力场强度",
|
||||
"forceRadius": "力场半径",
|
||||
"falloffMode": "衰减模式",
|
||||
"constant": "恒定(范围内力度不变)",
|
||||
"linearFalloff": "线性衰减(边缘为 0)",
|
||||
"inverseFalloff": "距离反比(中心最强)",
|
||||
"forceHint": "正数吸向中心 · 负数向外排斥 · 可在画布内拖动力场圆",
|
||||
"showShape": "显示形状",
|
||||
"enableVortex": "开启漩涡",
|
||||
"vortexHint": "正数逆时针 · 负数顺时针",
|
||||
"enableAttraction": "开启吸附",
|
||||
"attractionX": "吸附点 X",
|
||||
"attractionY": "吸附点 Y",
|
||||
"attractionRadius": "吸附半径",
|
||||
"attractionDuration": "吸附时长",
|
||||
"delay": "延迟时间",
|
||||
"delayMode": "延迟方式",
|
||||
"globalTime": "统一时间",
|
||||
"particleLife": "单粒子生命",
|
||||
"attractionPath": "吸附方式",
|
||||
"straight": "直线",
|
||||
"attractionHint": "延迟后从当前位置开始吸附 · 到达红色范围即死亡 · 可在画布内拖动吸附圆",
|
||||
"enableTrail": "开启拖尾",
|
||||
"trailImages": "拖尾独立图片",
|
||||
"addTrailImage": "增加拖尾图片资源",
|
||||
"trailRotation": "旋转",
|
||||
"trailBones": "拖尾骨骼数",
|
||||
"trailRatio": "拖尾比例 (%)",
|
||||
"trailLength": "拖尾长度",
|
||||
"randomRange": "随机范围",
|
||||
"lengthRatio": "长度比例 (%)",
|
||||
"lengthMin": "长度最小 (%)",
|
||||
"lengthMax": "长度最大 (%)",
|
||||
"trailWidth": "拖尾宽度",
|
||||
"widthRatio": "宽度比例 (%)",
|
||||
"widthMin": "宽度最小 (%)",
|
||||
"widthMax": "宽度最大 (%)",
|
||||
"widthScale": "宽度缩放",
|
||||
"followParticle": "跟随粒子",
|
||||
"lifeLengthCurve": "生命周期长度曲线",
|
||||
"shapeCurve": "形状曲线(首端 → 尾端宽度)",
|
||||
"colorMode": "颜色模式",
|
||||
"blendMode": "混合模式",
|
||||
"fixedColor": "固定颜色",
|
||||
"alphaMode": "透明度模式",
|
||||
"opacity": "透明度",
|
||||
"gridRows": "网格行数",
|
||||
"gridCols": "网格列数",
|
||||
"trailHint": "每个粒子按资源比例生成一组同级拖尾骨骼;随机长度与宽度在粒子出生时确定,相同种子可稳定复现",
|
||||
"enableFollow": "开启发射器跟随",
|
||||
"followMode": "跟随模式",
|
||||
"noFollow": "无",
|
||||
"followPath": "跟随路径",
|
||||
"selectedBone": "选中的骨骼",
|
||||
"emitterAngleMode": "发射器角度模式",
|
||||
"fixedAngle": "固定角度",
|
||||
"followMoveDirection": "跟随移动方向",
|
||||
"moveProgressCurve": "移动进度曲线 (0→1)",
|
||||
"moveDuration": "移动时长 (s)",
|
||||
"followSpace": "跟随空间",
|
||||
"localSpace": "局部空间(GEN 移动)",
|
||||
"worldSpace": "世界空间(粒子生成点移动)",
|
||||
"moveDirection": "移动方向",
|
||||
"forward": "正向(起点 → 终点)",
|
||||
"reverse": "反向(终点 → 起点)",
|
||||
"followOffset": "偏移起始点 (0-1)",
|
||||
"followSpaceHint": "局部空间会移动整个发射器;世界空间只移动新粒子的生成点,已出生粒子留在世界位置。",
|
||||
"followTarget": "跟随目标:",
|
||||
"noValidBone": "尚未绑定有效骨骼,请先在 Spine 层级树中选择骨骼。",
|
||||
"rebind": "重新绑定",
|
||||
"bind": "绑定",
|
||||
"selectedBoneLabel": "当前选中骨骼:",
|
||||
"boneLocalSpace": "本地空间(随骨骼移动)",
|
||||
"boneWorldSpace": "世界空间(粒子生成后保持位置)",
|
||||
"offsetX": "位移偏移 X",
|
||||
"offsetY": "位移偏移 Y",
|
||||
"rotationOffset": "旋转偏移",
|
||||
"scaleOffsetX": "缩放偏移 X",
|
||||
"scaleOffsetY": "缩放偏移 Y",
|
||||
"boneFollowHint": "发射器只跟随所选 Spine 骨骼的位置,不继承 Spine 的旋转或缩放;粒子变换使用粒子系统自身参数和上方偏移。",
|
||||
"enableCollision": "开启碰撞",
|
||||
"collisionObjects": "参与的碰撞对象",
|
||||
"colliderDisabled": "{name}(碰撞体已禁用)",
|
||||
"clearCollider": "清除碰撞对象 {name}",
|
||||
"addCollider": "加入场景碰撞对象",
|
||||
"noAvailableColliders": "没有可加入的碰撞对象",
|
||||
"noCollidersSelected": "未选择碰撞对象,当前粒子不会发生碰撞",
|
||||
"available": "可用",
|
||||
"disabled": "已禁用",
|
||||
"collisionHint": "只有已加入且启用的场景碰撞对象会参与当前粒子系统的碰撞",
|
||||
"enableSubEmitter": "开启子发射器",
|
||||
"triggerTiming": "选择触发时机",
|
||||
"birth": "出生",
|
||||
"death": "死亡",
|
||||
"collision": "碰撞",
|
||||
"chooseTarget": "选择目标粒子系统",
|
||||
"noTarget": "无(粒子系统)",
|
||||
"deleteSubEmitter": "删除该子发射器",
|
||||
"probability": "发射概率",
|
||||
"collisionLimit": "碰撞次数限制",
|
||||
"inherit": "继承",
|
||||
"colorInheritMode": "颜色继承方式",
|
||||
"add": "相加",
|
||||
"replace": "覆盖",
|
||||
"addSubEmitter": "+ 新增子发射器",
|
||||
"inheritNone": "无(默认值)",
|
||||
"inheritAll": "所有属性",
|
||||
"inheritColor": "颜色",
|
||||
"inheritScale": "大小",
|
||||
"inheritRotation": "旋转",
|
||||
"inheritLife": "生命周期"
|
||||
},
|
||||
"spine": {
|
||||
"title": "Spine 属性",
|
||||
"name": "Spine 名称",
|
||||
"xPosition": "X 位置",
|
||||
"yPosition": "Y 位置",
|
||||
"rotation": "旋转",
|
||||
"scaleX": "Scale X",
|
||||
"scaleY": "Scale Y",
|
||||
"startTime": "开始时间",
|
||||
"resources": "Spine 资源",
|
||||
"chooseFolder": "选择文件夹并加载",
|
||||
"folderHint": "一次读取文件夹中的 JSON / SKEL、Atlas 和全部纹理;仍可在下方单独替换资源。",
|
||||
"choose": "选择",
|
||||
"chooseMultiple": "选择(多选)",
|
||||
"loading": "加载中…",
|
||||
"load": "↧ 加载",
|
||||
"clear": "清除",
|
||||
"supportNote": "支持 Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · 对应版本运行时按需加载 · 本地离线",
|
||||
"currentResource": "当前资源 {version}",
|
||||
"animations": "Spine 动画",
|
||||
"noAnimations": "无可用动画",
|
||||
"timelineAnimation": "时间轴播放动画",
|
||||
"no": "无",
|
||||
"hierarchy": "层级树",
|
||||
"clearBoneTitle": "点击清除骨骼选择",
|
||||
"noBoneTitle": "当前未选择骨骼",
|
||||
"clearBone": "清除选中骨骼:{name}",
|
||||
"currentBone": "当前骨骼:",
|
||||
"clearSlotTitle": "点击清除插槽选择",
|
||||
"noSlotTitle": "当前未选择插槽",
|
||||
"clearSlot": "清除选中插槽:{name}",
|
||||
"currentSlot": "当前插槽:",
|
||||
"notSelected": "未选择",
|
||||
"expandAll": "全部展开",
|
||||
"collapseAll": "全部折叠",
|
||||
"bones": "骨骼",
|
||||
"slots": "插槽",
|
||||
"notLoaded": "未加载 Spine",
|
||||
"searchBones": "搜索骨骼",
|
||||
"searchBonesPlaceholder": "搜索骨骼名称…",
|
||||
"clearSearch": "清空搜索",
|
||||
"clearBoneSearch": "清空骨骼搜索",
|
||||
"noMatchingBones": "未找到匹配的骨骼",
|
||||
"expandChildren": "展开子骨骼",
|
||||
"collapseChildren": "折叠子骨骼",
|
||||
"notLoadedSlots": "未加载 Spine 插槽",
|
||||
"searchSlots": "搜索插槽",
|
||||
"searchSlotsPlaceholder": "搜索插槽或附件名称…",
|
||||
"clearSlotSearch": "清空插槽搜索",
|
||||
"noMatchingSlots": "未找到匹配的插槽",
|
||||
"slotTitle": "{name}(骨骼:{bone},附件:{attachment})",
|
||||
"empty": "空",
|
||||
"textureSummary": "{count} 张:{names}",
|
||||
"textureImages": "纹理图片",
|
||||
"missingFolderAssets": "所选文件夹缺少:{missing}",
|
||||
"chooseAssets": "请依次选择 Spine 数据、Atlas 和全部纹理图片"
|
||||
},
|
||||
"help": {
|
||||
"title": "使用说明",
|
||||
"subtitle": "从创建粒子到保存、导出的快速入门",
|
||||
"close": "关闭使用说明",
|
||||
"closeShort": "关闭 (Esc)",
|
||||
"quickStart": "快速开始",
|
||||
"stepCreate": "创建对象:在左侧“场景对象”中用 +粒子 / +碰撞 / +路径 / +Spine 添加场景对象。",
|
||||
"stepEdit": "编辑粒子:选中粒子系统,依次调整“发射模式 → 发射器形状 → 粒子属性 → 外观与资源 → 修改器”。",
|
||||
"stepPreview": "查看效果:底部时间轴可播放、暂停、逐帧或拖动;修改参数后会自动重新计算。",
|
||||
"stepExport": "保存与导出:用“保存配置”保留工程;“导出 Spine Json / images 包 / .spine 包”输出成品。",
|
||||
"quickNote": "每个模块组标题右侧的“重置”可恢复该组默认参数;系统设置会自动保存在当前浏览器。",
|
||||
"commonOps": "常用操作",
|
||||
"eye": "小眼睛",
|
||||
"eyeDesc": "单独显示/隐藏对象;隐藏的粒子系统不会被导出。",
|
||||
"copyDesc": "完整复制当前选中对象,方便对比不同参数。",
|
||||
"backgroundDesc": "上传参考图并调整位置和透明度,只用于画布预览。",
|
||||
"settingsDesc": "管理界面布局、辅助显示、刻度等,自动存入浏览器。",
|
||||
"undoDesc": "Ctrl+Z 撤回一步;最大步数可在系统设置中调整。",
|
||||
"spineBoneDesc": "在层级树搜索并选择骨骼,可用于粒子发射器跟随。",
|
||||
"shortcuts": "快捷键",
|
||||
"undoShortcut": "撤回上一步",
|
||||
"saveShortcut": "保存配置",
|
||||
"panShortcut": "拖动画布",
|
||||
"translateShortcut": "位移工具",
|
||||
"rotateShortcut": "旋转工具",
|
||||
"scaleShortcut": "缩放工具",
|
||||
"playShortcut": "播放 / 暂停",
|
||||
"startShortcut": "回到第一帧",
|
||||
"shortcutNote": "Q / W / E / R 需先点击画布;光标位于输入框时,单键快捷键不会触发。",
|
||||
"modules": "功能模块详解",
|
||||
"configTitle": "配置管理",
|
||||
"saveConfigDesc": "把当前全部场景对象和参数保存为工程 JSON 文件(也支持 Ctrl+S)。",
|
||||
"loadConfigDesc": "选择本地配置文件,恢复完整工程。",
|
||||
"presetDesc": "从下拉中选择预设快速套用;点击下拉刷新列表。",
|
||||
"configScope": "范围",
|
||||
"configScopeDesc": "配置包含对象与参数;界面和系统设置单独存于浏览器。",
|
||||
"sceneTitle": "场景对象",
|
||||
"particleDesc": "核心对象。可设置位置、偏移、旋转、缩放和随机种子;相同种子可复现相同效果。",
|
||||
"colliderDesc": "圆形/椭圆/矩形/多边形/自定义,支持物理弹跳、暂停、销毁,以及沿路径移动。",
|
||||
"pathDesc": "贝塞尔路径,支持锚点、控制手柄、闭合、颜色和预设形状。",
|
||||
"spineDesc": "加载 Spine 数据、Atlas 和纹理,浏览骨骼与插槽,并用于发射器跟随。",
|
||||
"sceneCommonDesc": "对象可独立显隐和复制;隐藏的粒子系统不会导出。",
|
||||
"emissionDesc": "持续发射、爆发、延迟,以及开始/循环/结束三段式循环持续。",
|
||||
"burstDesc": "一次性发射指定数量的粒子。",
|
||||
"delayDesc": "发射开始前的等待时间,对应粒子条左端。",
|
||||
"loopNote": "循环持续不支持骨骼和路径跟随,切换时会恢复跟随设置。",
|
||||
"shapeDesc": "点、圆形、矩形、锥形或路径出生区域。圆/锥支持内外半径,矩形支持内外宽高。",
|
||||
"angleDesc": "固定、随机、径向、路径法线或路径切线。",
|
||||
"initialDesc": "生命周期、速度、缩放和旋转支持固定、随机、曲线,旋转可跟随发射方向。",
|
||||
"overLifeDesc": "速度倍率、缩放倍率、旋转速度可用生命周期曲线控制。",
|
||||
"alphaDesc": "透明度支持固定或曲线;曲线模式可跟随导出、线性或贝塞尔。",
|
||||
"imageDesc": "单图或序列帧、多图权重随机、轴点、颜色、混合模式和独立透明度。",
|
||||
"sequenceDesc": "播放方式有单次隐藏、单次定格、正向循环、反向循环。",
|
||||
"noiseDesc": "产生抖动轨迹,并控制强度、范围和速度。",
|
||||
"gravityDesc": "重力、风力和生命周期强度曲线。",
|
||||
"forceDesc": "全局力场、漩涡、吸附和碰撞。",
|
||||
"trailDesc": "独立拖尾资源、骨骼数、长度、宽度、形状、颜色与透明度曲线。",
|
||||
"followDesc": "发射器可跟随路径或 Spine 骨骼。",
|
||||
"collisionDesc": "选择场景碰撞对象和粒子碰撞响应。",
|
||||
"exportDesc": "设置图片路径、Spine 版本、关键帧曲线、FPS、整数帧、骨骼池和空动画。",
|
||||
"exportButtonsDesc": "可导出 Spine JSON、images ZIP,或通过连接器生成 .spine 工程。",
|
||||
"connectorTitle": "Spine 连接器使用说明",
|
||||
"connectorIntro": "连接器把网页生成的 JSON 和图片交给本机已安装并激活的 Spine,转换成可编辑的 .spine 工程。",
|
||||
"prerequisite": "前置",
|
||||
"prerequisiteDesc": "电脑已安装并激活 Spine,并已启动桌面版连接器。",
|
||||
"download": "下载",
|
||||
"webSide": "网页端",
|
||||
"webSideDesc": "显示“连接器可用 · Spine 已就绪”后,点击“导出 .spine 包”。",
|
||||
"authorization": "首次授权",
|
||||
"authorizationDesc": "首次连接需核对网站来源并允许一次;本机会保存授权白名单。",
|
||||
"pathSetup": "路径设置",
|
||||
"pathSetupDesc": "连接器会自动检测 Spine;找不到时可手动指定应用路径。",
|
||||
"downloadResult": "下载结果",
|
||||
"downloadResultDesc": "得到 ZIP 包,内含 .spine 工程和图片目录。",
|
||||
"version": "版本",
|
||||
"versionDesc": "连接器按 JSON 版本自动匹配 Spine 3.8~4.3。",
|
||||
"security": "安全",
|
||||
"securityDesc": "仅监听本机地址,授权保存在连接器,临时文件转换后清理。",
|
||||
"differenceTitle": "配置与导出有什么区别?",
|
||||
"differenceDesc": "“保存配置”保存全部可继续编辑的对象和参数;“导出 Spine Json”只导出显示中的粒子系统,并把碰撞、跟随、拖尾和子发射器结果烘焙为独立动画数据。"
|
||||
},
|
||||
"errors": {
|
||||
"confirmLoopFollowEnter": "进入循环持续模式后,粒子跟随设置会失效并恢复默认值。是否继续?",
|
||||
"confirmLoopFollowExit": "退出循环持续模式后,粒子跟随设置会失效并恢复默认值。是否继续?",
|
||||
"invalidJson": "配置文件不是有效的 JSON",
|
||||
"invalidConfigFormat": "不是 SpineParticle 编辑器配置文件",
|
||||
"unsupportedConfigVersion": "暂不支持配置版本:{version}",
|
||||
"missingScene": "配置文件缺少完整场景数据",
|
||||
"missingEmbeddedSpine": "配置未包含可复用的 Spine 原始资源",
|
||||
"chooseJsonConfig": "请选择 .json 配置文件",
|
||||
"settingsInvalidJson": "系统设置缓存不是有效的 JSON",
|
||||
"settingsFormat": "不是 SpineParticle 编辑器系统设置缓存",
|
||||
"settingsVersion": "暂不支持系统配置版本:{version}",
|
||||
"settingsMissing": "系统设置缓存缺少 settings",
|
||||
"noExportableImages": "当前可见粒子系统没有可导出的图片",
|
||||
"invalidZipPath": "ZIP 文件路径无效",
|
||||
"spineFileType": "Spine 数据仅支持 .json 或 .skel",
|
||||
"atlasFileType": "图集文件仅支持 .atlas",
|
||||
"chooseTexture": "请至少选择一张纹理图片",
|
||||
"binaryParseFailed": "Spine 二进制解析失败(4.3:{v43};旧版:{v42})",
|
||||
"invalidSpineJson": "Spine JSON 文件格式无效",
|
||||
"unsupportedSpineJsonVersion": "Spine JSON 版本不受支持,仅支持 {versions}",
|
||||
"unsupportedSpineDataVersion": "Spine 数据版本不受支持,仅支持 {versions}",
|
||||
"embeddedReadFailed": "无法读取内嵌 Spine 文件:{name}",
|
||||
"missingImageWarning": "图片“{file}”缺失或尺寸不可读,已保留路径。",
|
||||
"missingTrailImageWarning": "拖尾图片“{file}”缺失,已保留路径。",
|
||||
"emptyCacheWarning": "“{name}”没有可用帧缓存。",
|
||||
"readExportImageFailed": "无法读取导出图片:{name}",
|
||||
"connectorOffline": "未检测到本地 Spine 连接器,请先启动连接器",
|
||||
"connectorHttpError": "Spine 连接器返回错误:HTTP {status}",
|
||||
"invalidTrailUV": "拖尾网格“{name}”的 UV 数据无效",
|
||||
"missingTrailVertices": "拖尾网格“{name}”缺少顶点数据",
|
||||
"trailIndexOutOfRange": "拖尾网格“{name}”的三角形索引越界",
|
||||
"invalidTrailHull": "拖尾网格“{name}”的外轮廓数量无效",
|
||||
"trailHullIndexOutOfRange": "拖尾网格“{name}”的外轮廓边索引越界",
|
||||
"invalidInfluenceCount": "拖尾网格“{name}”包含无效骨骼权重数量",
|
||||
"missingBoneReference": "拖尾网格“{name}”引用了不存在的骨骼",
|
||||
"invalidWeight": "拖尾网格“{name}”包含无效权重数据",
|
||||
"weightSum": "拖尾网格“{name}”的顶点权重之和不为 1",
|
||||
"vertexCountMismatch": "拖尾网格“{name}”的顶点数量与 UV 不一致",
|
||||
"invalidInherit": "骨骼“{name}”的 inherit 值“{inherit}”不符合 Spine {version} JSON 格式",
|
||||
"trailBoneParent": "拖尾骨骼“{name}”必须直接挂在粒子系统骨骼下,不能组成骨骼链",
|
||||
"trailSlotEmpty": "加权拖尾插槽“{name}”不能使用空附件,未出现或死亡阶段应将对应骨骼缩放设为 0",
|
||||
"spine38Version": "Spine 3.8 导出的版本标识必须为 3.8",
|
||||
"spine38Inherit": "Spine 3.8 骨骼“{name}”应使用 transform,不能使用 inherit",
|
||||
"spine38SlotColor": "Spine 3.8 插槽颜色时间轴必须使用 color / twoColor",
|
||||
"spine38AttachmentName": "Spine 3.8 附件时间轴的隐藏帧必须显式写入 name: null",
|
||||
"spine38RotationAngle": "Spine 3.8 旋转时间轴必须使用 angle",
|
||||
"spine38Curve": "Spine 3.8 不支持 4.x 数组曲线格式",
|
||||
"unsupportedExportVersion": "导出版本不受支持,仅支持 Spine {versions}",
|
||||
"exportVersionMismatch": "导出版本不一致:设置为 Spine {expected},JSON 标记为 Spine {actual}",
|
||||
"exportMissingBones": "导出结果缺少骨骼",
|
||||
"missingAtlasTexture": "Atlas 引用的纹理未选择:{name}"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user