[spine-utils.js (line 35)](/Users/tianmokeji/Desktop/特效/SpineViewer/SpineViewer/js/spine-utils.js:35) 统一拦截绝对路径、..、Windows 盘符、UNC、URI、控制字符和符号链接越界。 跨素材贴图只能使用已枚举、验证且位于 Eagle 素材目录内的文件。 [spine-render.js (line 62)](/Users/tianmokeji/Desktop/特效/SpineViewer/SpineViewer/js/spine-render.js:62) 已删除未经验证的路径备用拼接。 自动缩略图只写当前回调提供的 dest,不再调用接口改写同组素材。 已删除后台整组补刷进程及 relatedDataPaths。 [viewer/spine.html (line 482)](/Users/tianmokeji/Desktop/特效/SpineViewer/SpineViewer/viewer/spine.html:482) 的手动缩略图只针对当前素材,并核对素材 ID、文件名和扩展名。 当前素材已有自定义缩略图时,会提示替换后无法自动恢复并要求确认。 手动生成的中间文件改存系统临时目录,API 失败时不再直接写 Eagle 素材目录。 八种语言文案及 README 已同步。 处理历史日志遗留问题
82 lines
4.5 KiB
JSON
82 lines
4.5 KiB
JSON
{
|
||
"manifest": {
|
||
"app": {
|
||
"name": "SpineViewer"
|
||
}
|
||
},
|
||
"viewer": {
|
||
"title": "Spine Preview",
|
||
"skin": "Skin",
|
||
"play": "▶ Play",
|
||
"pause": "⏸ Pause",
|
||
"static": "▮ Still",
|
||
"staticLabel": "Still",
|
||
"playPauseTitle": "Play / pause (Space)",
|
||
"loop": "Loop",
|
||
"speed": "Speed",
|
||
"pma": "Premultiplied",
|
||
"pmaTitle": "For textures exported with Premultiplied Alpha (PMA)",
|
||
"background": "Background",
|
||
"backgroundTitle": "50×50 checkerboard that pans and zooms with the canvas and participates in blend modes",
|
||
"thumbnail": "Set current item thumbnail",
|
||
"thumbnailTitle": "Set the current frame as this item's 400×400 custom thumbnail",
|
||
"versionTitle": "Spine version",
|
||
"reloadTitle": "Reload folder",
|
||
"animationList": "Animation list",
|
||
"animations": "Animations",
|
||
"errorTitle": "Cannot preview",
|
||
"durationPlaceholder": "Duration --",
|
||
"keyframesLegend": "Blue ticks: keyframes",
|
||
"keyframesLegendTitle": "A blue tick marks a time where at least one bone, slot or constraint property has a keyframe",
|
||
"keyframesHint": "Blue ticks mark animation keyframes; hover a tick to see its time and frame",
|
||
"timePlaceholder": "0.00 / 0.00 s · 0 / 0 frames",
|
||
"staticPoseTitle": "Still pose · frame 1",
|
||
"keyframeTitle": "Keyframe · {time} · frame {frame}",
|
||
"timelineStatic": "Still · 1 frame",
|
||
"timelineDuration": "Duration {time} · {frames} frames",
|
||
"readoutStatic": "Still · 1 / 1 frames",
|
||
"readout": "{time} / {total} · {frame} / {totalFrames} frames",
|
||
"rulerStatic": "0 s (still)",
|
||
"seconds": "{value} s",
|
||
"imagePreview": "Image preview (no matching Spine assets found)",
|
||
"generating": "Generating and updating the Eagle thumbnail…",
|
||
"thumbUpdated": "Eagle thumbnail updated · {format} {size}KB",
|
||
"thumbWrittenNoRefresh": "Thumbnail written, but auto-refresh failed: {error}",
|
||
"recentered": "Canvas re-centered",
|
||
"pmaOn": "Premultiplied alpha on",
|
||
"pmaOff": "Premultiplied alpha off",
|
||
"pmaRemembered": "{state} · saved for this asset",
|
||
"pmaSaveFailed": "Toggled, but saving the setting failed: {error}",
|
||
"badgeFailed": "Failed to load the Spine badge",
|
||
"runtimeFailed": "Cannot load the Spine runtime: {file}",
|
||
"compoundName": "Eagle has not synced the compound extension yet; please reopen the library",
|
||
"txtRegistered": "This item is still registered as TXT. Regenerate the thumbnail in Eagle and reopen the library",
|
||
"apiHttp": "Eagle API returned HTTP {status}",
|
||
"noSkeletonForThumb": "No skeleton loaded; cannot generate a thumbnail",
|
||
"noItemId": "Cannot determine the Eagle item ID from the asset path",
|
||
"itemMismatch": "The preview file does not match the Eagle item; the thumbnail update was cancelled",
|
||
"replaceCustomThumbnailConfirm": "This item already has a custom thumbnail. Continuing will replace it, and the plugin cannot automatically restore the previous image. Continue?",
|
||
"thumbnailFailed": "Failed to generate the thumbnail: {error}",
|
||
"imageLoadFailed": "Failed to load the image",
|
||
"settingsNotReady": "Asset settings are not ready",
|
||
"noSkeletonFile": "Skeleton file not found",
|
||
"noSkeletonFileMsg": "Could not locate the Spine skeleton file (.skel / .skel.bytes / .json) that matches the selected file.\n\nPlease import the whole Spine export into Eagle.",
|
||
"noAtlas": "Atlas not found",
|
||
"noAtlasMsg": "Could not locate the matching .atlas / .atlas.txt file.",
|
||
"unsupportedVersion": "Unsupported version",
|
||
"unsupportedVersionMsg": "Unrecognized Spine version: {version}\nSupported versions: {list}",
|
||
"unknownVersion": "unknown",
|
||
"runtimeLoadFailed": "Failed to load the runtime",
|
||
"atlasLoadFailed": "Failed to load the atlas",
|
||
"emptySkeleton": "Empty skeleton data",
|
||
"emptySkeletonMsg": "No valid skeleton data could be read.",
|
||
"missingFile": "Missing file",
|
||
"missingFileMsg": "No file path parameter was provided.",
|
||
"fileNotExist": "File not found",
|
||
"loadFailed": "Failed to load",
|
||
"notSpineText": "This file is not a .atlas.txt or .skel.bytes Spine asset.",
|
||
"truncated256": "\n\n(only the first 256 KB is shown)",
|
||
"truncated1m": "\n\n(large file, only the first 1 MB is shown)"
|
||
}
|
||
}
|