feat: spine exporter localize

This commit is contained in:
Myssal
2025-04-28 01:03:18 +07:00
parent 177434e503
commit c8ee4cf0c9
18 changed files with 1592 additions and 158 deletions

View File

@@ -494,7 +494,7 @@ namespace SpineViewer.Controls
{ {
logger.Fatal(ex.ToString()); logger.Fatal(ex.ToString());
logger.Fatal("Render task stopped"); logger.Fatal("Render task stopped");
MessagePopup.Error(ex.ToString(), "预览画面已停止渲染", Properties.Resources.msgBoxError); MessagePopup.Error(ex.ToString(), Properties.Resources.previewRenderStopped);
} }
finally finally
{ {

View File

@@ -52,7 +52,7 @@ namespace SpineViewer.Dialogs
if (e.Error != null) if (e.Error != null)
{ {
logger.Error(e.Error.ToString()); logger.Error(e.Error.ToString());
MessagePopup.Error(e.Error.ToString(), "执行出错", Properties.Resources.msgBoxError); MessagePopup.Error(e.Error.ToString(), Properties.Resources.runtimeError);
DialogResult = DialogResult.Abort; DialogResult = DialogResult.Abort;
} }
else if (e.Cancelled) else if (e.Cancelled)

View File

@@ -59,7 +59,7 @@ namespace SpineViewer
catch (Exception ex) catch (Exception ex)
{ {
logger.Fatal(ex.ToString()); logger.Fatal(ex.ToString());
MessagePopup.Error(ex.ToString(), "程序已崩溃", Properties.Resources.msgBoxError); MessagePopup.Error(ex.ToString(), Properties.Resources.programCrashed);
} }
} }

View File

@@ -69,6 +69,15 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 动画.
/// </summary>
internal static string animation {
get {
return ResourceManager.GetString("animation", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to atlas文件不存在. /// Looks up a localized string similar to atlas文件不存在.
/// </summary> /// </summary>
@@ -78,6 +87,24 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to atlas文件路径.
/// </summary>
internal static string atlasPath {
get {
return ResourceManager.GetString("atlasPath", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 基本信息.
/// </summary>
internal static string basicInfo {
get {
return ResourceManager.GetString("basicInfo", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 自定义. /// Looks up a localized string similar to 自定义.
/// </summary> /// </summary>
@@ -96,6 +123,33 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to [2] FFmpeg 基本参数.
/// </summary>
internal static string categoryFFmpegParameter {
get {
return ResourceManager.GetString("categoryFFmpegParameter", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [3] 格式参数.
/// </summary>
internal static string categoryFormatParameters {
get {
return ResourceManager.GetString("categoryFormatParameters", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [2] 帧序列参数.
/// </summary>
internal static string categoryFrameSequenceParameters {
get {
return ResourceManager.GetString("categoryFrameSequenceParameters", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to [1] 预览. /// Looks up a localized string similar to [1] 预览.
/// </summary> /// </summary>
@@ -105,6 +159,24 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to [1] 单帧画面.
/// </summary>
internal static string categorySingleFrame {
get {
return ResourceManager.GetString("categorySingleFrame", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [1] 视频参数.
/// </summary>
internal static string categoryVideoParameters {
get {
return ResourceManager.GetString("categoryVideoParameters", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 项,共 . /// Looks up a localized string similar to 项,共 .
/// </summary> /// </summary>
@@ -132,6 +204,33 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 调试.
/// </summary>
internal static string debug {
get {
return ResourceManager.GetString("debug", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 使用预览画面分辨率的情况下, 允许内容溢出到边缘和填充区域.
/// </summary>
internal static string descAllowContentOverflow {
get {
return ResourceManager.GetString("descAllowContentOverflow", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 小于该值的像素点会被认为是透明像素.
/// </summary>
internal static string descAlphaThreshold {
get {
return ResourceManager.GetString("descAlphaThreshold", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 相关联的 SpineListView. /// Looks up a localized string similar to 相关联的 SpineListView.
/// </summary> /// </summary>
@@ -141,6 +240,51 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 根据导出内容自动设置分辨率, 四周填充距离和内容溢出参数将会被忽略.
/// </summary>
internal static string descAutoResolution {
get {
return ResourceManager.GetString("descAutoResolution", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to -c:v, 要使用的编码器\n建议使用硬件加速, libaom-av1 速度非常非常非常慢.
/// </summary>
internal static string descAvifEncoder {
get {
return ResourceManager.GetString("descAvifEncoder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 要使用的背景色, 格式为 #RRGGBBAA.
/// </summary>
internal static string descBackgroundColor {
get {
return ResourceManager.GetString("descBackgroundColor", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to -crf, 取值范围 0-63, 建议范围 18-28, 默认取值 23, 数值越小则输出质量越高.
/// </summary>
internal static string descCRF {
get {
return ResourceManager.GetString("descCRF", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 使用 \&quot;ffmpeg -h encoder=&lt;编码器&gt;\&quot; 查看编码器支持的参数\n使用 \&quot;ffmpeg -h muxer=&lt;文件格式&gt;\&quot; 查看文件格式支持的参数.
/// </summary>
internal static string descCustomArgument {
get {
return ResourceManager.GetString("descCustomArgument", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 用于显示画面属性的属性页. /// Looks up a localized string similar to 用于显示画面属性的属性页.
/// </summary> /// </summary>
@@ -150,6 +294,123 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 导出图像的每英寸像素数,用于调整图像的物理尺寸.
/// </summary>
internal static string descDPI {
get {
return ResourceManager.GetString("descDPI", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 可以从模型列表查看动画时长, 如果小于 0, 则在逐个导出时每个模型使用各自的所有轨道动画时长最大值.
/// </summary>
internal static string descDuration {
get {
return ResourceManager.GetString("descDuration", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 是否将模型在同一个画面上导出单个文件,否则逐个导出模型.
/// </summary>
internal static string descExportSingle {
get {
return ResourceManager.GetString("descExportSingle", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to -f, 文件格式.
/// </summary>
internal static string descFileFormat {
get {
return ResourceManager.GetString("descFileFormat", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 与图像格式匹配的文件名后缀.
/// </summary>
internal static string descFileNameExtension {
get {
return ResourceManager.GetString("descFileNameExtension", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 文件名后缀.
/// </summary>
internal static string descFilenameSuffix {
get {
return ResourceManager.GetString("descFilenameSuffix", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 每秒画面数.
/// </summary>
internal static string descFPS {
get {
return ResourceManager.GetString("descFPS", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 帧文件的后缀,同时决定帧图像格式.
/// </summary>
internal static string descFrameFileExtension {
get {
return ResourceManager.GetString("descFrameFileExtension", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 当设置保留最后一帧时, 动图会更为连贯, 但是帧数可能比预期帧数多 1.
/// </summary>
internal static string descKeepLastFrame {
get {
return ResourceManager.GetString("descKeepLastFrame", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to -loop, 循环次数, 0 无限循环, 取值范围 [0, 65535].
/// </summary>
internal static string descLoopCount {
get {
return ResourceManager.GetString("descLoopCount", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to -lossless, 0 表示有损, 1 表示无损.
/// </summary>
internal static string descLoseless {
get {
return ResourceManager.GetString("descLoseless", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 画布外部的边缘距离 (Margin), 最终导出的分辨率需要加上这个边距.
/// </summary>
internal static string descMargin {
get {
return ResourceManager.GetString("descMargin", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 设置调色板使用的最大颜色数量, 越多则色彩保留程度越高.
/// </summary>
internal static string descMaxColor {
get {
return ResourceManager.GetString("descMaxColor", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 用于显示模型属性的组合属性页. /// Looks up a localized string similar to 用于显示模型属性的组合属性页.
/// </summary> /// </summary>
@@ -159,6 +420,105 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 逐个导出时可以留空,将逐个导出到模型自身所在目录.
/// </summary>
internal static string descOutputFolder {
get {
return ResourceManager.GetString("descOutputFolder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 画布内部的填充距离 (Padding), 导出的分辨率大小不会发生变化, 但是会留有四周空间.
/// </summary>
internal static string descPadding {
get {
return ResourceManager.GetString("descPadding", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to -pix_fmt, 要使用的像素格式.
/// </summary>
internal static string descPixelFormat {
get {
return ResourceManager.GetString("descPixelFormat", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to -profile, 预设配置.
/// </summary>
internal static string descPreset {
get {
return ResourceManager.GetString("descPreset", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 预览画面的视区参数,请在预览画面参数面板进行调整.
/// </summary>
internal static string descPreviewViewport {
get {
return ResourceManager.GetString("descPreviewViewport", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to -quality, 取值范围 0-100, 默认值 75.
/// </summary>
internal static string descQuality {
get {
return ResourceManager.GetString("descQuality", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 是否仅导出选中的模型,请在预览画面参数面板进行调整.
/// </summary>
internal static string descRenderSelected {
get {
return ResourceManager.GetString("descRenderSelected", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 是否将模型在同一个画面上导出单个文件,否则逐个导出模型.
/// </summary>
internal static string descResolution {
get {
return ResourceManager.GetString("descResolution", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 允许内容溢出.
/// </summary>
internal static string displayAllowContentOverflow {
get {
return ResourceManager.GetString("displayAllowContentOverflow", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 透明度阈值.
/// </summary>
internal static string displayAlphaThreshold {
get {
return ResourceManager.GetString("displayAlphaThreshold", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 自动分辨率.
/// </summary>
internal static string displayAutoResolution {
get {
return ResourceManager.GetString("displayAutoResolution", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 背景颜色. /// Looks up a localized string similar to 背景颜色.
/// </summary> /// </summary>
@@ -177,6 +537,51 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 自定义参数.
/// </summary>
internal static string displayCustomArgument {
get {
return ResourceManager.GetString("displayCustomArgument", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 编码器.
/// </summary>
internal static string displayEncoder {
get {
return ResourceManager.GetString("displayEncoder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 导出单个.
/// </summary>
internal static string displayExportSingle {
get {
return ResourceManager.GetString("displayExportSingle", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 文件格式.
/// </summary>
internal static string displayFileFormat {
get {
return ResourceManager.GetString("displayFileFormat", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 文件名后缀.
/// </summary>
internal static string displayFilenameSuffix {
get {
return ResourceManager.GetString("displayFilenameSuffix", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 水平翻转. /// Looks up a localized string similar to 水平翻转.
/// </summary> /// </summary>
@@ -195,6 +600,69 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 帧率.
/// </summary>
internal static string displayFPS {
get {
return ResourceManager.GetString("displayFPS", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 图像格式.
/// </summary>
internal static string displayImageFormat {
get {
return ResourceManager.GetString("displayImageFormat", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 保留最后一帧.
/// </summary>
internal static string displayKeepLastFrame {
get {
return ResourceManager.GetString("displayKeepLastFrame", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 循环次数.
/// </summary>
internal static string displayLoopCount {
get {
return ResourceManager.GetString("displayLoopCount", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 无损.
/// </summary>
internal static string displayLoseless {
get {
return ResourceManager.GetString("displayLoseless", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 四周边缘距离.
/// </summary>
internal static string displayMargin {
get {
return ResourceManager.GetString("displayMargin", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 调色板最大颜色数量.
/// </summary>
internal static string displayMaxColor {
get {
return ResourceManager.GetString("displayMaxColor", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 最大帧率. /// Looks up a localized string similar to 最大帧率.
/// </summary> /// </summary>
@@ -204,6 +672,60 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 输出文件夹.
/// </summary>
internal static string displayOutputFolder {
get {
return ResourceManager.GetString("displayOutputFolder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 四周填充距离.
/// </summary>
internal static string displayPadding {
get {
return ResourceManager.GetString("displayPadding", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 像素格式.
/// </summary>
internal static string displayPixelFormat {
get {
return ResourceManager.GetString("displayPixelFormat", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 预设.
/// </summary>
internal static string displayPreset {
get {
return ResourceManager.GetString("displayPreset", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 预览画面视区.
/// </summary>
internal static string displayPreviewViewport {
get {
return ResourceManager.GetString("displayPreviewViewport", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 质量.
/// </summary>
internal static string displayQuality {
get {
return ResourceManager.GetString("displayQuality", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 仅渲染选中. /// Looks up a localized string similar to 仅渲染选中.
/// </summary> /// </summary>
@@ -249,6 +771,15 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 时长.
/// </summary>
internal static string duration {
get {
return ResourceManager.GetString("duration", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 骨骼加载失败. /// Looks up a localized string similar to 骨骼加载失败.
/// </summary> /// </summary>
@@ -258,6 +789,105 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 文件版本.
/// </summary>
internal static string fileVersion {
get {
return ResourceManager.GetString("fileVersion", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 水平翻转.
/// </summary>
internal static string flipX {
get {
return ResourceManager.GetString("flipX", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 垂直翻转.
/// </summary>
internal static string flipY {
get {
return ResourceManager.GetString("flipY", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 文件夹 .
/// </summary>
internal static string folderNotExistPrefix {
get {
return ResourceManager.GetString("folderNotExistPrefix", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 不存在.
/// </summary>
internal static string folderNotExistSuffix {
get {
return ResourceManager.GetString("folderNotExistSuffix", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 无法解析颜色,请使用 #RRGGBBAA、#RRGGBB、#RGBA 或 #RGB 格式.
/// </summary>
internal static string formatExceptionParseColor {
get {
return ResourceManager.GetString("formatExceptionParseColor", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 无法解析颜色,请检查格式.
/// </summary>
internal static string formatExceptionParseColorError {
get {
return ResourceManager.GetString("formatExceptionParseColorError", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 无法解析颜色,请使用已知的颜色名称.
/// </summary>
internal static string formatExceptionUnknownColor {
get {
return ResourceManager.GetString("formatExceptionUnknownColor", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 帧.
/// </summary>
internal static string frame {
get {
return ResourceManager.GetString("frame", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 输出文件夹无效.
/// </summary>
internal static string invalidInputFolder {
get {
return ResourceManager.GetString("invalidInputFolder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 是否隐藏.
/// </summary>
internal static string isHidden {
get {
return ResourceManager.GetString("isHidden", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 已选择 . /// Looks up a localized string similar to 已选择 .
/// </summary> /// </summary>
@@ -294,6 +924,15 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 全轨道最大时长.
/// </summary>
internal static string maximumTrackLength {
get {
return ResourceManager.GetString("maximumTrackLength", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 错误信息. /// Looks up a localized string similar to 错误信息.
/// </summary> /// </summary>
@@ -330,6 +969,33 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 导出单个时必须提供输出文件夹.
/// </summary>
internal static string mustProvideOutputFolder {
get {
return ResourceManager.GetString("mustProvideOutputFolder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 名称.
/// </summary>
internal static string name {
get {
return ResourceManager.GetString("name", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 导出单个时导出时长不能为负数.
/// </summary>
internal static string negativeDuration {
get {
return ResourceManager.GetString("negativeDuration", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 链接已复制到剪贴板,请前往浏览器进行访问. /// Looks up a localized string similar to 链接已复制到剪贴板,请前往浏览器进行访问.
/// </summary> /// </summary>
@@ -348,6 +1014,24 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 位置.
/// </summary>
internal static string position {
get {
return ResourceManager.GetString("position", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 预览画面已停止渲染.
/// </summary>
internal static string previewRenderStopped {
get {
return ResourceManager.GetString("previewRenderStopped", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 已处理 . /// Looks up a localized string similar to 已处理 .
/// </summary> /// </summary>
@@ -357,6 +1041,15 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 程序已崩溃.
/// </summary>
internal static string programCrashed {
get {
return ResourceManager.GetString("programCrashed", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 确认移除所有 . /// Looks up a localized string similar to 确认移除所有 .
/// </summary> /// </summary>
@@ -384,6 +1077,24 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 渲染.
/// </summary>
internal static string render {
get {
return ResourceManager.GetString("render", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 资源目录.
/// </summary>
internal static string resourcesPath {
get {
return ResourceManager.GetString("resourcesPath", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to 语言已设为英语。立即重启应用程序吗?. /// Looks up a localized string similar to 语言已设为英语。立即重启应用程序吗?.
/// </summary> /// </summary>
@@ -402,6 +1113,33 @@ namespace SpineViewer.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to 执行出错.
/// </summary>
internal static string runtimeError {
get {
return ResourceManager.GetString("runtimeError", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 运行时版本.
/// </summary>
internal static string runtimeVersion {
get {
return ResourceManager.GetString("runtimeVersion", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 缩放比例.
/// </summary>
internal static string scale {
get {
return ResourceManager.GetString("scale", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to skel文件不存在. /// Looks up a localized string similar to skel文件不存在.
/// </summary> /// </summary>
@@ -410,5 +1148,68 @@ namespace SpineViewer.Properties {
return ResourceManager.GetString("skelNotExist", resourceCulture); return ResourceManager.GetString("skelNotExist", resourceCulture);
} }
} }
/// <summary>
/// Looks up a localized string similar to skel文件路径.
/// </summary>
internal static string skelPath {
get {
return ResourceManager.GetString("skelPath", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 皮肤.
/// </summary>
internal static string skin {
get {
return ResourceManager.GetString("skin", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 插槽.
/// </summary>
internal static string slot {
get {
return ResourceManager.GetString("slot", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 变换.
/// </summary>
internal static string transform {
get {
return ResourceManager.GetString("transform", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 预乘Alpha通道.
/// </summary>
internal static string usePremultipliedAlpha {
get {
return ResourceManager.GetString("usePremultipliedAlpha", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 需要提供有效的文件名后缀.
/// </summary>
internal static string validExtensionRequired {
get {
return ResourceManager.GetString("validExtensionRequired", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 需要提供有效的格式.
/// </summary>
internal static string validFormatRequired {
get {
return ResourceManager.GetString("validFormatRequired", resourceCulture);
}
}
} }
} }

View File

@@ -120,15 +120,27 @@
<data name="about" xml:space="preserve"> <data name="about" xml:space="preserve">
<value>About</value> <value>About</value>
</data> </data>
<data name="animation" xml:space="preserve">
<value>Animation</value>
</data>
<data name="atlasNotExist" xml:space="preserve"> <data name="atlasNotExist" xml:space="preserve">
<value>Atlas file doesn't exist.</value> <value>Atlas file doesn't exist.</value>
</data> </data>
<data name="atlasPath" xml:space="preserve">
<value>Atlas file path</value>
</data>
<data name="basicInfo" xml:space="preserve">
<value>Basic info</value>
</data>
<data name="categoryCustom" xml:space="preserve"> <data name="categoryCustom" xml:space="preserve">
<value>Custom</value> <value>Custom</value>
</data> </data>
<data name="categoryExport" xml:space="preserve"> <data name="categoryExport" xml:space="preserve">
<value>[0] Export</value> <value>[0] Export</value>
</data> </data>
<data name="categoryFormatParameters" xml:space="preserve">
<value>[3] Format parameters</value>
</data>
<data name="categoryPreview" xml:space="preserve"> <data name="categoryPreview" xml:space="preserve">
<value>[1] Preview</value> <value>[1] Preview</value>
</data> </data>
@@ -141,12 +153,18 @@
<data name="countInfoStatusSuffix" xml:space="preserve"> <data name="countInfoStatusSuffix" xml:space="preserve">
<value>in total.</value> <value>in total.</value>
</data> </data>
<data name="debug" xml:space="preserve">
<value>Debug</value>
</data>
<data name="descAssociatedSpineListView" xml:space="preserve"> <data name="descAssociatedSpineListView" xml:space="preserve">
<value>Associated SpineListView</value> <value>Associated SpineListView</value>
</data> </data>
<data name="descDisplayImageProperties" xml:space="preserve"> <data name="descDisplayImageProperties" xml:space="preserve">
<value>Property page for displaying image properties</value> <value>Property page for displaying image properties</value>
</data> </data>
<data name="descAvifEncoder" xml:space="preserve">
<value>-c:v: Video encoder to use. Hardware acceleration is recommended. Note: libaom-av1 is extremely slow.</value>
</data>
<data name="descModelAttributes" xml:space="preserve"> <data name="descModelAttributes" xml:space="preserve">
<value>Model attributes display page.</value> <value>Model attributes display page.</value>
</data> </data>
@@ -156,6 +174,9 @@
<data name="displayCenter" xml:space="preserve"> <data name="displayCenter" xml:space="preserve">
<value>Center point of screen</value> <value>Center point of screen</value>
</data> </data>
<data name="displayEncoder" xml:space="preserve">
<value>Encoder</value>
</data>
<data name="displayFlipHorizontal" xml:space="preserve"> <data name="displayFlipHorizontal" xml:space="preserve">
<value>Flip horizontal</value> <value>Flip horizontal</value>
</data> </data>
@@ -180,9 +201,33 @@
<data name="displayZoom" xml:space="preserve"> <data name="displayZoom" xml:space="preserve">
<value>Zoom</value> <value>Zoom</value>
</data> </data>
<data name="duration" xml:space="preserve">
<value>Duration</value>
</data>
<data name="errorLoadSkeleton" xml:space="preserve"> <data name="errorLoadSkeleton" xml:space="preserve">
<value>Failed to load skeleton</value> <value>Failed to load skeleton</value>
</data> </data>
<data name="fileVersion" xml:space="preserve">
<value>File version</value>
</data>
<data name="flipX" xml:space="preserve">
<value>FlipX</value>
</data>
<data name="flipY" xml:space="preserve">
<value>FlipY</value>
</data>
<data name="formatExceptionParseColor" xml:space="preserve">
<value>Unable to parse color, please use #RRGGBBAA, #RRGGBB, #RGBA or #RGB format.</value>
</data>
<data name="formatExceptionParseColorError" xml:space="preserve">
<value>Color format is invalid. Please check the format.</value>
</data>
<data name="formatExceptionUnknownColor" xml:space="preserve">
<value>Color not recognized. Please use a valid color name.</value>
</data>
<data name="isHidden" xml:space="preserve">
<value>Is hidden</value>
</data>
<data name="itemCountPrefix" xml:space="preserve"> <data name="itemCountPrefix" xml:space="preserve">
<value>.</value> <value>.</value>
</data> </data>
@@ -195,6 +240,9 @@
<data name="loadAllSkeletonSuffix" xml:space="preserve"> <data name="loadAllSkeletonSuffix" xml:space="preserve">
<value>skeletons found. Do you want to load them all at once?</value> <value>skeletons found. Do you want to load them all at once?</value>
</data> </data>
<data name="maximumTrackLength" xml:space="preserve">
<value>Maximum Track Length</value>
</data>
<data name="msgBoxError" xml:space="preserve"> <data name="msgBoxError" xml:space="preserve">
<value>Error</value> <value>Error</value>
</data> </data>
@@ -207,15 +255,27 @@
<data name="msgBoxWarning" xml:space="preserve"> <data name="msgBoxWarning" xml:space="preserve">
<value>Warning</value> <value>Warning</value>
</data> </data>
<data name="name" xml:space="preserve">
<value>Name</value>
</data>
<data name="notifyCopyGithubLink" xml:space="preserve"> <data name="notifyCopyGithubLink" xml:space="preserve">
<value>Link copied to clipboard. Please open it in browser</value> <value>Link copied to clipboard. Please open it in browser</value>
</data> </data>
<data name="parameterError" xml:space="preserve"> <data name="parameterError" xml:space="preserve">
<value>Invalid Parameters</value> <value>Invalid Parameters</value>
</data> </data>
<data name="position" xml:space="preserve">
<value>Position</value>
</data>
<data name="previewRenderStopped" xml:space="preserve">
<value>Preview Render Stopped</value>
</data>
<data name="process" xml:space="preserve"> <data name="process" xml:space="preserve">
<value>Processed </value> <value>Processed </value>
</data> </data>
<data name="programCrashed" xml:space="preserve">
<value>Application has crashed</value>
</data>
<data name="removeAllItemPrefix" xml:space="preserve"> <data name="removeAllItemPrefix" xml:space="preserve">
<value>Remove all </value> <value>Remove all </value>
</data> </data>
@@ -225,13 +285,221 @@
<data name="removeItemConfirmSuffix" xml:space="preserve"> <data name="removeItemConfirmSuffix" xml:space="preserve">
<value> item(s)?</value> <value> item(s)?</value>
</data> </data>
<data name="render" xml:space="preserve">
<value>Render</value>
</data>
<data name="resourcesPath" xml:space="preserve">
<value>Resource Path</value>
</data>
<data name="restartPrompt" xml:space="preserve"> <data name="restartPrompt" xml:space="preserve">
<value>Language set to Simplified Chinese. Restart application now?</value> <value>Language set to Simplified Chinese. Restart application now?</value>
</data> </data>
<data name="restartTitle" xml:space="preserve"> <data name="restartTitle" xml:space="preserve">
<value>Application restart required!</value> <value>Application restart required!</value>
</data> </data>
<data name="runtimeError" xml:space="preserve">
<value>Runtime error</value>
</data>
<data name="runtimeVersion" xml:space="preserve">
<value>Runtime version</value>
</data>
<data name="scale" xml:space="preserve">
<value>Scale</value>
</data>
<data name="skelNotExist" xml:space="preserve"> <data name="skelNotExist" xml:space="preserve">
<value>Skel file doesn't exist.</value> <value>Skel file doesn't exist.</value>
</data> </data>
<data name="skelPath" xml:space="preserve">
<value>Skel file path</value>
</data>
<data name="skin" xml:space="preserve">
<value>Skin</value>
</data>
<data name="slot" xml:space="preserve">
<value>Slot</value>
</data>
<data name="transform" xml:space="preserve">
<value>Transform</value>
</data>
<data name="usePremultipliedAlpha" xml:space="preserve">
<value>UsePremultipliedAlpha</value>
</data>
<data name="descCRF" xml:space="preserve">
<value>-crf: Accepts values from 0 to 63. Recommended range is 1828 (default is 23). Lower values result in higher output quality</value>
</data>
<data name="displayPixelFormat" xml:space="preserve">
<value>Pixel format</value>
</data>
<data name="descPixelFormat" xml:space="preserve">
<value>-pix_fmt: Pixel format to use.</value>
</data>
<data name="displayLoopCount" xml:space="preserve">
<value>Loop count</value>
</data>
<data name="descLoopCount" xml:space="preserve">
<value>-loop: Number of loops. 0 for infinite loops. Valid range: [0, 65535].</value>
</data>
<data name="invalidInputFolder" xml:space="preserve">
<value>Invalid output folder</value>
</data>
<data name="folderNotExistPrefix" xml:space="preserve">
<value>Folder </value>
</data>
<data name="folderNotExistSuffix" xml:space="preserve">
<value>doesn't exist.</value>
</data>
<data name="mustProvideOutputFolder" xml:space="preserve">
<value>An output folder must be provided when exporting a single file.</value>
</data>
<data name="categoryFFmpegParameter" xml:space="preserve">
<value>[2] FFmpeg Basic Parameters</value>
</data>
<data name="displayFileFormat" xml:space="preserve">
<value>File format</value>
</data>
<data name="descFileFormat" xml:space="preserve">
<value>-f: Specify the output file format</value>
</data>
<data name="displayFilenameSuffix" xml:space="preserve">
<value>File extension</value>
</data>
<data name="descFilenameSuffix" xml:space="preserve">
<value>File extension</value>
</data>
<data name="displayOutputFolder" xml:space="preserve">
<value>Output folder</value>
</data>
<data name="descOutputFolder" xml:space="preserve">
<value>Leave empty to export to each model's folder.</value>
</data>
<data name="displayExportSingle" xml:space="preserve">
<value>Export single</value>
</data>
<data name="descExportSingle" xml:space="preserve">
<value>Export all models in a single file, or export each model separately.</value>
</data>
<data name="descResolution" xml:space="preserve">
<value>Set pixel size in preview panel.</value>
</data>
<data name="displayPreviewViewport" xml:space="preserve">
<value>Preview viewport</value>
</data>
<data name="descPreviewViewport" xml:space="preserve">
<value>Preview viewport settings. Adjust in the preview panel.</value>
</data>
<data name="descRenderSelected" xml:space="preserve">
<value>Export selected models only. Adjust this in the preview settings panel.</value>
</data>
<data name="descBackgroundColor" xml:space="preserve">
<value>Background color to use, in #RRGGBBAA format.</value>
</data>
<data name="displayMargin" xml:space="preserve">
<value>Margin</value>
</data>
<data name="descMargin" xml:space="preserve">
<value>Outer canvas margin. This will be added to the final export resolution.</value>
</data>
<data name="displayPadding" xml:space="preserve">
<value>Padding</value>
</data>
<data name="descPadding" xml:space="preserve">
<value>Internal canvas padding. The export resolution remains unchanged, but space will be left around the edges.</value>
</data>
<data name="displayAllowContentOverflow" xml:space="preserve">
<value>Allow content overflow</value>
</data>
<data name="descAllowContentOverflow" xml:space="preserve">
<value>When using the preview resolution, allow content to overflow into the edges and padding areas.</value>
</data>
<data name="displayAutoResolution" xml:space="preserve">
<value>Auto resolution</value>
</data>
<data name="descAutoResolution" xml:space="preserve">
<value>Automatically set resolution based on export content. Edge padding and content overflow settings will be ignored.</value>
</data>
<data name="validFormatRequired" xml:space="preserve">
<value>Valid format required.</value>
</data>
<data name="validExtensionRequired" xml:space="preserve">
<value>Valie extension required.</value>
</data>
<data name="descCustomArgument" xml:space="preserve">
<value>Use "ffmpeg -h encoder=&lt;encoder&gt;" to view supported encoder parameters.
Use "ffmpeg -h muxer=&lt;file format&gt;" to view supported file format parameters.</value>
</data>
<data name="displayCustomArgument" xml:space="preserve">
<value>Custom arguments</value>
</data>
<data name="categorySingleFrame" xml:space="preserve">
<value>[1] Single Frame</value>
</data>
<data name="displayImageFormat" xml:space="preserve">
<value>Image format</value>
</data>
<data name="descFileNameExtension" xml:space="preserve">
<value>Filename extension matching the image format.</value>
</data>
<data name="descDPI" xml:space="preserve">
<value>Pixels per inch (PPI) for the exported image, used to adjust the physical size of the image.</value>
</data>
<data name="categoryFrameSequenceParameters" xml:space="preserve">
<value>[2] Frame Sequence Parameters</value>
</data>
<data name="descFrameFileExtension" xml:space="preserve">
<value>Frame file extension, which also defines the image format of each frame.</value>
</data>
<data name="displayMaxColor" xml:space="preserve">
<value>Max colors in palette</value>
</data>
<data name="descMaxColor" xml:space="preserve">
<value>Max colors in palette. Higher value = better color retention.</value>
</data>
<data name="displayAlphaThreshold" xml:space="preserve">
<value>Alpha threshold</value>
</data>
<data name="descAlphaThreshold" xml:space="preserve">
<value>Pixels below this value will be considered transparent.</value>
</data>
<data name="displayPreset" xml:space="preserve">
<value>Preset</value>
</data>
<data name="descPreset" xml:space="preserve">
<value>-profile: Preset configuration</value>
</data>
<data name="negativeDuration" xml:space="preserve">
<value>Export duration cannot be negative when exporting a single file.</value>
</data>
<data name="frame" xml:space="preserve">
<value>frame(s)</value>
</data>
<data name="categoryVideoParameters" xml:space="preserve">
<value>[1] Video Parameters</value>
</data>
<data name="descDuration" xml:space="preserve">
<value>Check animation duration in the model list. If less than 0, each model uses its longest track when exporting individually.</value>
</data>
<data name="displayFPS" xml:space="preserve">
<value>FPS</value>
</data>
<data name="descFPS" xml:space="preserve">
<value>Frames Per Second (FPS)</value>
</data>
<data name="displayKeepLastFrame" xml:space="preserve">
<value>Keep last frame</value>
</data>
<data name="descKeepLastFrame" xml:space="preserve">
<value>Keeping the last frame smooths the animation, but may add one extra frame.</value>
</data>
<data name="displayLoseless" xml:space="preserve">
<value>Loseless</value>
</data>
<data name="descLoseless" xml:space="preserve">
<value>-lossless: 0 for lossy, 1 for lossless.</value>
</data>
<data name="displayQuality" xml:space="preserve">
<value>Quality</value>
</data>
<data name="descQuality" xml:space="preserve">
<value>-quality: Range 0-100, default is 75.</value>
</data>
</root> </root>

View File

@@ -120,15 +120,27 @@
<data name="about" xml:space="preserve"> <data name="about" xml:space="preserve">
<value>关于 </value> <value>关于 </value>
</data> </data>
<data name="animation" xml:space="preserve">
<value>动画</value>
</data>
<data name="atlasNotExist" xml:space="preserve"> <data name="atlasNotExist" xml:space="preserve">
<value>atlas文件不存在</value> <value>atlas文件不存在</value>
</data> </data>
<data name="atlasPath" xml:space="preserve">
<value>atlas文件路径</value>
</data>
<data name="basicInfo" xml:space="preserve">
<value>基本信息</value>
</data>
<data name="categoryCustom" xml:space="preserve"> <data name="categoryCustom" xml:space="preserve">
<value>自定义</value> <value>自定义</value>
</data> </data>
<data name="categoryExport" xml:space="preserve"> <data name="categoryExport" xml:space="preserve">
<value>[0] 导出</value> <value>[0] 导出</value>
</data> </data>
<data name="categoryFormatParameters" xml:space="preserve">
<value>[3] 格式参数</value>
</data>
<data name="categoryPreview" xml:space="preserve"> <data name="categoryPreview" xml:space="preserve">
<value>[1] 预览</value> <value>[1] 预览</value>
</data> </data>
@@ -141,12 +153,18 @@
<data name="countInfoStatusSuffix" xml:space="preserve"> <data name="countInfoStatusSuffix" xml:space="preserve">
<value> 项</value> <value> 项</value>
</data> </data>
<data name="debug" xml:space="preserve">
<value>调试</value>
</data>
<data name="descAssociatedSpineListView" xml:space="preserve"> <data name="descAssociatedSpineListView" xml:space="preserve">
<value>相关联的 SpineListView</value> <value>相关联的 SpineListView</value>
</data> </data>
<data name="descDisplayImageProperties" xml:space="preserve"> <data name="descDisplayImageProperties" xml:space="preserve">
<value>用于显示画面属性的属性页</value> <value>用于显示画面属性的属性页</value>
</data> </data>
<data name="descAvifEncoder" xml:space="preserve">
<value>-c:v, 要使用的编码器\n建议使用硬件加速, libaom-av1 速度非常非常非常慢</value>
</data>
<data name="descModelAttributes" xml:space="preserve"> <data name="descModelAttributes" xml:space="preserve">
<value>用于显示模型属性的组合属性页</value> <value>用于显示模型属性的组合属性页</value>
</data> </data>
@@ -156,6 +174,9 @@
<data name="displayCenter" xml:space="preserve"> <data name="displayCenter" xml:space="preserve">
<value>画面中心点</value> <value>画面中心点</value>
</data> </data>
<data name="displayEncoder" xml:space="preserve">
<value>编码器</value>
</data>
<data name="displayFlipHorizontal" xml:space="preserve"> <data name="displayFlipHorizontal" xml:space="preserve">
<value>水平翻转</value> <value>水平翻转</value>
</data> </data>
@@ -180,9 +201,33 @@
<data name="displayZoom" xml:space="preserve"> <data name="displayZoom" xml:space="preserve">
<value>缩放</value> <value>缩放</value>
</data> </data>
<data name="duration" xml:space="preserve">
<value>时长</value>
</data>
<data name="errorLoadSkeleton" xml:space="preserve"> <data name="errorLoadSkeleton" xml:space="preserve">
<value>骨骼加载失败</value> <value>骨骼加载失败</value>
</data> </data>
<data name="fileVersion" xml:space="preserve">
<value>文件版本</value>
</data>
<data name="flipX" xml:space="preserve">
<value>水平翻转</value>
</data>
<data name="flipY" xml:space="preserve">
<value>垂直翻转</value>
</data>
<data name="formatExceptionParseColor" xml:space="preserve">
<value>无法解析颜色,请使用 #RRGGBBAA、#RRGGBB、#RGBA 或 #RGB 格式</value>
</data>
<data name="formatExceptionParseColorError" xml:space="preserve">
<value>无法解析颜色,请检查格式</value>
</data>
<data name="formatExceptionUnknownColor" xml:space="preserve">
<value>无法解析颜色,请使用已知的颜色名称</value>
</data>
<data name="isHidden" xml:space="preserve">
<value>是否隐藏</value>
</data>
<data name="itemCountPrefix" xml:space="preserve"> <data name="itemCountPrefix" xml:space="preserve">
<value>已选择 </value> <value>已选择 </value>
</data> </data>
@@ -195,6 +240,9 @@
<data name="loadAllSkeletonSuffix" xml:space="preserve"> <data name="loadAllSkeletonSuffix" xml:space="preserve">
<value> 个可加载骨骼,数量较多,是否一次性全部加载?</value> <value> 个可加载骨骼,数量较多,是否一次性全部加载?</value>
</data> </data>
<data name="maximumTrackLength" xml:space="preserve">
<value>全轨道最大时长</value>
</data>
<data name="msgBoxError" xml:space="preserve"> <data name="msgBoxError" xml:space="preserve">
<value>错误信息</value> <value>错误信息</value>
</data> </data>
@@ -207,15 +255,27 @@
<data name="msgBoxWarning" xml:space="preserve"> <data name="msgBoxWarning" xml:space="preserve">
<value>警告信息</value> <value>警告信息</value>
</data> </data>
<data name="name" xml:space="preserve">
<value>名称</value>
</data>
<data name="notifyCopyGithubLink" xml:space="preserve"> <data name="notifyCopyGithubLink" xml:space="preserve">
<value>链接已复制到剪贴板,请前往浏览器进行访问</value> <value>链接已复制到剪贴板,请前往浏览器进行访问</value>
</data> </data>
<data name="parameterError" xml:space="preserve"> <data name="parameterError" xml:space="preserve">
<value>参数错误</value> <value>参数错误</value>
</data> </data>
<data name="position" xml:space="preserve">
<value>位置</value>
</data>
<data name="previewRenderStopped" xml:space="preserve">
<value>预览画面已停止渲染</value>
</data>
<data name="process" xml:space="preserve"> <data name="process" xml:space="preserve">
<value>已处理 </value> <value>已处理 </value>
</data> </data>
<data name="programCrashed" xml:space="preserve">
<value>程序已崩溃</value>
</data>
<data name="removeAllItemPrefix" xml:space="preserve"> <data name="removeAllItemPrefix" xml:space="preserve">
<value>确认移除所有 </value> <value>确认移除所有 </value>
</data> </data>
@@ -225,13 +285,220 @@
<data name="removeItemConfirmSuffix" xml:space="preserve"> <data name="removeItemConfirmSuffix" xml:space="preserve">
<value> 项吗?</value> <value> 项吗?</value>
</data> </data>
<data name="render" xml:space="preserve">
<value>渲染</value>
</data>
<data name="resourcesPath" xml:space="preserve">
<value>资源目录</value>
</data>
<data name="restartPrompt" xml:space="preserve"> <data name="restartPrompt" xml:space="preserve">
<value>语言已设为英语。立即重启应用程序吗?</value> <value>语言已设为英语。立即重启应用程序吗?</value>
</data> </data>
<data name="restartTitle" xml:space="preserve"> <data name="restartTitle" xml:space="preserve">
<value>需要重新启动应用程序!</value> <value>需要重新启动应用程序!</value>
</data> </data>
<data name="runtimeError" xml:space="preserve">
<value>执行出错</value>
</data>
<data name="runtimeVersion" xml:space="preserve">
<value>运行时版本</value>
</data>
<data name="scale" xml:space="preserve">
<value>缩放比例</value>
</data>
<data name="skelNotExist" xml:space="preserve"> <data name="skelNotExist" xml:space="preserve">
<value>skel文件不存在</value> <value>skel文件不存在</value>
</data> </data>
<data name="skelPath" xml:space="preserve">
<value>skel文件路径</value>
</data>
<data name="skin" xml:space="preserve">
<value>皮肤</value>
</data>
<data name="slot" xml:space="preserve">
<value>插槽</value>
</data>
<data name="transform" xml:space="preserve">
<value>变换</value>
</data>
<data name="usePremultipliedAlpha" xml:space="preserve">
<value>预乘Alpha通道</value>
</data>
<data name="descCRF" xml:space="preserve">
<value>-crf, 取值范围 0-63, 建议范围 18-28, 默认取值 23, 数值越小则输出质量越高</value>
</data>
<data name="displayPixelFormat" xml:space="preserve">
<value>像素格式</value>
</data>
<data name="descPixelFormat" xml:space="preserve">
<value>-pix_fmt, 要使用的像素格式</value>
</data>
<data name="displayLoopCount" xml:space="preserve">
<value>循环次数</value>
</data>
<data name="descLoopCount" xml:space="preserve">
<value>-loop, 循环次数, 0 无限循环, 取值范围 [0, 65535]</value>
</data>
<data name="invalidInputFolder" xml:space="preserve">
<value>输出文件夹无效</value>
</data>
<data name="folderNotExistPrefix" xml:space="preserve">
<value>文件夹 </value>
</data>
<data name="folderNotExistSuffix" xml:space="preserve">
<value>不存在</value>
</data>
<data name="mustProvideOutputFolder" xml:space="preserve">
<value>导出单个时必须提供输出文件夹</value>
</data>
<data name="categoryFFmpegParameter" xml:space="preserve">
<value>[2] FFmpeg 基本参数</value>
</data>
<data name="displayFileFormat" xml:space="preserve">
<value>文件格式</value>
</data>
<data name="descFileFormat" xml:space="preserve">
<value>-f, 文件格式</value>
</data>
<data name="displayFilenameSuffix" xml:space="preserve">
<value>文件名后缀</value>
</data>
<data name="descFilenameSuffix" xml:space="preserve">
<value>文件名后缀</value>
</data>
<data name="displayOutputFolder" xml:space="preserve">
<value>输出文件夹</value>
</data>
<data name="descOutputFolder" xml:space="preserve">
<value>逐个导出时可以留空,将逐个导出到模型自身所在目录</value>
</data>
<data name="displayExportSingle" xml:space="preserve">
<value>导出单个</value>
</data>
<data name="descExportSingle" xml:space="preserve">
<value>是否将模型在同一个画面上导出单个文件,否则逐个导出模型</value>
</data>
<data name="descResolution" xml:space="preserve">
<value>是否将模型在同一个画面上导出单个文件,否则逐个导出模型</value>
</data>
<data name="displayPreviewViewport" xml:space="preserve">
<value>预览画面视区</value>
</data>
<data name="descPreviewViewport" xml:space="preserve">
<value>预览画面的视区参数,请在预览画面参数面板进行调整</value>
</data>
<data name="descRenderSelected" xml:space="preserve">
<value>是否仅导出选中的模型,请在预览画面参数面板进行调整</value>
</data>
<data name="descBackgroundColor" xml:space="preserve">
<value>要使用的背景色, 格式为 #RRGGBBAA</value>
</data>
<data name="displayMargin" xml:space="preserve">
<value>四周边缘距离</value>
</data>
<data name="descMargin" xml:space="preserve">
<value>画布外部的边缘距离 (Margin), 最终导出的分辨率需要加上这个边距</value>
</data>
<data name="displayPadding" xml:space="preserve">
<value>四周填充距离</value>
</data>
<data name="descPadding" xml:space="preserve">
<value>画布内部的填充距离 (Padding), 导出的分辨率大小不会发生变化, 但是会留有四周空间</value>
</data>
<data name="displayAllowContentOverflow" xml:space="preserve">
<value>允许内容溢出</value>
</data>
<data name="descAllowContentOverflow" xml:space="preserve">
<value>使用预览画面分辨率的情况下, 允许内容溢出到边缘和填充区域</value>
</data>
<data name="displayAutoResolution" xml:space="preserve">
<value>自动分辨率</value>
</data>
<data name="descAutoResolution" xml:space="preserve">
<value>根据导出内容自动设置分辨率, 四周填充距离和内容溢出参数将会被忽略</value>
</data>
<data name="validFormatRequired" xml:space="preserve">
<value>需要提供有效的格式</value>
</data>
<data name="validExtensionRequired" xml:space="preserve">
<value>需要提供有效的文件名后缀</value>
</data>
<data name="descCustomArgument" xml:space="preserve">
<value>使用 \"ffmpeg -h encoder=&lt;编码器&gt;\" 查看编码器支持的参数\n使用 \"ffmpeg -h muxer=&lt;文件格式&gt;\" 查看文件格式支持的参数</value>
</data>
<data name="displayCustomArgument" xml:space="preserve">
<value>自定义参数</value>
</data>
<data name="categorySingleFrame" xml:space="preserve">
<value>[1] 单帧画面</value>
</data>
<data name="displayImageFormat" xml:space="preserve">
<value>图像格式</value>
</data>
<data name="descFileNameExtension" xml:space="preserve">
<value>与图像格式匹配的文件名后缀</value>
</data>
<data name="descDPI" xml:space="preserve">
<value>导出图像的每英寸像素数,用于调整图像的物理尺寸</value>
</data>
<data name="categoryFrameSequenceParameters" xml:space="preserve">
<value>[2] 帧序列参数</value>
</data>
<data name="descFrameFileExtension" xml:space="preserve">
<value>帧文件的后缀,同时决定帧图像格式</value>
</data>
<data name="displayMaxColor" xml:space="preserve">
<value>调色板最大颜色数量</value>
</data>
<data name="descMaxColor" xml:space="preserve">
<value>设置调色板使用的最大颜色数量, 越多则色彩保留程度越高</value>
</data>
<data name="displayAlphaThreshold" xml:space="preserve">
<value>透明度阈值</value>
</data>
<data name="descAlphaThreshold" xml:space="preserve">
<value>小于该值的像素点会被认为是透明像素</value>
</data>
<data name="displayPreset" xml:space="preserve">
<value>预设</value>
</data>
<data name="descPreset" xml:space="preserve">
<value>-profile, 预设配置</value>
</data>
<data name="negativeDuration" xml:space="preserve">
<value>导出单个时导出时长不能为负数</value>
</data>
<data name="frame" xml:space="preserve">
<value>帧</value>
</data>
<data name="categoryVideoParameters" xml:space="preserve">
<value>[1] 视频参数</value>
</data>
<data name="descDuration" xml:space="preserve">
<value>可以从模型列表查看动画时长, 如果小于 0, 则在逐个导出时每个模型使用各自的所有轨道动画时长最大值</value>
</data>
<data name="displayFPS" xml:space="preserve">
<value>帧率</value>
</data>
<data name="descFPS" xml:space="preserve">
<value>每秒画面数</value>
</data>
<data name="displayKeepLastFrame" xml:space="preserve">
<value>保留最后一帧</value>
</data>
<data name="descKeepLastFrame" xml:space="preserve">
<value>当设置保留最后一帧时, 动图会更为连贯, 但是帧数可能比预期帧数多 1</value>
</data>
<data name="displayLoseless" xml:space="preserve">
<value>无损</value>
</data>
<data name="descLoseless" xml:space="preserve">
<value>-lossless, 0 表示有损, 1 表示无损</value>
</data>
<data name="displayQuality" xml:space="preserve">
<value>质量</value>
</data>
<data name="descQuality" xml:space="preserve">
<value>-quality, 取值范围 0-100, 默认值 75</value>
</data>
</root> </root>

View File

@@ -1,5 +1,6 @@
using FFMpegCore; using FFMpegCore;
using SpineViewer.Utils; using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@@ -64,13 +65,17 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary> /// </summary>
[StringEnumConverter.StandardValues("av1_nvenc", "av1_amf", "libaom-av1", Customizable = true)] [StringEnumConverter.StandardValues("av1_nvenc", "av1_amf", "libaom-av1", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))] [TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-c:v, 使\n建议使用硬件加速, libaom-av1 ")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayEncoder")]
[LocalizedDescription(typeof(Properties.Resources), "descAvifEncoder")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
/// <summary> /// <summary>
/// CRF /// CRF
/// </summary> /// </summary>
[Category("[3] "), DisplayName("CRF"), Description("-crf, 0-63, 18-28, 23, ")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[DisplayName("CRF")]
[LocalizedDescription(typeof(Properties.Resources), "descCRF")]
public int CRF { get => Exporter.CRF; set => Exporter.CRF = value; } public int CRF { get => Exporter.CRF; set => Exporter.CRF = value; }
/// <summary> /// <summary>
@@ -78,13 +83,17 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary> /// </summary>
[StringEnumConverter.StandardValues("yuv420p", "yuv422p", "yuv444p", Customizable = true)] [StringEnumConverter.StandardValues("yuv420p", "yuv422p", "yuv444p", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))] [TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-pix_fmt, 使")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayPixelFormat")]
[LocalizedDescription(typeof(Properties.Resources), "descPixelFormat")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; } public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; }
/// <summary> /// <summary>
/// 循环次数 /// 循环次数
/// </summary> /// </summary>
[Category("[3] "), DisplayName(""), Description("-loop, , 0 , [0, 65535]")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayLoopCount")]
[LocalizedDescription(typeof(Properties.Resources), "descLoopCount")]
public int Loop { get => Exporter.Loop; set => Exporter.Loop = value; } public int Loop { get => Exporter.Loop; set => Exporter.Loop = value; }
} }
} }

View File

@@ -1,6 +1,7 @@
using NLog; using NLog;
using SpineViewer.Extensions; using SpineViewer.Extensions;
using SpineViewer.Utils; using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@@ -345,66 +346,86 @@ namespace SpineViewer.Spine.SpineExporter
/// 输出文件夹 /// 输出文件夹
/// </summary> /// </summary>
[Editor(typeof(FolderNameEditor), typeof(UITypeEditor))] [Editor(typeof(FolderNameEditor), typeof(UITypeEditor))]
[Category("[0] "), DisplayName(""), Description("")] [LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayOutputFolder")]
[LocalizedDescription(typeof(Properties.Resources), "descOutputFolder")]
public string? OutputDir { get => Exporter.OutputDir; set => Exporter.OutputDir = value; } public string? OutputDir { get => Exporter.OutputDir; set => Exporter.OutputDir = value; }
/// <summary> /// <summary>
/// 导出单个 /// 导出单个
/// </summary> /// </summary>
[Category("[0] "), DisplayName(""), Description("")] [LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
public bool IsExportSingle { get => Exporter.IsExportSingle; set => Exporter.IsExportSingle = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayExportSingle")]
[LocalizedDescription(typeof(Properties.Resources), "descExportSingle")]
public bool IsExportSingle { get => Exporter.IsExportSingle; set => Exporter.IsExportSingle = value; }
/// <summary> /// <summary>
/// 画面分辨率 /// 画面分辨率
/// </summary> /// </summary>
[TypeConverter(typeof(SizeConverter))] [TypeConverter(typeof(SizeConverter))]
[Category("[0] "), DisplayName(""), Description("")] [LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
public Size Resolution { get => Exporter.Resolution; } [LocalizedDisplayName(typeof(Properties.Resources), "displayResoulution")]
[LocalizedDescription(typeof(Properties.Resources), "descResolution")]
public Size Resolution { get => Exporter.Resolution; }
/// <summary> /// <summary>
/// 预览画面视区 /// 预览画面视区
/// </summary> /// </summary>
[Category("[0] "), DisplayName(""), Description("")] [LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
public SFML.Graphics.View View { get => Exporter.PreviewerView; } [LocalizedDisplayName(typeof(Properties.Resources), "displayPreviewViewport")]
[LocalizedDescription(typeof(Properties.Resources), "descPreviewViewport")]
public SFML.Graphics.View View { get => Exporter.PreviewerView; }
/// <summary> /// <summary>
/// 是否仅渲染选中 /// 是否仅渲染选中
/// </summary> /// </summary>
[Category("[0] "), DisplayName(""), Description("")] [LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
public bool RenderSelectedOnly { get => Exporter.RenderSelectedOnly; } [LocalizedDisplayName(typeof(Properties.Resources), "displayRenderSelected")]
[LocalizedDescription(typeof(Properties.Resources), "descRenderSelected")]
public bool RenderSelectedOnly { get => Exporter.RenderSelectedOnly; }
/// <summary> /// <summary>
/// 背景颜色 /// 背景颜色
/// </summary> /// </summary>
[Editor(typeof(SFMLColorEditor), typeof(UITypeEditor))] [Editor(typeof(SFMLColorEditor), typeof(UITypeEditor))]
[TypeConverter(typeof(SFMLColorConverter))] [TypeConverter(typeof(SFMLColorConverter))]
[Category("[0] "), DisplayName(""), Description("使, #RRGGBBAA")] [LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
public SFML.Graphics.Color BackgroundColor { get => Exporter.BackgroundColor; set => Exporter.BackgroundColor = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayBackgroundColor")]
[LocalizedDescription(typeof(Properties.Resources), "descBackgroundColor")]
public SFML.Graphics.Color BackgroundColor { get => Exporter.BackgroundColor; set => Exporter.BackgroundColor = value; }
/// <summary> /// <summary>
/// 四周边缘距离 /// 四周边缘距离
/// </summary> /// </summary>
[TypeConverter(typeof(PaddingConverter))] [TypeConverter(typeof(PaddingConverter))]
[Category("[0] "), DisplayName(""), Description(" (Margin), ")] [LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
public Padding Margin { get => Exporter.Margin; set => Exporter.Margin = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayMargin")]
[LocalizedDescription(typeof(Properties.Resources), "descMargin")]
public Padding Margin { get => Exporter.Margin; set => Exporter.Margin = value; }
/// <summary> /// <summary>
/// 四周填充距离 /// 四周填充距离
/// </summary> /// </summary>
[TypeConverter(typeof(PaddingConverter))] [TypeConverter(typeof(PaddingConverter))]
[Category("[0] "), DisplayName(""), Description(" (Padding), , ")] [LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
public Padding Padding { get => Exporter.Padding; set => Exporter.Padding = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayPadding")]
[LocalizedDescription(typeof(Properties.Resources), "descPadding")]
public Padding Padding { get => Exporter.Padding; set => Exporter.Padding = value; }
/// <summary> /// <summary>
/// 允许内容溢出到边缘和填充区域 /// 允许内容溢出到边缘和填充区域
/// </summary> /// </summary>
[Category("[0] "), DisplayName(""), Description("使, ")] [LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
public bool AllowContentOverflow { get => Exporter.AllowContentOverflow; set => Exporter.AllowContentOverflow = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayAllowContentOverflow")]
[LocalizedDescription(typeof(Properties.Resources), "descAllowContentOverflow")]
public bool AllowContentOverflow { get => Exporter.AllowContentOverflow; set => Exporter.AllowContentOverflow = value; }
/// <summary> /// <summary>
/// 自动分辨率 /// 自动分辨率
/// </summary> /// </summary>
[Category("[0] "), DisplayName(""), Description(", ")] [LocalizedCategory(typeof(Properties.Resources), "categoryExport")]
public bool AutoResolution { get => Exporter.AutoResolution; set => Exporter.AutoResolution = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayAutoResolution")]
[LocalizedDescription(typeof(Properties.Resources), "descAutoResolution")]
public bool AutoResolution { get => Exporter.AutoResolution; set => Exporter.AutoResolution = value; }
} }
} }

View File

@@ -7,6 +7,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Diagnostics; using System.Diagnostics;
using SpineViewer.Utils.Localize;
namespace SpineViewer.Spine.SpineExporter namespace SpineViewer.Spine.SpineExporter
{ {
@@ -45,9 +46,9 @@ namespace SpineViewer.Spine.SpineExporter
if (base.Validate() is string error) if (base.Validate() is string error)
return error; return error;
if (string.IsNullOrWhiteSpace(Format)) if (string.IsNullOrWhiteSpace(Format))
return "需要提供有效的格式"; return Properties.Resources.validFormatRequired;
if (string.IsNullOrWhiteSpace(Suffix)) if (string.IsNullOrWhiteSpace(Suffix))
return "需要提供有效的文件名后缀"; return Properties.Resources.validExtensionRequired;
return null; return null;
} }
@@ -114,22 +115,28 @@ namespace SpineViewer.Spine.SpineExporter
[Browsable(false)] [Browsable(false)]
public override FFmpegVideoExporter Exporter => (FFmpegVideoExporter)base.Exporter; public override FFmpegVideoExporter Exporter => (FFmpegVideoExporter)base.Exporter;
/// <summary> /// <summary>
/// 文件格式 /// 文件格式
/// </summary> /// </summary>
[Category("[2] FFmpeg "), DisplayName(""), Description("-f, ")] [LocalizedCategory(typeof(Properties.Resources), "categoryFFmpegParameter")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayFileFormat")]
[LocalizedDescription(typeof(Properties.Resources), "descFileFormat")]
public virtual string Format => Exporter.Format; public virtual string Format => Exporter.Format;
/// <summary> /// <summary>
/// 文件名后缀 /// 文件名后缀
/// </summary> /// </summary>
[Category("[2] FFmpeg "), DisplayName(""), Description("")] [LocalizedCategory(typeof(Properties.Resources), "categoryFFmpegParameter")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayFilenameSuffix")]
[LocalizedDescription(typeof(Properties.Resources), "descFilenameSuffix")]
public virtual string Suffix => Exporter.Suffix; public virtual string Suffix => Exporter.Suffix;
/// <summary> /// <summary>
/// 文件名后缀 /// 文件名后缀
/// </summary> /// </summary>
[Category("[2] FFmpeg "), DisplayName(""), Description("使 \"ffmpeg -h encoder=<编码器>\" 查看编码器支持的参数\n使用 \"ffmpeg -h muxer=<文件格式>\" 查看文件格式支持的参数")] [LocalizedCategory(typeof(Properties.Resources), "categoryFFmpegParameter")]
public string CustomArgument { get => Exporter.CustomArgument; set => Exporter.CustomArgument = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayCustomArgument")]
[LocalizedDescription(typeof(Properties.Resources), "descCustomArgument")]
public string CustomArgument { get => Exporter.CustomArgument; set => Exporter.CustomArgument = value; }
} }
} }

View File

@@ -1,4 +1,5 @@
using SpineViewer.Spine; using SpineViewer.Spine;
using SpineViewer.Utils.Localize;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@@ -49,7 +50,7 @@ namespace SpineViewer.Spine.SpineExporter
var filename = $"frame_{timestamp}{ImageFormat.GetSuffix()}"; var filename = $"frame_{timestamp}{ImageFormat.GetSuffix()}";
var savePath = Path.Combine(OutputDir, filename); var savePath = Path.Combine(OutputDir, filename);
worker?.ReportProgress(0, $"已处理 0/1"); worker?.ReportProgress(0, $"{Properties.Resources.process} 0/1");
try try
{ {
using var frame = GetFrame(spinesToRender); using var frame = GetFrame(spinesToRender);
@@ -62,7 +63,7 @@ namespace SpineViewer.Spine.SpineExporter
logger.Error(ex.ToString()); logger.Error(ex.ToString());
logger.Error("Failed to save single frame"); logger.Error("Failed to save single frame");
} }
worker?.ReportProgress(100, $"已处理 1/1"); worker?.ReportProgress(100, $"{Properties.Resources.process} 1/1");
} }
protected override void ExportIndividual(SpineObject[] spinesToRender, BackgroundWorker? worker = null) protected override void ExportIndividual(SpineObject[] spinesToRender, BackgroundWorker? worker = null)
@@ -71,7 +72,7 @@ namespace SpineViewer.Spine.SpineExporter
int success = 0; int success = 0;
int error = 0; int error = 0;
worker?.ReportProgress(0, $"已处理 0/{total}"); worker?.ReportProgress(0, $"{Properties.Resources.process} 0/{total}");
for (int i = 0; i < total; i++) for (int i = 0; i < total; i++)
{ {
var spine = spinesToRender[i]; var spine = spinesToRender[i];
@@ -95,7 +96,7 @@ namespace SpineViewer.Spine.SpineExporter
error++; error++;
} }
worker?.ReportProgress((int)((i + 1) * 100.0) / total, $"已处理 {i + 1}/{total}"); worker?.ReportProgress((int)((i + 1) * 100.0) / total, $"{Properties.Resources.process} {i + 1}/{total}");
} }
if (error > 0) if (error > 0)
@@ -114,20 +115,24 @@ namespace SpineViewer.Spine.SpineExporter
/// 单帧画面格式 /// 单帧画面格式
/// </summary> /// </summary>
[TypeConverter(typeof(ImageFormatConverter))] [TypeConverter(typeof(ImageFormatConverter))]
[Category("[1] "), DisplayName("")] [LocalizedCategory(typeof(Properties.Resources), "categorySingleFrame")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayImageFormat")]
public ImageFormat ImageFormat { get => Exporter.ImageFormat; set => Exporter.ImageFormat = value; } public ImageFormat ImageFormat { get => Exporter.ImageFormat; set => Exporter.ImageFormat = value; }
/// <summary> /// <summary>
/// 文件名后缀 /// 文件名后缀
/// </summary> /// </summary>
[Category("[1] "), DisplayName(""), Description("")] [LocalizedCategory(typeof(Properties.Resources), "categorySingleFrame")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayFilenameSuffix")]
[LocalizedDescription(typeof(Properties.Resources), "descFileNameExtension")]
public string Suffix { get => Exporter.ImageFormat.GetSuffix(); } public string Suffix { get => Exporter.ImageFormat.GetSuffix(); }
/// <summary> /// <summary>
/// DPI /// DPI
/// </summary> /// </summary>
[TypeConverter(typeof(SizeFConverter))] [TypeConverter(typeof(SizeFConverter))]
[Category("[1] "), DisplayName("DPI"), Description("")] [LocalizedCategory(typeof(Properties.Resources), "categorySingleFrame")]
[LocalizedDescription(typeof(Properties.Resources), "descDPI")]
public SizeF DPI { get => Exporter.DPI; set => Exporter.DPI = value; } public SizeF DPI { get => Exporter.DPI; set => Exporter.DPI = value; }
} }
} }

View File

@@ -1,5 +1,6 @@
using SpineViewer.Spine; using SpineViewer.Spine;
using SpineViewer.Utils; using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@@ -93,7 +94,9 @@ namespace SpineViewer.Spine.SpineExporter
/// 文件名后缀 /// 文件名后缀
/// </summary> /// </summary>
[TypeConverter(typeof(StringEnumConverter)), StringEnumConverter.StandardValues(".png", ".jpg", ".tga", ".bmp")] [TypeConverter(typeof(StringEnumConverter)), StringEnumConverter.StandardValues(".png", ".jpg", ".tga", ".bmp")]
[Category("[2] "), DisplayName(""), Description("")] [LocalizedCategory(typeof(Properties.Resources), "categoryFrameSequenceParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayFilenameSuffix")]
[LocalizedDescription(typeof(Properties.Resources), "descFrameFileExtension")]
public string Suffix { get => Exporter.Suffix; set => Exporter.Suffix = value; } public string Suffix { get => Exporter.Suffix; set => Exporter.Suffix = value; }
} }
} }

View File

@@ -1,4 +1,5 @@
using FFMpegCore; using FFMpegCore;
using SpineViewer.Utils.Localize;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@@ -58,22 +59,28 @@ namespace SpineViewer.Spine.SpineExporter
[Browsable(false)] [Browsable(false)]
public override GifExporter Exporter => (GifExporter)base.Exporter; public override GifExporter Exporter => (GifExporter)base.Exporter;
/// <summary> /// <summary>
/// 调色板最大颜色数量 /// 调色板最大颜色数量
/// </summary> /// </summary>
[Category("[3] "), DisplayName(""), Description("使, ")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayMaxColor")]
[LocalizedDescription(typeof(Properties.Resources), "descMaxColor")]
public uint MaxColors { get => Exporter.MaxColors; set => Exporter.MaxColors = value; } public uint MaxColors { get => Exporter.MaxColors; set => Exporter.MaxColors = value; }
/// <summary> /// <summary>
/// 透明度阈值 /// 透明度阈值
/// </summary> /// </summary>
[Category("[3] "), DisplayName(""), Description("")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayAlphaThreshold")]
[LocalizedDescription(typeof(Properties.Resources), "descAlphaThreshold")]
public byte AlphaThreshold { get => Exporter.AlphaThreshold; set => Exporter.AlphaThreshold = value; } public byte AlphaThreshold { get => Exporter.AlphaThreshold; set => Exporter.AlphaThreshold = value; }
/// <summary> /// <summary>
/// 透明度阈值 /// 透明度阈值
/// </summary> /// </summary>
[Category("[3] "), DisplayName(""), Description("-loop, , -1 , 0 , [-1, 65535]")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayLoopCount")]
[LocalizedDescription(typeof(Properties.Resources), "descLoopCount")]
public int Loop { get => Exporter.Loop; set => Exporter.Loop = value; } public int Loop { get => Exporter.Loop; set => Exporter.Loop = value; }
} }
} }

View File

@@ -1,5 +1,6 @@
using FFMpegCore; using FFMpegCore;
using SpineViewer.Utils; using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@@ -58,21 +59,27 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary> /// </summary>
[StringEnumConverter.StandardValues("libx264", "libx265", "libvpx-vp9", "av1_nvenc", Customizable = true)] [StringEnumConverter.StandardValues("libx264", "libx265", "libvpx-vp9", "av1_nvenc", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))] [TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-c:v, 使")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayEncoder")]
[LocalizedDescription(typeof(Properties.Resources), "descAvifEncoder")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
/// <summary> /// <summary>
/// CRF /// CRF
/// </summary> /// </summary>
[Category("[3] "), DisplayName("CRF"), Description("-crf, 0-63, 18-28, 23, ")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
public int CRF { get => Exporter.CRF; set => Exporter.CRF = value; } [DisplayName("CRF")]
[LocalizedDescription(typeof(Properties.Resources), "descCRF")]
public int CRF { get => Exporter.CRF; set => Exporter.CRF = value; }
/// <summary> /// <summary>
/// 像素格式 /// 像素格式
/// </summary> /// </summary>
[StringEnumConverter.StandardValues("yuv420p", "yuv422p", "yuv444p", "yuva420p", Customizable = true)] [StringEnumConverter.StandardValues("yuv420p", "yuv422p", "yuv444p", "yuva420p", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))] [TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-pix_fmt, 使")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayPixelFormat")]
[LocalizedDescription(typeof(Properties.Resources), "descPixelFormat")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; } public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; }
} }
} }

View File

@@ -1,5 +1,6 @@
using FFMpegCore; using FFMpegCore;
using SpineViewer.Utils; using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@@ -57,15 +58,19 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary> /// </summary>
[StringEnumConverter.StandardValues("prores_ks", Customizable = true)] [StringEnumConverter.StandardValues("prores_ks", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))] [TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-c:v, 使")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayEncoder")]
[LocalizedDescription(typeof(Properties.Resources), "descAvifEncoder")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
/// <summary> /// <summary>
/// 预设 /// 预设
/// </summary> /// </summary>
[StringEnumConverter.StandardValues("auto", "proxy", "lt", "standard", "hq", "4444", "4444xq")] [StringEnumConverter.StandardValues("auto", "proxy", "lt", "standard", "hq", "4444", "4444xq")]
[TypeConverter(typeof(StringEnumConverter))] [TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-profile, ")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayPreset")]
[LocalizedDescription(typeof(Properties.Resources), "descPreset")]
public string Profile { get => Exporter.Profile; set => Exporter.Profile = value; } public string Profile { get => Exporter.Profile; set => Exporter.Profile = value; }
/// <summary> /// <summary>
@@ -73,7 +78,9 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary> /// </summary>
[StringEnumConverter.StandardValues("yuv422p10le", "yuv444p10le", "yuva444p10le", Customizable = true)] [StringEnumConverter.StandardValues("yuv422p10le", "yuv444p10le", "yuva444p10le", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))] [TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-pix_fmt, 使")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayPixelFormat")]
[LocalizedDescription(typeof(Properties.Resources), "descPixelFormat")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; }
} }
} }

View File

@@ -1,5 +1,6 @@
using FFMpegCore; using FFMpegCore;
using SpineViewer.Utils; using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@@ -58,21 +59,27 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary> /// </summary>
[StringEnumConverter.StandardValues("libx264", "libx265", Customizable = true)] [StringEnumConverter.StandardValues("libx264", "libx265", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))] [TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-c:v, 使")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayEncoder")]
[LocalizedDescription(typeof(Properties.Resources), "descAvifEncoder")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
/// <summary> /// <summary>
/// CRF /// CRF
/// </summary> /// </summary>
[Category("[3] "), DisplayName("CRF"), Description("-crf, 0-63, 18-28, 23, ")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
public int CRF { get => Exporter.CRF; set => Exporter.CRF = value; } [DisplayName("CRF")]
[LocalizedDescription(typeof(Properties.Resources), "descCRF")]
public int CRF { get => Exporter.CRF; set => Exporter.CRF = value; }
/// <summary> /// <summary>
/// 像素格式 /// 像素格式
/// </summary> /// </summary>
[StringEnumConverter.StandardValues("yuv420p", "yuv422p", "yuv444p", Customizable = true)] [StringEnumConverter.StandardValues("yuv420p", "yuv422p", "yuv444p", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))] [TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-pix_fmt, 使")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayPixelFormat")]
[LocalizedDescription(typeof(Properties.Resources), "descPixelFormat")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; }
} }
} }

View File

@@ -1,4 +1,5 @@
using SpineViewer.Spine; using SpineViewer.Spine;
using SpineViewer.Utils.Localize;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@@ -34,7 +35,7 @@ namespace SpineViewer.Spine.SpineExporter
if (base.Validate() is string error) if (base.Validate() is string error)
return error; return error;
if (IsExportSingle && Duration < 0) if (IsExportSingle && Duration < 0)
return "导出单个时导出时长不能为负数"; return Properties.Resources.negativeDuration;
return null; return null;
} }
@@ -55,11 +56,11 @@ namespace SpineViewer.Spine.SpineExporter
int frameCount = 1 + total + final; // 所有帧的数量 = 起始帧 + 完整帧 + 最后一帧 int frameCount = 1 + total + final; // 所有帧的数量 = 起始帧 + 完整帧 + 最后一帧
worker?.ReportProgress(0, $"{spine.Name} 已处理 0/{frameCount} 帧"); worker?.ReportProgress(0, $"{spine.Name} {Properties.Resources.process} 0/{frameCount} {Properties.Resources.frame}");
// 导出首帧 // 导出首帧
var firstFrame = GetFrame(spine); var firstFrame = GetFrame(spine);
worker?.ReportProgress(1 * 100 / frameCount, $"{spine.Name} 已处理 1/{frameCount} 帧"); worker?.ReportProgress(1 * 100 / frameCount, $"{spine.Name} {Properties.Resources.process} 1/{frameCount} {Properties.Resources.frame}");
yield return firstFrame; yield return firstFrame;
// 导出完整帧 // 导出完整帧
@@ -73,7 +74,7 @@ namespace SpineViewer.Spine.SpineExporter
spine.Update(delta); spine.Update(delta);
var frame = GetFrame(spine); var frame = GetFrame(spine);
worker?.ReportProgress((1 + i + 1) * 100 / frameCount, $"{spine.Name} 已处理 {1 + i + 1}/{frameCount} 帧"); worker?.ReportProgress((1 + i + 1) * 100 / frameCount, $"{spine.Name} {Properties.Resources.process} {1 + i + 1}/{frameCount} {Properties.Resources.frame}");
yield return frame; yield return frame;
} }
@@ -82,7 +83,7 @@ namespace SpineViewer.Spine.SpineExporter
{ {
spine.Update(deltaFinal); spine.Update(deltaFinal);
var finalFrame = GetFrame(spine); var finalFrame = GetFrame(spine);
worker?.ReportProgress(100, $"{spine.Name} 已处理 {frameCount}/{frameCount} 帧"); worker?.ReportProgress(100, $"{spine.Name} {Properties.Resources.process} {frameCount}/{frameCount} {Properties.Resources.frame}");
yield return finalFrame; yield return finalFrame;
} }
} }
@@ -103,11 +104,11 @@ namespace SpineViewer.Spine.SpineExporter
int frameCount = 1 + total + final; // 所有帧的数量 = 起始帧 + 完整帧 + 最后一帧 int frameCount = 1 + total + final; // 所有帧的数量 = 起始帧 + 完整帧 + 最后一帧
worker?.ReportProgress(0, $"已处理 0/{frameCount} 帧"); worker?.ReportProgress(0, $"{Properties.Resources.process} 0/{frameCount} {Properties.Resources.frame}");
// 导出首帧 // 导出首帧
var firstFrame = GetFrame(spinesToRender); var firstFrame = GetFrame(spinesToRender);
worker?.ReportProgress(1 * 100 / frameCount, $"已处理 1/{frameCount} 帧"); worker?.ReportProgress(1 * 100 / frameCount, $"{Properties.Resources.process} 1/{frameCount} {Properties.Resources.frame}");
yield return firstFrame; yield return firstFrame;
// 导出完整帧 // 导出完整帧
@@ -121,7 +122,7 @@ namespace SpineViewer.Spine.SpineExporter
foreach (var spine in spinesToRender) spine.Update(delta); foreach (var spine in spinesToRender) spine.Update(delta);
var frame = GetFrame(spinesToRender); var frame = GetFrame(spinesToRender);
worker?.ReportProgress((1 + i + 1) * 100 / frameCount, $"已处理 {1 + i + 1}/{frameCount} 帧"); worker?.ReportProgress((1 + i + 1) * 100 / frameCount, $"{Properties.Resources.process} {1 + i + 1}/{frameCount} {Properties.Resources.frame}");
yield return frame; yield return frame;
} }
@@ -130,7 +131,7 @@ namespace SpineViewer.Spine.SpineExporter
{ {
foreach (var spine in spinesToRender) spine.Update(delta); foreach (var spine in spinesToRender) spine.Update(delta);
var finalFrame = GetFrame(spinesToRender); var finalFrame = GetFrame(spinesToRender);
worker?.ReportProgress(100, $"已处理 {frameCount}/{frameCount} 帧"); worker?.ReportProgress(100, $"{Properties.Resources.process} {frameCount}/{frameCount} {Properties.Resources.frame}");
yield return finalFrame; yield return finalFrame;
} }
} }
@@ -148,22 +149,28 @@ namespace SpineViewer.Spine.SpineExporter
[Browsable(false)] [Browsable(false)]
public override VideoExporter Exporter => (VideoExporter)base.Exporter; public override VideoExporter Exporter => (VideoExporter)base.Exporter;
/// <summary> /// <summary>
/// 导出时长 /// 导出时长
/// </summary> /// </summary>
[Category("[1] "), DisplayName(""), Description(", 0, 使")] [LocalizedCategory(typeof(Properties.Resources), "categoryVideoParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "duration")]
[LocalizedDescription(typeof(Properties.Resources), "descDuration")]
public float Duration { get => Exporter.Duration; set => Exporter.Duration = value; } public float Duration { get => Exporter.Duration; set => Exporter.Duration = value; }
/// <summary> /// <summary>
/// 帧率 /// 帧率
/// </summary> /// </summary>
[Category("[1] "), DisplayName(""), Description("")] [LocalizedCategory(typeof(Properties.Resources), "categoryVideoParameters")]
public float FPS { get => Exporter.FPS; set => Exporter.FPS = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayFPS")]
[LocalizedDescription(typeof(Properties.Resources), "descFPS")]
public float FPS { get => Exporter.FPS; set => Exporter.FPS = value; }
/// <summary> /// <summary>
/// 保留最后一帧 /// 保留最后一帧
/// </summary> /// </summary>
[Category("[1] "), DisplayName(""), Description(", , 1")] [LocalizedCategory(typeof(Properties.Resources), "categoryVideoParameters")]
public bool KeepLast { get => Exporter.KeepLast; set => Exporter.KeepLast = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayKeepLastFrame")]
[LocalizedDescription(typeof(Properties.Resources), "descKeepLastFrame")]
public bool KeepLast { get => Exporter.KeepLast; set => Exporter.KeepLast = value; }
} }
} }

View File

@@ -1,5 +1,6 @@
using FFMpegCore; using FFMpegCore;
using SpineViewer.Utils; using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@@ -59,21 +60,27 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary> /// </summary>
[StringEnumConverter.StandardValues("libvpx-vp9", Customizable = true)] [StringEnumConverter.StandardValues("libvpx-vp9", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))] [TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-c:v, 使")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayEncoder")]
[LocalizedDescription(typeof(Properties.Resources), "descAvifEncoder")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
/// <summary> /// <summary>
/// CRF /// CRF
/// </summary> /// </summary>
[Category("[3] "), DisplayName("CRF"), Description("-crf, 0-63, 18-28, 23, ")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
public int CRF { get => Exporter.CRF; set => Exporter.CRF = value; } [DisplayName("CRF")]
[LocalizedDescription(typeof(Properties.Resources), "descCRF")]
public int CRF { get => Exporter.CRF; set => Exporter.CRF = value; }
/// <summary> /// <summary>
/// 像素格式 /// 像素格式
/// </summary> /// </summary>
[StringEnumConverter.StandardValues("yuv420p", "yuv422p", "yuv444p", "yuva420p", Customizable = true)] [StringEnumConverter.StandardValues("yuv420p", "yuv422p", "yuv444p", "yuva420p", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))] [TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-pix_fmt, 使")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
[LocalizedDisplayName(typeof(Properties.Resources), "displayPixelFormat")]
[LocalizedDescription(typeof(Properties.Resources), "descPixelFormat")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; } public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; }
} }
} }

View File

@@ -1,5 +1,6 @@
using FFMpegCore; using FFMpegCore;
using SpineViewer.Utils; using SpineViewer.Utils;
using SpineViewer.Utils.Localize;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@@ -69,33 +70,43 @@ namespace SpineViewer.Spine.SpineExporter
/// </summary> /// </summary>
[StringEnumConverter.StandardValues("libwebp_anim", "libwebp", Customizable = true)] [StringEnumConverter.StandardValues("libwebp_anim", "libwebp", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))] [TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-c:v, 使")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayEncoder")]
[LocalizedDescription(typeof(Properties.Resources), "descAvifEncoder")]
public string Codec { get => Exporter.Codec; set => Exporter.Codec = value; }
/// <summary> /// <summary>
/// 是否无损 /// 是否无损
/// </summary> /// </summary>
[Category("[3] "), DisplayName(""), Description("-lossless, 0 , 1 ")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
public bool Lossless { get => Exporter.Lossless; set => Exporter.Lossless = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayLoseless")]
[LocalizedDescription(typeof(Properties.Resources), "descLoseless")]
public bool Lossless { get => Exporter.Lossless; set => Exporter.Lossless = value; }
/// <summary> /// <summary>
/// CRF /// CRF
/// </summary> /// </summary>
[Category("[3] "), DisplayName(""), Description("-quality, 0-100, 75")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
public int Quality { get => Exporter.Quality; set => Exporter.Quality = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayQuality")]
[LocalizedDescription(typeof(Properties.Resources), "descQuality")]
public int Quality { get => Exporter.Quality; set => Exporter.Quality = value; }
/// <summary> /// <summary>
/// 像素格式 /// 像素格式
/// </summary> /// </summary>
[StringEnumConverter.StandardValues("yuv420p", "yuva420p", Customizable = true)] [StringEnumConverter.StandardValues("yuv420p", "yuva420p", Customizable = true)]
[TypeConverter(typeof(StringEnumConverter))] [TypeConverter(typeof(StringEnumConverter))]
[Category("[3] "), DisplayName(""), Description("-pix_fmt, 使")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayPixelFormat")]
[LocalizedDescription(typeof(Properties.Resources), "descPixelFormat")]
public string PixelFormat { get => Exporter.PixelFormat; set => Exporter.PixelFormat = value; }
/// <summary> /// <summary>
/// 透明度阈值 /// 透明度阈值
/// </summary> /// </summary>
[Category("[3] "), DisplayName(""), Description("-loop, , 0 , [0, 65535]")] [LocalizedCategory(typeof(Properties.Resources), "categoryFormatParameters")]
public int Loop { get => Exporter.Loop; set => Exporter.Loop = value; } [LocalizedDisplayName(typeof(Properties.Resources), "displayLoopCount")]
[LocalizedDescription(typeof(Properties.Resources), "descLoopCount")]
public int Loop { get => Exporter.Loop; set => Exporter.Loop = value; }
} }
} }