diff --git a/AssetEditor/App.xaml.cs b/AssetEditor/App.xaml.cs index 73f294bd6..828a3d25a 100644 --- a/AssetEditor/App.xaml.cs +++ b/AssetEditor/App.xaml.cs @@ -58,8 +58,13 @@ protected override void OnStartup(StartupEventArgs e) var localizationManager = _serviceProvider.GetRequiredService(); localizationManager.GetPossibleLanguages(); - localizationManager.LoadLanguage("en"); - + // 读取保存的语言,如果为空则默认使用 "en" + var savedLanguage = settingsService.CurrentSettings.SelectedLangauge; + if (string.IsNullOrWhiteSpace(savedLanguage) || savedLanguage == "Not set") + { + savedLanguage = "en"; + } + localizationManager.LoadLanguage(savedLanguage); // Show the settings window if its the first time the tool is ran if (settingsService.CurrentSettings.IsFirstTimeStartingApplication) HandleFirstTimeSettings(uiCommandFactory, settingsService); diff --git a/AssetEditor/Language_Cn.json b/AssetEditor/Language_Cn.json index 47e5c4ce2..3aed1fe90 100644 --- a/AssetEditor/Language_Cn.json +++ b/AssetEditor/Language_Cn.json @@ -11,5 +11,644 @@ "SettingsWindow.OnlyLoadLod0": "仅为参考网格加载 Lod0", "SettingsWindow.GridSize": "3D视窗地面网格大小", "SettingsWindow.AudioModding": "音频 Mod", - "SettingsWindow.SaveButton": "保存" + "SettingsWindow.SaveButton": "保存", + "UpdaterWindow.Title": "更新程序", + "UpdaterWindow.UpdateInfo": "AssetEditor 有新版本可用!\n\n您当前的版本是 {0}。请更新到版本 {1} 以获取以下最新的功能改进和修复。", + "UpdaterWindow.ReleaseNotes": "更新日志", + "UpdaterWindow.UpdateButton": "更新", + "UpdaterWindow.CancelButton": "取消", + "MenuBar.File": "文件(_F)", + "MenuBar.NewPack": "新建 Pack", + "MenuBar.NewAnimPackWh3": "新建 动画 Pack (战锤3)", + "MenuBar.NewAnimPack3k": "新建 动画 Pack (全面战争:三国)", + "MenuBar.SaveActivePack": "保存当前 Pack", + "MenuBar.OpenPack": "打开 Pack", + "MenuBar.OpenRecentPacks": "打开最近的 Pack", + "MenuBar.OpenGamePacks": "打开官方数据 Pack", + "MenuBar.Game.Attila": "阿提拉", + "MenuBar.Game.RomeRemastered": "罗马:重制版", + "MenuBar.Game.ThreeKingdoms": "全面战争:三国", + "MenuBar.Game.Warhammer2": "战锤2", + "MenuBar.Game.Warhammer3": "战锤3", + "MenuBar.Game.Troy": "特洛伊", + "MenuBar.Settings": "设置", + "MenuBar.OpenAssetEditorFolder": "打开 AssetEditor 本地目录", + "MenuBar.ClearAssetEditorFolder": "清理 AssetEditor 本地目录", + "MenuBar.Exit": "退出(_E)", + "MenuBar.View": "视图", + "MenuBar.TogglePackBrowser": "显示/隐藏 Pack 文件浏览器", + "MenuBar.Tools": "工具", + "MenuBar.Reports": "报告导出", + "MenuBar.Reports.Rmv2": "Rmv2 模型", + "MenuBar.Reports.MetaData": "元数据 (Meta Data)", + "MenuBar.Reports.FileList": "文件列表", + "MenuBar.Reports.MetaJsons": "Meta JSONs", + "MenuBar.Reports.Materials": "材质 (Materials)", + "MenuBar.Reports.DialogueEventsStateGroups": "包含 State Groups 的对话事件", + "MenuBar.Reports.DialogueEventNames": "对话事件及事件名称", + "MenuBar.Reports.DatDump": "Dat 格式转储", + "MenuBar.Search": "全局搜索", + "MenuBar.TouchedFiles": "已修改文件记录器", + "MenuBar.TouchedFiles.StartRecorder": "开始记录", + "MenuBar.TouchedFiles.PrintFiles": "打印文件列表", + "MenuBar.TouchedFiles.ExtractToPack": "提取到当前 Pack 中", + "MenuBar.TouchedFiles.StopRecorder": "停止记录", + "MenuBar.Debug.ClearConsole": "调试 - 清空控制台", + "MenuBar.Debug.PrintScopes": "调试 - 打印作用域 (Scopes)", + "MenuBar.Help": "帮助", + "MenuBar.Help.ModdingWiki": "Mod 制作维基百科", + "MenuBar.Help.VideoTutorials": "视频教程", + "MenuBar.Help.Tutorial.AssetEdBasics1": "AssetEditor 基础教程 1", + "MenuBar.Help.Tutorial.AssetEdBasics2": "AssetEditor 基础教程 2", + "MenuBar.Help.Tutorial.SkragReskin": "斯格拉格(Skrag) 换皮教程", + "MenuBar.Help.Tutorial.TzarGuardGun": "持枪的沙皇守卫 (混搭模型教程)", + "MenuBar.Help.Tutorial.KostaltynReskin": "康斯坦丁 换皮教程", + "MenuBar.Help.Tutorial.RecolouringModels": "模型重新着色教程", + "MenuBar.Help.Tutorial.AnimationBasics": "动画基础教程", + "MenuBar.Help.Tutorial.AnimatedProps": "活动道具与自定义动画包", + "MenuBar.Help.Discord": "官方 Discord 频道", + "MainWindow.Titlebar.Minimise": "最小化", + "MainWindow.Titlebar.Maximise": "最大化", + "MainWindow.Titlebar.Close": "关闭", + "MainWindow.Tabs.ContextMenu.Close": "关闭", + "MainWindow.Tabs.ContextMenu.CloseMultiple": "关闭多个", + "MainWindow.Tabs.ContextMenu.CloseOtherTabs": "关闭其他标签页", + "MainWindow.Tabs.ContextMenu.CloseAllTabs": "关闭所有标签页", + "MainWindow.Tabs.ContextMenu.CloseTabsToLeft": "关闭左侧标签页", + "MainWindow.Tabs.ContextMenu.CloseTabsToRight": "关闭右侧标签页", + "SettingsWindow.Title": "设置", + "SettingsWindow.GameFiles": "游戏本体文件路径", + "SettingsWindow.Tooltip.OnlyLoadLod0": "在 Kitbash (模型拼装) 工具中导入参考网格时,仅导入最高精度模型 (Lod0) 以节省内存使用。", + "SettingsWindow.Tooltip.GridSize": "3D视窗的地面网格尺寸", + "SettingsWindow.Tooltip.BrowseGameData": "浏览并选择游戏的 data 文件夹,例如:\"C:\\SteamLibrary\\steamapps\\common\\Total War WARHAMMER III\\data\"", + "SettingsWindow.WwiseCLI": "Wwise CLI 路径", + "SettingsWindow.Tooltip.WwiseCLI": "例如:\"C:\\Program Files (x86)\\Audiokinetic\\Wwise2019.2.15.7667\\Authoring\\x64\\Release\\bin\\WwiseCLI.exe\"", + "AnimationPack.Menu.File": "文件(_F)", + "AnimationPack.Menu.Save": "保存", + "AnimationPack.Menu.NewAnimSet": "新建动画集 (战锤3/三国)", + "AnimationPack.Menu.ExportAnimSlotsWh3": "导出动画槽位 (战锤3)", + "AnimationPack.Menu.ExportAnimSlotsWh2": "导出动画槽位 (战锤2)", + "AnimationPack.FilterWatermark": "输入正则表达式进行过滤...", + "AnimationPack.ContextMenu.Rename": "重命名", + "AnimationPack.ContextMenu.Remove": "移除", + "AnimationPack.ContextMenu.CopyFullPath": "复制完整路径", + "TextureEditor.UvChannels": "UV 通道", + "TextureEditor.Format": "图像格式", + "TextureEditor.Width": "宽度", + "TextureEditor.Height": "高度", + "TextureEditor.NumMipMaps": "MipMap 层级数", + "TextureEditor.ImageDetails": "图像详细信息", + "TextureEditor.ImagePath": "图像路径:", + "TwuiEditor.Component.String": "字符串 (String)", + "TwuiEditor.Component.Float": "浮点数 (Float)", + "TwuiEditor.Component.Vector2": "二维向量 (Vector2)", + "TwuiEditor.Component.Bool": "布尔值 (Bool)", + "TwuiEditor.Hierarchy.Filter": "过滤", + "TwuiEditor.Hierarchy.Search": "搜索...", + "TwuiEditor.Hierarchy.ToggleSelected": "切换选中状态 (显示/隐藏)", + "Kitbash.Bmi.CheckAllChildren": "勾选所有子节点", + "Kitbash.Bmi.UncheckAllChildren": "取消勾选所有子节点", + "Kitbash.Bmi.ScaleFactor": "缩放系数:", + "Kitbash.Bmi.Apply": "应用", + "Kitbash.MeshFitter.Title": "网格适配工具 (Mesh Fitter)", + "Kitbash.MeshFitter.Apply": "应用", + "Kitbash.MeshFitter.Ok": "确定", + "Kitbash.MeshFitter.Cancel": "取消", + "Kitbash.PinTool.Title": "动画顶点转移工具 (Pin Tool)", + "Kitbash.PinTool.InstructionsHeader": "使用说明", + "Kitbash.PinTool.InstructionsText": "1. 选择模式:\n'Pin' (顶点钉住):适用于不应产生弯曲变形的硬表面(如武器、头盔)\n'Skin wrap' (蒙皮包裹):适用于需要跟随身体产生柔性变形的物体(如衣服、披风)\n2. 选择需要接收新动画的网格 (Meshes)\n3. 选择用于提取动画的源网格\n'Pin' 模式:进入顶点模式,选中源网格上的一个顶点,然后点击下方按钮\n'Skin wrap' 模式:直接在下方选择源网格\n4. 点击应用 (Apply)", + "Kitbash.PinTool.TransferMode": "动画转移模式:", + "Kitbash.PinTool.ApplyTo": "将动画应用至:", + "Kitbash.PinTool.AddSelected": "添加选中的网格", + "Kitbash.PinTool.RemoveAll": "移除全部", + "Kitbash.PinTool.TakeFromPin": "动画提取源 (Pin 模式):", + "Kitbash.PinTool.Source": "源顶点:", + "Kitbash.PinTool.SetFromVertex": "从选中的顶点获取", + "Kitbash.PinTool.TakeFromSkinWrap": "动画提取源 (SkinWrap 模式):", + "Kitbash.PinTool.Mesh": "源网格:", + "Kitbash.PinTool.SetFromSelection": "从选中项获取", + "Kitbash.ReRigging.Title": "重新绑定骨骼工具 (Re-Rigging Tool)", + "Kitbash.SaveDialog.Title": "保存模型与材质", + "Kitbash.SaveDialog.Path": "导出路径:", + "Kitbash.SaveDialog.Browse": "浏览", + "Kitbash.SaveDialog.MeshFormat": "网格导出格式 (Mesh):", + "Kitbash.SaveDialog.WsModelFormat": "材质文件格式 (WS Model):", + "Kitbash.SaveDialog.LodStrategy": "LOD 生成策略:", + "Kitbash.SaveDialog.NumLods": "LOD 数量:", + "Kitbash.SaveDialog.NumLodsTooltip": "即将生成的 LOD (细节层级) 数量。正常单位通常为 4,巨兽模型为 5,某些特殊模型为 1。", + "Kitbash.SaveDialog.LodInfo": "LOD 详细信息:", + "Kitbash.SaveDialog.Index": "索引", + "Kitbash.SaveDialog.Distance": "显示距离", + "Kitbash.SaveDialog.QltLevel": "质量等级", + "Kitbash.SaveDialog.ReductionFactor": "减面系数", + "Kitbash.SaveDialog.MergeAlpha": "合并 Alpha", + "Kitbash.SaveDialog.FastAnimVertex": "快速动画顶点", + "Kitbash.SaveDialog.NumPolygons": "多边形数", + "Kitbash.SaveDialog.NumMeshes": "网格数", + "Kitbash.SaveDialog.NumTextures": "贴图数", + "Kitbash.SaveDialog.OnlySaveVisible": "仅保存可见节点", + "Kitbash.VertexDebugger.Title": "顶点调试器 (Vertex Debugger)", + "Kitbash.VertexDebugger.NormalScale": "法线调试缩放比例:", + "Kitbash.VertexDebugger.ShowStats": "显示统计信息", + "Common.Ok": "确定", + "Common.OK": "确定", + "Common.Cancel": "取消", + "Common.Save": "保存", + "Common.SaveAs": "另存为", + "Common.Close": "关闭", + "Common.Apply": "应用", + "Common.Open": "打开", + "Common.Delete": "删除", + "Common.Copy": "复制", + "Common.Paste": "粘贴", + "Common.Undo": "撤销", + "Common.New": "新建", + "Common.Duplicate": "重复", + "Common.Rename": "重命名", + "Common.Remove": "移除", + "Common.Browse": "浏览...", + "Common.BrowseEllipsis": "...", + "Common.Clear": "清理", + "Common.Filter": "过滤:", + "Common.SearchFilterWatermark": "搜索过滤器,支持正则表达式", + "Common.SelectAll": "全选", + "Common.DeselectAll": "取消全选", + "Common.Name": "名称", + "Common.Format": "格式", + "Common.Width": "宽度", + "Common.Height": "高度", + "Common.Set": "设置", + "Common.Reset": "重置", + "Common.Count": "数量 = ", + "Common.FocusSelection": "聚焦选中项", + "Common.ResetCamera": "重置", + "Common.General": "通用", + "Common.Camera": "相机", + "Common.Refresh": "刷新", + "SkeletonEditor.Title": "骨骼编辑器:", + "SkeletonEditor.Skeleton": "骨骼", + "SkeletonEditor.Load": "加载", + "SkeletonEditor.RefMesh": "参考网格", + "SkeletonEditor.Settings": "设置:", + "SkeletonEditor.SourceSkeleton": "源骨骼", + "SkeletonEditor.SelectedBoneScale": "选中骨骼缩放", + "SkeletonEditor.FocusSelectedBone": "聚焦选中骨骼", + "SkeletonEditor.WorldTransforms": "世界变换", + "SkeletonEditor.IsTechSkeleton": "是否为技术骨骼", + "SkeletonEditor.SelectedBone": "选中骨骼:", + "SkeletonEditor.Translation": "位移", + "SkeletonEditor.Rotation": "旋转", + "SkeletonEditor.LengthScale": "长度缩放", + "SkeletonEditor.Bake": "烘焙", + "ErrorWindow.Title": "错误", + "ErrorWindow.ForceClose": "紧急 - 强制关闭当前窗口", + "ErrorWindow.CloseError": "关闭错误窗口", + "ErrorWindow.CopyToClipboard": "复制到剪贴板", + "ErrorWindow.MessageDesc": "如果此错误出乎意料,请点击复制按钮并将文本内容通过Discord或Github提供给开发者。\n剪贴板包含的信息比显示的更多!\n\nDiscord: https://discord.gg/moddingden\nGithub: https://github.com/donkeyProgramming/TheAssetEditor/issues", + "ErrorWindow.ExtraInformation": "额外信息", + "ErrorWindow.ErrorMessage": "错误信息", + "ErrorList.SaveReport": "保存报告", + "ErrorList.Error": "错误", + "ErrorList.Item": "项", + "ErrorList.Description": "描述", + "SelectionList.IsChecked": "是否勾选", + "PackFileBrowser.Title": "PackFile 浏览器", + "PackFileBrowser.Search": "搜索 PackFile (Ctrl+Shift+F)", + "RenderSettings.Title": "渲染设置", + "RenderSettings.UseBackfaceCulling": "开启背面剔除 (Backface culling)", + "RenderSettings.UseLargeSceneCulling": "开启大型场景剔除", + "RenderSettings.ShowGrid": "显示网格", + "RenderSettings.GridColour": "网格颜色", + "RenderSettings.FactionColours": "派系颜色", + "RenderSettings.LightIntensity": "光照强度", + "RenderSettings.EnvLightRotationX": "环境光X轴旋转", + "RenderSettings.DirectLightRotationX": "直射光X轴旋转", + "RenderSettings.DirectLightRotationY": "直射光Y轴旋转", + "ShaderTextureView.ApplyTexture": "渲染时应用贴图", + "ShaderTextureView.RemoveTexture": "移除贴图并替换为默认蒙版", + "ShaderTextureView.BrowseFile": "浏览并选择新文件", + "ShaderTextureView.PreviewTexture": "预览贴图", + "TwuiHierarchy.Search": "搜索...", + "BoneMapping.RootScale": "根节点缩放", + "BoneMapping.OnlyMoveSelectedBone": "仅移动选中的骨骼 ", + "BoneMapping.RelativeScale": "相对缩放:", + "BoneMapping.DisplayOffset": "显示偏移", + "BoneMapping.PosOffset": "位置偏移", + "BoneMapping.RotOffset": "旋转偏移", + "BoneMapping.Scale": "缩放", + "BoneMapping.CopyToChildren": "应用到子节点", + "BoneMapping.ResetOffsets": "重置偏移量", + "BoneMapping.CurrentModelBones": "当前模型骨骼 - ", + "BoneMapping.OnlyShowUsedBones": "仅显示使用中的骨骼", + "BoneMapping.AutoMapByName": "基于名称自动映射", + "BoneMapping.AutoMapByHierarchy": "基于层级自动映射", + "BoneMapping.DeleteSelf": "删除自身", + "BoneMapping.DeleteSelfAndChildren": "删除自身及子节点", + "BoneMapping.CopyToAllChildren": "复制到所有子节点", + "BoneMapping.TargetModelBones": "目标模型骨骼 - ", + "SceneObjectView.Mesh": "网格 (Mesh)", + "SceneObjectView.Skeleton": "骨骼 (Skeleton)", + "SceneObjectView.Fragment": "动作包 (Fragment)", + "SceneObjectView.Slot": "插槽 (Slot)", + "SceneObjectView.AnimationFile": "动画文件", + "SceneObjectView.MetaFile": "Meta 文件", + "SceneObjectView.PersistMetaFile": "持续化 Meta 文件", + "EditorHost.SaveShortcutFile": "保存快捷方式文件", + "EditorHost.SceneContent": "场景内容:", + "AnimationPlayer.Animation": "动画", + "AnimationPlayer.MainAnimation": "主动画:", + "AnimationPlayer.Frame": "帧 ", + "AnimationPlayer.Separator": " / ", + "AnimationPlayer.Time": "时间[", + "AnimationPlayer.FPS": " 帧率]", + "AnimationPlayer.Loop": "循环", + "AnimationPlayer.Player": "播放器", + "AnimationPlayer.Frames": "帧数", + "AnimationMeta.Persistent": "固定属性 (Persistent)", + "AnimationMeta.Animation": "动画", + "AnimationMeta.Description": "描述:", + "AnimationMeta.MetaDataV": "Meta 数据 (版本", + "AnimationMeta.Entries": ") 条目:", + "AnimationMeta.Up": "上移", + "AnimationMeta.Down": "下移", + "AnimationMeta.CreateEntry": "创建 Meta 数据条目", + "KitbashSkeleton.SkeletonInformation": "骨骼信息:", + "KitbashSkeleton.NodeScale": "节点缩放 (Node scale)", + "KitbashSkeleton.NodeScaleTooltip": "缩放骨骼会使模型看起来被拉伸,除非同时导出模型网格", + "TintAndFaction.Title": "色调与派系颜色 (Tint and Faction)", + "TintAndFaction.PreviewCapability": "预览特性", + "TintAndFaction.TintMask": "色调蒙版 (Tint Mask)", + "TintAndFaction.TintColour": "色调颜色 (Tint Colour)", + "TintAndFaction.Variation": "差异:", + "TintAndFaction.UseFactionColours": "使用派系颜色", + "TintAndFaction.FactionColour3Mask": "派系颜色3号蒙版", + "RMV2WeightedMaterial.Title": "RMV2 权重材质 - 详细信息", + "RMV2WeightedMaterial.Filter": "过滤器", + "RMV2WeightedMaterial.MatrixIndex": "矩阵索引", + "RMV2WeightedMaterial.SetToDefault": "设为默认值", + "RMV2WeightedMaterial.ParentMatrixIndex": "父矩阵索引", + "RMV2WeightedMaterial.RmvVertexFormat": "RMV 顶点格式", + "RMV2WeightedMaterial.RmvMaterialId": "RMV 材质 ID", + "RMV2WeightedMaterial.TransformInfo": "变换信息", + "RMV2WeightedMaterial.StringParams": "字符串参数", + "RMV2WeightedMaterial.FloatParams": "浮点参数", + "RMV2WeightedMaterial.IntParams": "整数参数", + "RMV2WeightedMaterial.TextureParams": "贴图参数", + "RMV2WeightedMaterial.AttachmentParams": "附件参数", + "RMV2WeightedMaterial.Vec4Params": "Vec4 参数", + "SpecGloss.Title": "高光与光泽度 (SpecGloss)", + "SpecGloss.UseAlpha": "使用 Alpha", + "SpecGloss.DiffuseMap": "漫反射贴图 (Diffuse Map)", + "SpecGloss.SpecularMap": "高光贴图 (Specular Map)", + "SpecGloss.GlossMap": "光泽度贴图 (GlossMap)", + "SpecGloss.NormalMap": "法线贴图 (Normal Map)", + "SpecGloss.Mask": "蒙版 (Mask)", + "ModelMaterial.Title": "模型材质", + "ModelMaterial.SelectedShader": " 选中的着色器 (Shader)", + "MetalRough.Title": "金属度与粗糙度 (MetalRough)", + "MetalRough.BaseColour": "基础色 (Base Colour)", + "MetalRough.MaterialMap": "材质贴图 (Material Map)", + "Emissive.Title": "自发光 (Emissive)", + "Emissive.Distortion": "自发光扭曲*", + "Emissive.Direction": "自发光方向*", + "Emissive.DistortStrength": "自发光扭曲强度*", + "Emissive.FresnelStrength": "自发光菲涅尔强度", + "Emissive.Tint": "自发光色调", + "Emissive.Gradient1": "自发光渐变 1", + "Emissive.Time": "时间", + "Emissive.Gradient2": "自发光渐变 2", + "Emissive.Gradient3": "自发光渐变 3", + "Emissive.Gradient4": "自发光渐变 4", + "Emissive.Speed": "自发光速度", + "Emissive.PulseSpeed": "自发光脉冲速度*", + "Emissive.PulseStrength": "自发光脉冲强度*", + "Emissive.Strength": "自发光整体强度", + "Emissive.Tiling": "自发光平铺设置", + "Blood.Title": "血液贴花 (Blood)", + "Blood.ReceivesBlood": "接收血液效果", + "Blood.BloodUvScale": "血液 UV 缩放", + "Blood.TextureBloodMap": "贴图 - 血液图", + "AdvancedRMV.Title": "高级 RMV 属性", + "AdvancedRMV.UseDirt": "使用污渍", + "AdvancedRMV.UseDecal": "使用贴花", + "AdvancedRMV.UseSkin": "使用皮肤效果", + "AdvancedRMV.DirtMap": "污渍贴图", + "AdvancedRMV.DirtMask": "污渍蒙版", + "AdvancedRMV.SkinMask": "皮肤蒙版", + "AdvancedRMV.DecalMask": "贴花蒙版", + "AdvancedRMV.UvScale": "UV 缩放", + "AdvancedRMV.TextureTransform": "贴图变换", + "MeshView.VertexType": "顶点类型", + "MeshView.Size": "大小尺寸", + "MeshView.VertexCount": "顶点数:", + "MeshView.IndexCount": "索引数:", + "MeshView.RenderBbox": "渲染包围盒", + "MeshView.Pivot": "枢轴点 (Pivot)", + "MeshView.CopyToAllMeshes": "应用到所有网格", + "MeshView.ReduceLods": "削减 LODs 面数", + "Rmv2AnimationView.SkeletonName": "骨骼名称", + "Rmv2AnimationView.Bones": "骨骼节点", + "Rmv2AnimationView.BoneIndex": "骨骼索引", + "Rmv2AnimationView.AttachTo": "附加至", + "Rmv2AnimationView.AnimationMatrix": "动画矩阵 ", + "MainNode.Title": "主节点 (Main Node):", + "MainNode.TargetAnim": "目标动画", + "MainNode.CopyTexturesToPack": "拷贝贴图至 Pack 内", + "MainNode.Convertion": "转换:", + "MainNode.AttachmentPoints": "挂载点 (Attachment points)", + "MainNode.BoneId": "骨骼 ID", + "MainNode.UseBoneOrientation": "使用骨骼方向", + "MainNode.CreateAttachmentPoints": "从骨架生成挂载点", + "GroupView.GroupInformation": "组信息:", + "GroupView.GroupName": "组名称", + "KitbasherView.VertexFalloff": "顶点衰减:", + "KitbasherView.VertexFalloffTooltip": "被选中顶点的衰减距离", + "Import.SelectedFile": "选中的文件", + "Import.CreateProject": "创建导入工程 ", + "Import.AvailableImporters": "可用的导入器", + "Import.ImporterSettings": "导入器设置:", + "Import.Import": "导入", + "Import.ImportMeshes": "导入网格 (Meshes)", + "Import.ImportMeshesTooltip": "从 Blender 材质图创建兼容 全战:战锤3/三国 的材质", + "Import.ImportMaterials": "导入材质", + "Import.ImportMaterialsTooltip": "从 RMV 文件中导入材质,并转换为全战材质", + "Import.ConvertMaterialMap": "将材质图从 Blender 格式转换为全战格式", + "Import.ConvertNormalMap": "将法线贴图从蓝色转换为橙色", + "Import.ConvertNormalMapTooltip": "将蓝底法线贴图转换为橙色类型。\n- 蓝底格式常用于多数3D软件,如Blender、Substance Painter。\n- 橙色格式是特殊“压缩”2通道类型,用于全战系列及部分其他游戏。", + "Import.ImportAnimations": "导入动画 ", + "Import.ImportAnimationsTooltip": "从 GLTF 文件中导入动画,并转换为全战 ANIM 格式;", + "Import.NumberKeySamples": "每秒动画关键帧采样数 ", + "Export.ExportTextures": "导出贴图", + "Export.ConvertMaterial": "转换材质", + "Export.ConvertMaterialTooltip": "将材质图转换为 Blender 更兼容的版本", + "Export.ConvertNormal": "转换法线", + "Export.ConvertNormalTooltip": "将法线贴图转换为蓝色版本 - 常被多数3D软件支持,包含 Blender", + "Export.ExportAnimations": "导出动画 ", + "Export.SystemPath": "系统路径", + "Export.AvailableExporters": "可用的导出器", + "Export.Export": "导出", + "Export.SwapMaterialRoughness": "交换 金属度/粗糙度 通道 (适配Blender)", + "DialogueEventMerger.Title": "对话事件合并器", + "DialogueEventMerger.Description": "此对话事件合并器用于将包含 Mod 声音数据的 SoundBanks 里的对话事件,与游戏原版的对话事件合并为单一的 SoundBank 文件。查看悬停提示以获取更多信息。", + "DialogueEventMerger.Suffix": "SoundBank 文件后缀", + "DialogueEventMerger.SuffixTooltip": "合并后生成的 SoundBank 名称后缀。", + "DialogueEventMerger.ModdedBanks": "包含 Mod 的 SoundBanks", + "DialogueEventMerger.ModdedBanksTooltip": "选择一个或多个 Mod 的 SoundBank,它们的对话事件将与原版游戏的声音事件合并。", + "AudioProjectMerger.Title": "音频工程合并器", + "AudioProjectMerger.Description": "音频工程合并器是一个用于合并两个独立的 Audio Projects (音频工程) 的工具。", + "AudioProjectMerger.MergedName": "合并后的音频工程名", + "AudioProjectMerger.MergedNameTooltip": "合并完毕的音频工程文件名称。", + "AudioProjectMerger.OutputDir": "输出目录路径", + "AudioProjectMerger.OutputDirTooltip": "此 Pack 目录是合并后音频工程的输出位置。该目录中需要存在任意文件才能正常显示。", + "AudioProjectMerger.BasePath": "基础音频工程路径", + "AudioProjectMerger.BasePathTooltip": "这是要用作基底的音频工程文件路径,另一个工程将被合并到此文件中。", + "AudioProjectMerger.MergingPath": "待合并音频工程路径", + "AudioProjectMerger.MergingPathTooltip": "这是准备被合并进入基底工程的另一个音频工程文件路径。", + "AudioProjectConverter.Title": "音频工程转换器", + "AudioProjectConverter.Description": "音频工程转换器用于从提供的 .bnk 文件内的对话事件中提取并构建出一个音频工程。它通过提取配音演员 (VO Actor) 的子字符串,并在提供的 .bnk 中查找它们的调用情况,从而自动转换成音频工程格式。查看悬停提示以获取更多信息。", + "AudioProjectConverter.ProjectName": "音频工程名", + "AudioProjectConverter.ProjectNameTooltip": "转换出的音频工程名称。", + "AudioProjectConverter.VOActor": "配音演员子字符串", + "AudioProjectConverter.VOActorTooltip": "用于搜索的所有配音演员公共的识别子字符串。可以使用逗号进行多个子字符串的分割,例如:\"ovn_vo_actor_Araby, ovn_vo_actor_Albion\"。", + "AudioProjectConverter.WemsDir": "Wems 目录路径", + "AudioProjectConverter.WemsDirTooltip": "该 SoundBank 所使用的所有 .wem 格式音频文件所在的电脑本地目录(如果不清楚具体的 wem,直接选择包含全量文件的目录即可)。", + "AudioProjectConverter.BnksDir": "Bnks 目录路径", + "AudioProjectConverter.BnksDirTooltip": "你要进行搜索的所有 .bnk 文件所在的电脑本地目录。", + "AudioProjectConverter.ConvertingFromWwise": "从 Wwise 工程中转换 Soundbanks", + "AudioProjectConverter.ConvertingFromWwiseTooltip": "如果你需要从 Wwise 原工程中获取该 soundbank 使用的 States,请勾选此项。如果转换的是游戏原版的 .bnk ,或 Mod Pack 里包含了通过 Audio Editor 创建的 states_data.dat,那么这里无需勾选。", + "AudioProjectConverter.SoundbanksInfo": "SoundbanksInfo.xml 文件", + "AudioProjectConverter.SoundbanksInfoTooltip": "SoundbanksInfo.xml 文件的路径应为:\"your_wwise_project_folder\\GeneratedSoundBanks\\Windows\\SoundbanksInfo.xml\"。这个文件包含 Wwise 工程里的 States 数据。", + "AudioExplorer.SearchAction": "按动作事件 (Action Event) 搜索", + "AudioExplorer.SearchDialogue": "按对话事件 (Dialogue Event) 搜索", + "AudioExplorer.SearchVOActor": "按 VO__Actor 搜索", + "AudioExplorer.SearchID": "按 ID 搜索", + "AudioExplorer.Languages": "语言", + "AudioExplorer.LoadLanguages": "加载语言", + "AudioExplorer.PlayAudio": "播放音频", + "AudioExplorer.WwiseObjectGraph": "Wwise 对象层级图 (Hierarchy Graph)", + "NewAudioProject.Title": "新建音频工程", + "NewAudioProject.Location": "位置", + "NewAudioProject.LocationTooltip": "此音频工程将会在 Pack 内保存的目录位置。", + "NewAudioProject.Language": "语言", + "NewAudioProject.LanguageTooltip": "音频工程的游戏内应用语言类别。", + "AudioEditorSettings.ResetSettings": "重置设置", + "AudioEditorSettings.ResetSettingsTooltip": "将所有设置重置为默认值。", + "AudioEditorSettings.SetRecommendedVO": "设置为推荐的 VO 语音参数", + "AudioEditorSettings.SetRecommendedVOTooltip": "当选定了多个音频文件时,此按钮可一键将容器设置更改为 VO 语音类别的推荐参数配置。\n\n快捷键:Ctrl + R", + "AudioEditorSettings.RemoveAudioFiles": "移除选中的音频文件", + "AudioEditorSettings.RemoveAudioFilesTooltip": "从当前设置项中移除选中的音频文件列表。", + "AudioEditorSettings.ShowSettingsViewer": "从音频工程查看器中显示对应配置", + "AudioEditorSettings.ShowSettingsViewerTooltip": "开启此项时,在音频工程查看器里选中的项,其配置属性会直接在这里展示。如果关闭此项,将默认展示音频工程编辑器中当前被选中项的配置属性。", + "AudioEditorSettings.AudioFiles": "音频文件", + "AudioEditorSettings.FileName": "文件名称", + "AudioEditorSettings.FilePath": "文件路径", + "AudioEditorSettings.HircSettings": "Hirc 内部设置", + "AudioEditorSettings.ContainerType": "容器类型", + "AudioEditorSettings.ContainerTypeTooltip": "容器类型决定了对象播放的顺序原则。\n\nRandom - 随机播放列表里的音频。\nSequence - 按照音频被添加的先后顺序依次播放。", + "AudioEditorSettings.RandomType": "随机类型", + "AudioEditorSettings.RandomTypeTooltip": "在容器为随机模式时,决定具体的随机规则:\n\nStandard - 完全随机播放对象。\nShuffle - 随机播放,但在一轮完整播放完所有对象之前,不重复播放已经放过的音频。", + "AudioEditorSettings.RepetitionInterval": "防重复播放间隔", + "AudioEditorSettings.RepetitionIntervalTooltip": "防止短时间内连续播放相同的音频,即一个音频播放后,至少要再播放过 N 个其他音频之后,才能重新参与随机。\n\n如果类型是 Standard 完全随机,随机池会临时排除最近被播放过的这 N 个音频。\n如果类型是 Shuffle,此选项仅在开启容器循环播放时有效,新一轮开始时会防止立刻播放上一轮末尾刚刚播放过的 N 个音频。\n如果是 Shuffle + 不循环 + 连续播放模式,此间隔选项无效。", + "AudioEditorSettings.PlaylistEndBehaviour": "列表播放完毕后的行为", + "AudioEditorSettings.PlaylistEndBehaviourTooltip": "决定列表中的最后一个对象播放完毕后的动作。\n\nRestart - 重新按原有顺序播放。\nPlay In Reverse Order - 倒序反向播放一遍。", + "AudioEditorSettings.PlayMode": "播放模式", + "AudioEditorSettings.PlayModeTooltip": "决定事件触发后是只播放列表中的一个声音还是整个列表。\n\nStep - 每次触发事件时,仅播放列表内的一个对象。\nContinuous - 触发事件后,持续自动播放列表中所有的对象。", + "AudioEditorSettings.AlwaysResetContainer": "总是重置容器", + "AudioEditorSettings.AlwaysResetContainerTooltip": "如果容器在播放途中被终止,在下次重新触发时是接着上次停止的地方继续,还是从头重置列表开始。勾选即意味着每次都会重置回开头。", + "AudioEditorSettings.LoopingType": "循环类型", + "AudioEditorSettings.LoopingTypeTooltip": "决定了容器被重复播放的次数行为。\n\nDisabled - 禁用循环。\nFinite Looping - 有限循环。容器按下方设定的循环次数进行重复。\nInfinite Looping - 无限循环。一直循环播放永不停歇。", + "AudioEditorSettings.NumberOfLoops": "循环次数", + "AudioEditorSettings.NumberOfLoopsTooltip": "在循环类型设定为有限循环 (Finite Looping) 时,这个数值决定了具体的重复次数。", + "AudioEditorSettings.TransitionType": "过渡过渡方式", + "AudioEditorSettings.TransitionTypeTooltip": "处理容器中各对象相互切换时的过渡逻辑。\n\nDisabled - 禁用,直接切换无过渡。\nXfade (amp) - 恒定振幅模式的交叉淡入淡出。\nXfade (power) - 恒定功率模式的交叉淡入淡出。\nDelay - 在两端音频间增加一段空隙的延迟时间。\nSample accurate - 样本级精确,创建无延迟的无缝音频过渡。\nTrigger rate - 按特定的速率/节拍来触发播放下一个音频。这对于模拟机关枪连续射击这类效果非常有用。", + "AudioEditorSettings.TransitionDuration": "过渡持续时间", + "AudioEditorSettings.TransitionDurationTooltip": "淡入淡出或者延迟时间的具体秒数。如果选用的是 Trigger rate 类型,这里就是下一个声音被触发前需要度过的时间。\n\n如果过渡方式选择了 Sample Accurate 样本精确选项,滑块将被禁用不可用。\n\n范围介于0到3600秒之间。单次淡入淡出的最大持续时间等于音效长度的一半。如果强行设置的时长超过了限制,Wwise 引擎在运行时会自动将其调整至允许的最大值而不会产生报错,所以在设置时需要格外注意合理性。", + "AudioProjectViewer.EditRow": "编辑行", + "AudioProjectViewer.EditRowTooltip": "将此选中行从音频工程查看器中抽出,放入音频工程编辑器以方便修改属性配置。\n\n快捷键:Ctrl + E", + "AudioProjectViewer.RemoveRow": "移除行", + "AudioProjectViewer.RemoveRowTooltip": "从音频工程中直接移除选中的行。\n\n快捷键:Delete 或 Backspace", + "AudioProjectViewer.DataGridTooltip": "选择后可对行进行修改编辑或移除。\n\n如需复制和粘贴行 (仅支持对话事件行 Dialogue Events),请选中后点击右键,或使用对应的快捷键:\n复制:Ctrl + C\n粘贴:Ctrl + V", + "AudioProjectViewer.RowControlledTooltip": "无法直接选中修改此行,因为该行受到其对应的 \"Play_...\" 前置动作事件的接管控制。", + "AudioProjectExplorer.DialogueEventFilters": "对话事件过滤器", + "AudioProjectExplorer.SelectDialogueType": "选择对话事件类型进行过滤", + "AudioProjectExplorer.DialogueTypeTooltip": "对话事件类型指的是游戏内此对话事件在何种行为场景触发。选中类型以进行相应的树状图筛选。", + "AudioProjectExplorer.SelectDialogueProfile": "选择对话事件概况以进行过滤", + "AudioProjectExplorer.DialogueProfileTooltip": "对话事件概况指的是此对话的大致配置属性方向特征。选中对应特征以进行相应的树状图筛选。", + "AudioProjectExplorer.GeneralFilters": "通用过滤器", + "AudioProjectExplorer.ShowEditedOnly": "仅显示已编辑的项", + "AudioProjectExplorer.ShowEditedOnlyTooltip": "只展示树状图中被您修改过的项目信息,隐藏其它所有项目。", + "AudioProjectExplorer.ShowActionEvents": "显示动作事件", + "AudioProjectExplorer.ShowActionEventsTooltip": "决定树状图中是否显示所有的 Action Events 动作事件。", + "AudioProjectExplorer.ShowDialogueEvents": "显示对话事件", + "AudioProjectExplorer.ShowDialogueEventsTooltip": "决定树状图中是否显示所有的 Dialogue Events 对话事件。", + "AudioProjectExplorer.ToggleTree": "全部展开 / 收起 树状图", + "AudioProjectExplorer.ToggleTreeTooltip": "点击展开或者收起树状图列表下的所有分支。", + "AudioProjectExplorer.ResetFilters": "重置过滤器", + "AudioProjectExplorer.SearchAudioProject": "在此搜索音频工程结构", + "AudioProjectEditor.AddRow": "添加行", + "AudioProjectEditor.AddRowTooltip": "将这行属性新加入到音频工程中。\n\n快捷键:Ctrl + Q", + "AudioProjectEditor.ShowModdedStates": "下拉菜单仅展示 Mod 定义的 States", + "AudioProjectEditor.ShowModdedStatesTooltip": "开启此项,下拉选择框中就只会出现 Mod Pack 新定义的 States,而游戏原版的所有 States 都会被隐藏掉方便寻找。", + "AudioFilesExplorer.SetAudioFiles": "设定音频文件", + "AudioFilesExplorer.SetAudioFilesTooltip": "将在此处选中高亮的一个或多个音频文件设置为音频工程配置中使用的主要音频。", + "AudioFilesExplorer.AddAudioFiles": "追加至音频列表", + "AudioFilesExplorer.AddAudioFilesTooltip": "将在此处选中的文件,追加到之前已经加入音频工程配置的列表集合中。", + "AudioFilesExplorer.SearchAudioFiles": "在此搜索音频文件", + "AudioEditor.NewProject": "新建音频工程", + "AudioEditor.OpenProject": "打开音频工程", + "AudioEditor.SaveProject": "保存音频工程", + "AudioEditor.CompileProject": "编译音频工程 (Compile)", + "AudioEditor.RefreshSourceIds": "刷新资源 Source Ids", + "FBXSettings.SkeletonFile": "骨骼文件:", + "FBXSettings.NotImplemented": "暂未实现功能", + "FBXSettings.BrowseAnim": "浏览选择 .ANIM 文件...", + "FBXSettings.SkeletonName": "骨骼名称:", + "FBXSettings.SkeletonNameTooltip": ".FBX 文件中存储的根骨骼名称。\n会一并用于写入最终的 .rigid_model_v2 中。\n如有需要请手动在上方填入名称纠正。", + "FBXSettings.AttemptAutoRig": "尝试进行自动蒙皮绑定", + "FBXSettings.AnimationsInfo": "动画详细信息", + "FBXSettings.ApplyWeighting": "应用顶点权重", + "FBXSettings.FileInfo": "文件信息", + "FBXSettings.FileName": "文件名称", + "FBXSettings.SdkVersion": "SDK 版本", + "FBXSettings.Units": "单位", + "FBXSettings.NodeCount": "节点数量", + "FBXSettings.MeshCount": "网格数量", + "FBXSettings.MaterialCount": "材质数量", + "FBXSettings.AnimationCount": "动画数量", + "FBXSettings.BoneCount": "骨骼节点数量", + "FBXSettings.DeformationData": "是否包含形变蒙皮数据", + "AnimReTarget.SavePrefix": "导出文件名前缀", + "AnimReTarget.Format": "导出格式:", + "AnimReTarget.UseGeneratedSkeleton": "使用重新生成的骨骼", + "AnimReTarget.ExportMesh": "导出使用当前缩放的 网格/骨骼", + "AnimReTarget.BatchExport": "批量导出", + "AnimReTarget.RenderSettings": "渲染设置:", + "AnimReTarget.GeneratedMesh": "生成的网格模型", + "AnimReTarget.GeneratedSkeleton": "生成的骨骼节点", + "AnimReTarget.OffsetSpacing": "显示偏移间距", + "AnimReTarget.AnimationSettings": "动画设置:", + "AnimReTarget.SkeletonScale": "骨骼节点缩放", + "AnimReTarget.AnimSpeedMult": "动画速度倍率", + "AnimReTarget.ZeroUnmappedBones": "未映射骨骼坐标归零", + "AnimReTarget.ZeroUnmappedBonesTooltip": "将所有未绑定映射的骨骼的变换位置强行设定为0", + "AnimReTarget.ApplyRelativeScale": "应用相对缩放", + "AnimReTarget.ApplyRelativeScaleTooltip": "基于两端相对差异缩放骨骼长度", + "AnimReTarget.ApplySettings": "应用设置", + "AnimReTarget.OpenBoneMapping": "打开骨骼映射窗口", + "AnimReTarget.BoneSettings": "单骨骼节点设置:", + "AnimReTarget.SelectedBoneSettings": "当前选中骨骼的设置: ", + "AnimReTarget.TranslationOffset": "位移偏移量", + "AnimReTarget.RotationOffset": "旋转偏移量", + "AnimReTarget.BoneLengthMult": "骨骼长度倍率", + "AnimReTarget.FreezePosition": "冻结位置坐标", + "AnimReTarget.FreezePositionTooltip": "强行将该骨骼在动画中的运动位置设定为 0,0,0 (原点)", + "AnimReTarget.FreezeRotation": "冻结旋转", + "AnimReTarget.FreezeRotationTooltip": "强行将该骨骼在动画中的所有旋转设定为 0,0,0 (完全不旋转)", + "AnimReTarget.FreezeRotationZ": "冻结 Z 轴旋转", + "AnimReTarget.FreezeRotationZTooltip": "冻结骨骼旋转在 0,0,将其在动画第一帧的Z轴旋转固定到全部动画", + "AnimReTarget.SnapWorldspace": "吸附至世界空间 (Snap worldspace)", + "AnimReTarget.SnapWorldspaceTooltip": "直接将该骨骼动画的变换强行等同于目标,不应用任何中间层重定向计算", + "AnimReTarget.ApplyTranslation": "应用平移转换", + "AnimReTarget.ApplyRotation": "应用旋转转换", + "AnimReTarget.IsRelativeTo": "基于目标相关对齐", + "AnimReTarget.ClearBoneSettings": "清空选中骨骼的特例设置", + "AnimationTransfer.VisibilityGenerated": "显示内容 - 实时生成效果", + "AnimationTransfer.Mesh": "网格 | ", + "AnimationTransfer.Skeleton": "骨架 | ", + "AnimationTransfer.Offset": "位移偏移:", + "AnimationTransfer.Config": "配置", + "AnimationTransfer.RootBoneWarBeast": "用于 War Beast (战争巨兽类型) 转换的根节点骨骼", + "AnimationTransfer.ConvertToWarBeast": "将其转换为 War Beast 动画!", + "AnimationPack.PackfilesToConvert": "需要批量转换的 Pack 文件列表:", + "AnimationPack.OutputFormat": "导出格式:", + "AnimationPack.BatchNote": "注意: 不能把正在编辑的 active packfile 用作被转换项", + "MountAnimation.SaveAndPreview": "保存并预览:", + "MountAnimation.UpdatePreview": "更新预览", + "MountAnimation.SelectedFragment": "选中的碎片 (Fragment):", + "MountAnimation.SelectedSlot": "选中的动画槽位: ", + "MountAnimation.SaveToFragment": "保存动画至碎片设置", + "MountAnimation.SaveCurrent": "保存当前内容", + "MountAnimation.BatchSaveUsingTable": "使用 Table 批量保存", + "MountAnimation.BatchSaveUsingFragment": "使用 坐骑/骑手 碎片数据进行批量保存", + "MountAnimation.EnsureUnique": "保证唯一命名:", + "MountAnimation.AnimVersion": "动画版本:", + "MountAnimation.VisualisationHelp": "辅助显示帮助:", + "MountAnimation.SnapCameraToBone": "将相机吸附跟随至骨骼", + "MountAnimation.DisplayPreviewMesh": "显示预览的网格模型", + "MountAnimation.DisplayPreviewSkeleton": "显示预览的骨骼结构", + "MountAnimation.BatchProcessOptions": "批量操作配置", + "MountAnimation.AnimPack": "AnimPack 动画包", + "MountAnimation.Animations": "各类动画", + "MountAnimation.Create": "创建", + "MountAnimation.MountLinkShortcut": "坐骑绑定快捷指向:", + "MountAnimation.Mount": "坐骑", + "MountAnimation.Rider": "骑手", + "MountAnimation.MountTag": "坐骑匹配 Tag 标签", + "MountAnimation.RiderTag": "骑手匹配 Tag 标签", + "MountAnimation.RiderAttachment": "骑手装配点:", + "MountAnimation.RiderRootBone": "骑手根骨骼", + "MountAnimation.StaticLegsAnimation": "腿部静态绑定动画", + "MountAnimation.MountVertex": "对应的坐骑网格顶点", + "MountAnimation.FitAnimation": "对齐拟合动画", + "MountAnimation.LoopCounter": "重复循环计数", + "MountAnimation.TransOffset": "位移偏移", + "MountAnimation.KeepRiderRot": "保留骑手原始旋转", + "MountAnimation.IsRootNodeAnim": "属于根节点骨骼动画", + "MountAnimation.RefreshTool": "刷新工具配置", + "MountAnimation.CopyRiderAnimation": "将当前位置拷贝至全部帧中", + "CampaignAnimation.RootBone": "动画根节点骨骼", + "CampaignAnimation.Convert": "执行转换", + "AnimationKeyframe.Title": "动画关键帧编辑器 (Key Frame Editor)", + "AnimationKeyframe.DragHint": "<-- 拖拽左侧的拉边框以显示出各种按钮上的文字", + "AnimationKeyframe.Warning": "警告:请先保存以保留当前的工作进度!如果存在未保存的内容时,不要切换到其它的骑手/骑乘动画,否则进度会全部丢失", + "AnimationKeyframe.CurrentFrame": "你正在编辑动画的第 ", + "AnimationKeyframe.AllowSelectAnimroot": "允许选择 animroot 核心控制根节点", + "AnimationKeyframe.IncrementFrameCopy": "在执行复制帧操作后,帧数自动加一", + "AnimationKeyframe.SelectPreviousBones": "在切换帧时自动选中上一帧正在编辑的骨骼", + "AnimationKeyframe.EnableIK": "启用反向运动学IK (仍处于未完成测试状态,我们需要帮助!)", + "AnimationKeyframe.IKEndBone": "指定骨骼链的最末端节点 (用于IK结算):", + "AnimationKeyframe.FirstFrame": "第一帧", + "AnimationKeyframe.PrevFrame": "上一帧", + "AnimationKeyframe.NextFrame": "下一帧", + "AnimationKeyframe.LastFrame": "末尾帧", + "AnimationKeyframe.DuplicateFrame": "复制新建帧", + "AnimationKeyframe.RemoveFrame": "移除当前帧", + "AnimationKeyframe.ResetPose": "重置当前姿势", + "AnimationKeyframe.UndoPose": "撤销姿势更改", + "AnimationKeyframe.Select": "选择骨骼", + "AnimationKeyframe.SelectPreviousBones2": "选中之前的骨骼", + "AnimationKeyframe.Move": "位移骨骼", + "AnimationKeyframe.Rotate": "旋转骨骼", + "AnimationKeyframe.Scale": "缩放骨骼", + "AnimationKeyframe.PasteOperations": "粘贴 / 插值生成 操作中的勾选开关:", + "AnimationKeyframe.PastePosition": "粘贴影响对象的位置坐标", + "AnimationKeyframe.PasteRotation": "粘贴影响对象的旋转角度", + "AnimationKeyframe.PasteScale": "粘贴影响对象的缩放系数", + "AnimationKeyframe.CopyPose": "拷贝当前帧姿势", + "AnimationKeyframe.PastePose": "粘贴全部姿势", + "AnimationKeyframe.PastePoseSelected": "仅将姿势粘贴至前一步选中的骨骼节点中", + "AnimationKeyframe.CopyPastePrevious": "复制并粘贴上一次编辑过的局部骨骼节点", + "AnimationKeyframe.AnimationDuration": "当前动画整体持续时间:", + "AnimationKeyframe.Seconds": "秒", + "AnimationKeyframe.InRangeCopyHint": "用于在其他关键帧编辑器窗口中进行批量范围拷贝。 \n它将复制目标当前的帧状态,并在目标动画内按照下方设定的范围覆盖粘贴", + "AnimationKeyframe.CopyMultipleFrames": "复制/粘贴多个关键帧", + "AnimationKeyframe.DontWarnDifferentSkeletons": "即便两边骨骼不同也不要跳出报错提示", + "AnimationKeyframe.DontWarnIncomingFrames": "即便导入进来的帧数超出了当前动画原本的总帧数长度也不要跳出报错提示", + "AnimationKeyframe.PasteUsingForm": "如果勾选此项,在粘贴时会使用下方表格输入的具体范围;如果不勾选,则粘贴整个帧", + "AnimationKeyframe.PasteLength": "要粘贴的总长度:", + "AnimationKeyframe.SetMax": "设为最大允许值", + "AnimationKeyframe.FromClipboard": "从剪贴板读取", + "AnimationKeyframe.CopyPoseClipboard": "将当前帧的姿势拷贝入全局剪贴板...", + "AnimationKeyframe.PastePoseClipboard": "从全局剪贴板中读取全部姿势信息并粘贴...", + "AnimationKeyframe.PastePoseSelectedClipboard": "从全局剪贴板中读取前一步选中的骨骼节点姿势并粘贴...", + "AnimationKeyframe.InterpolationHint1": "在两个不同的帧状态之间插值计算生成平滑过渡", + "AnimationKeyframe.SelectedFrameA": "选定的源帧 A:", + "AnimationKeyframe.SelectedFrameB": "选定的目标帧 B:", + "AnimationKeyframe.InterpolationHint2": "拖拽滑块来控制当前对两边帧权重的取值混合程度,\n如果你觉得满意想要最终应用到当前帧,点击下方应用按钮。\n注意:想要启用插值预览你首先必须要设置 A 和 B 是哪一帧。", + "AnimationKeyframe.SelectFrameA": "将当前帧设定为帧 A", + "AnimationKeyframe.SelectFrameB": "将当前帧设定为帧 B", + "AnimationKeyframe.ApplyInterpolationCurrent": "在当前帧直接应用生成出的插值结果", + "AnimationKeyframe.ApplyInterpolationAcross": "跨越自动覆盖 A 和 B 之间的所有中间帧并插入计算出结果", + "AnimationKeyframe.LivePreviewInterpolation": "实时预览插值效果 (拖拽时将自动应用生成的插值效果)", + "AnimationKeyframe.InterpolationOnlySelectedBones": "插值计算仅针对当前选中的部分骨骼" } \ No newline at end of file diff --git a/AssetEditor/Language_En.json b/AssetEditor/Language_En.json index 22bbe25d9..0465bf7db 100644 --- a/AssetEditor/Language_En.json +++ b/AssetEditor/Language_En.json @@ -12,10 +12,643 @@ "SettingsWindow.GridSize": "Grid Size", "SettingsWindow.AudioModding": "Audio Modding", "SettingsWindow.SaveButton": "Save", - "UpdaterWindow.Title": "Updater", "UpdaterWindow.UpdateInfo": "A new version of AssetEditor is available!\n\nYour current version is {0}. Update to version {1} to get the latest changes detailed below.", "UpdaterWindow.ReleaseNotes": "Release Notes", "UpdaterWindow.UpdateButton": "Update", - "UpdaterWindow.CancelButton": "Cancel" + "UpdaterWindow.CancelButton": "Cancel", + "MenuBar.File": "_File", + "MenuBar.NewPack": "New Pack", + "MenuBar.NewAnimPackWh3": "New AnimPack (Warhammer III)", + "MenuBar.NewAnimPack3k": "New AnimPack (Three Kingdoms)", + "MenuBar.SaveActivePack": "Save active pack", + "MenuBar.OpenPack": "Open Pack", + "MenuBar.OpenRecentPacks": "Open Recent Packs", + "MenuBar.OpenGamePacks": "Open Game Packs", + "MenuBar.Game.Attila": "Attila", + "MenuBar.Game.RomeRemastered": "Rome Remastered", + "MenuBar.Game.ThreeKingdoms": "Three Kingdoms", + "MenuBar.Game.Warhammer2": "Warhammer II", + "MenuBar.Game.Warhammer3": "Warhammer III", + "MenuBar.Game.Troy": "Troy", + "MenuBar.Settings": "Settings", + "MenuBar.OpenAssetEditorFolder": "Open AssetEditor Folder", + "MenuBar.ClearAssetEditorFolder": "Clear AssetEditor Folder", + "MenuBar.Exit": "_Exit", + "MenuBar.View": "View", + "MenuBar.TogglePackBrowser": "Toggle Pack File Browser", + "MenuBar.Tools": "Tools", + "MenuBar.Reports": "Reports", + "MenuBar.Reports.Rmv2": "Rmv2", + "MenuBar.Reports.MetaData": "Meta Data", + "MenuBar.Reports.FileList": "File List", + "MenuBar.Reports.MetaJsons": "Meta Jsons", + "MenuBar.Reports.Materials": "Materials", + "MenuBar.Reports.DialogueEventsStateGroups": "Dialogue Events with State Groups", + "MenuBar.Reports.DialogueEventNames": "Dialogue Event and Event Names", + "MenuBar.Reports.DatDump": "Dat Dump", + "MenuBar.Search": "Search", + "MenuBar.TouchedFiles": "Touched Files", + "MenuBar.TouchedFiles.StartRecorder": "Start Recorder", + "MenuBar.TouchedFiles.PrintFiles": "Print Files", + "MenuBar.TouchedFiles.ExtractToPack": "Extract to Pack", + "MenuBar.TouchedFiles.StopRecorder": "Stop Recorder", + "MenuBar.Debug.ClearConsole": "Debug - Clear Console", + "MenuBar.Debug.PrintScopes": "Debug - Print Scopes", + "MenuBar.Help": "Help", + "MenuBar.Help.ModdingWiki": "Modding Wiki", + "MenuBar.Help.VideoTutorials": "Video Tutorials", + "MenuBar.Help.Tutorial.AssetEdBasics1": "AssetEditor Basics 1", + "MenuBar.Help.Tutorial.AssetEdBasics2": "AssetEditor Basics 2", + "MenuBar.Help.Tutorial.SkragReskin": "Skrag Reskin", + "MenuBar.Help.Tutorial.TzarGuardGun": "Tzar Guard with Gun", + "MenuBar.Help.Tutorial.KostaltynReskin": "Kostaltyn Reskin", + "MenuBar.Help.Tutorial.RecolouringModels": "Recolouring Models", + "MenuBar.Help.Tutorial.AnimationBasics": "Animation Basics", + "MenuBar.Help.Tutorial.AnimatedProps": "Animated Props and Custom Animation Packs", + "MenuBar.Help.Discord": "Discord", + "MainWindow.Titlebar.Minimise": "Minimise", + "MainWindow.Titlebar.Maximise": "Maximise", + "MainWindow.Titlebar.Close": "Close", + "MainWindow.Tabs.ContextMenu.Close": "Close", + "MainWindow.Tabs.ContextMenu.CloseMultiple": "Close Multiple", + "MainWindow.Tabs.ContextMenu.CloseOtherTabs": "Close Other Tabs", + "MainWindow.Tabs.ContextMenu.CloseAllTabs": "Close All Tabs", + "MainWindow.Tabs.ContextMenu.CloseTabsToLeft": "Close Tabs To Left", + "MainWindow.Tabs.ContextMenu.CloseTabsToRight": "Close Tabs To Right", + "SettingsWindow.Title": "Settings", + "SettingsWindow.GameFiles": "Game Files", + "SettingsWindow.Tooltip.OnlyLoadLod0": "When importing a reference mesh in the Kitbash tool, only import Lod0 in order to save memory.", + "SettingsWindow.Tooltip.GridSize": "Size of the grid in visual editors", + "SettingsWindow.Tooltip.BrowseGameData": "Browse for game data location e.g. \"C:\\SteamLibrary\\steamapps\\common\\Total War WARHAMMER III\\data\"", + "SettingsWindow.WwiseCLI": "Wwise CLI", + "SettingsWindow.Tooltip.WwiseCLI": "e.g. \"C:\\Program Files (x86)\\Audiokinetic\\Wwise2019.2.15.7667\\Authoring\\x64\\Release\\bin\\WwiseCLI.exe\"", + "AnimationPack.Menu.File": "_File", + "AnimationPack.Menu.Save": "Save", + "AnimationPack.Menu.NewAnimSet": "New AnimationSet (Wh3/3K)", + "AnimationPack.Menu.ExportAnimSlotsWh3": "Export animation slots (Wh3)", + "AnimationPack.Menu.ExportAnimSlotsWh2": "Export animation slots (Wh2)", + "AnimationPack.FilterWatermark": "Filter, Regex", + "AnimationPack.ContextMenu.Rename": "Rename", + "AnimationPack.ContextMenu.Remove": "Remove", + "AnimationPack.ContextMenu.CopyFullPath": "Copy Full Path", + "TextureEditor.UvChannels": "Uv Channels", + "TextureEditor.Format": "Format", + "TextureEditor.Width": "Width", + "TextureEditor.Height": "Height", + "TextureEditor.NumMipMaps": "Num MipMaps", + "TextureEditor.ImageDetails": "Image Details", + "TextureEditor.ImagePath": "Image Path:", + "TwuiEditor.Component.String": "String", + "TwuiEditor.Component.Float": "Float", + "TwuiEditor.Component.Vector2": "Vector2", + "TwuiEditor.Component.Bool": "Bool", + "TwuiEditor.Hierarchy.Filter": "Filter", + "TwuiEditor.Hierarchy.Search": "Search...", + "TwuiEditor.Hierarchy.ToggleSelected": "Toggle selected", + "Kitbash.Bmi.CheckAllChildren": "Check all children", + "Kitbash.Bmi.UncheckAllChildren": "Un-check all children", + "Kitbash.Bmi.ScaleFactor": "Scale factor:", + "Kitbash.Bmi.Apply": "Apply", + "Kitbash.MeshFitter.Title": "Mesh Fitter Tool", + "Kitbash.MeshFitter.Apply": "Apply", + "Kitbash.MeshFitter.Ok": "OK", + "Kitbash.MeshFitter.Cancel": "Cancel", + "Kitbash.PinTool.Title": "Pin Tool", + "Kitbash.PinTool.InstructionsHeader": "Instructions", + "Kitbash.PinTool.InstructionsText": "1. Select mode:\n'Pin': for things which should not bend\n'Skin wrap': for things which should deform\n2. Select meshes which should get new animation\n3. Select the meshes to take animation from\n'Pin': go into vertex mode and press button with a vertex selected\n'Skin wrap': select mesh\n4. Press Apply", + "Kitbash.PinTool.TransferMode": "Animation transfer mode:", + "Kitbash.PinTool.ApplyTo": "Apply animation to:", + "Kitbash.PinTool.AddSelected": "Add selected meshes", + "Kitbash.PinTool.RemoveAll": "Remove all", + "Kitbash.PinTool.TakeFromPin": "Take animation from (PinMode):", + "Kitbash.PinTool.Source": "Source:", + "Kitbash.PinTool.SetFromVertex": "Set from selected Vertex", + "Kitbash.PinTool.TakeFromSkinWrap": "Take AnimationFrom (SkinWrapMode):", + "Kitbash.PinTool.Mesh": "Mesh:", + "Kitbash.PinTool.SetFromSelection": "Set from selection", + "Kitbash.ReRigging.Title": "Re-Rigging Tool", + "Kitbash.SaveDialog.Title": "Save", + "Kitbash.SaveDialog.Path": "Path:", + "Kitbash.SaveDialog.Browse": "Browse", + "Kitbash.SaveDialog.MeshFormat": "Mesh Format:", + "Kitbash.SaveDialog.WsModelFormat": "WS model Format:", + "Kitbash.SaveDialog.LodStrategy": "Lod Stategy:", + "Kitbash.SaveDialog.NumLods": "Number of lods:", + "Kitbash.SaveDialog.NumLodsTooltip": "Number of lods that will be generated. Normal is 4, large models have 5 and some special models have 1", + "Kitbash.SaveDialog.LodInfo": "Lod Info:", + "Kitbash.SaveDialog.Index": "Index", + "Kitbash.SaveDialog.Distance": "Distance", + "Kitbash.SaveDialog.QltLevel": "Qlt Level", + "Kitbash.SaveDialog.ReductionFactor": "Reduction Factor", + "Kitbash.SaveDialog.MergeAlpha": "Merge Alpha", + "Kitbash.SaveDialog.FastAnimVertex": "Fast AnimVertex", + "Kitbash.SaveDialog.NumPolygons": "Num Polygons", + "Kitbash.SaveDialog.NumMeshes": "Num Meshes", + "Kitbash.SaveDialog.NumTextures": "Num Textures", + "Kitbash.SaveDialog.OnlySaveVisible": "Only save visible nodes", + "Kitbash.VertexDebugger.Title": "Vertex Debugger", + "Kitbash.VertexDebugger.NormalScale": "Normal debug scale:", + "Kitbash.VertexDebugger.ShowStats": "Show Statistics", + "Common.Ok": "Ok", + "Common.OK": "OK", + "Common.Cancel": "Cancel", + "Common.Save": "Save", + "Common.SaveAs": "Save as", + "Common.Close": "Close", + "Common.Apply": "Apply", + "Common.Open": "Open", + "Common.Delete": "Delete", + "Common.Copy": "Copy", + "Common.Paste": "Paste", + "Common.Undo": "Undo", + "Common.New": "New", + "Common.Duplicate": "Duplicate", + "Common.Rename": "Rename", + "Common.Remove": "Remove", + "Common.Browse": "Browse...", + "Common.BrowseEllipsis": "...", + "Common.Clear": "Clear", + "Common.Filter": "Filter:", + "Common.SearchFilterWatermark": "Search filter, regEx supported", + "Common.SelectAll": "Select All", + "Common.DeselectAll": "Deselect All", + "Common.Name": "Name", + "Common.Format": "Format", + "Common.Width": "Width", + "Common.Height": "Height", + "Common.Set": "Set", + "Common.Reset": "Reset", + "Common.Count": "Count = ", + "Common.FocusSelection": "Focus Selection", + "Common.ResetCamera": "Reset", + "Common.General": "General", + "Common.Camera": "Camera", + "Common.Refresh": "Refresh", + "SkeletonEditor.Title": "Skeleton Editor:", + "SkeletonEditor.Skeleton": "Skeleton", + "SkeletonEditor.Load": "Load", + "SkeletonEditor.RefMesh": "Ref Mesh", + "SkeletonEditor.Settings": "Settings:", + "SkeletonEditor.SourceSkeleton": "Source Skeleton", + "SkeletonEditor.SelectedBoneScale": "Selected Bone Scale", + "SkeletonEditor.FocusSelectedBone": "Focus selected bone", + "SkeletonEditor.WorldTransforms": "World transforms", + "SkeletonEditor.IsTechSkeleton": "Is Tech skeleton", + "SkeletonEditor.SelectedBone": "Selected bone:", + "SkeletonEditor.Translation": "Translation", + "SkeletonEditor.Rotation": "Rotation", + "SkeletonEditor.LengthScale": "Length Scale", + "SkeletonEditor.Bake": "Bake", + "ErrorWindow.Title": "Error", + "ErrorWindow.ForceClose": "Emergency - Force Close Current Window", + "ErrorWindow.CloseError": "Close Error window", + "ErrorWindow.CopyToClipboard": "Copy to Clipboard", + "ErrorWindow.MessageDesc": "If this error was unexpected, please press the copy button and provide the text dump to the developers through discord or github.\nThe Clipboard contains more information then what is displayed! \n \nDiscord: https://discord.gg/moddingden \nGithub: https://github.com/donkeyProgramming/TheAssetEditor/issues", + "ErrorWindow.ExtraInformation": "Extra information", + "ErrorWindow.ErrorMessage": "Error Message", + "ErrorList.SaveReport": "Save Report", + "ErrorList.Error": "Error", + "ErrorList.Item": "Item", + "ErrorList.Description": "Description", + "SelectionList.IsChecked": "IsChecked", + "PackFileBrowser.Title": "PackFile Explorer", + "PackFileBrowser.Search": "Search PackFile Explorer (Ctrl+Shift+F)", + "RenderSettings.Title": "Render settings", + "RenderSettings.UseBackfaceCulling": "Use backface culling", + "RenderSettings.UseLargeSceneCulling": "Use Large scene culling", + "RenderSettings.ShowGrid": "Show grid", + "RenderSettings.GridColour": "Grid colour", + "RenderSettings.FactionColours": "Faction colours", + "RenderSettings.LightIntensity": "Light intensity", + "RenderSettings.EnvLightRotationX": "Env light rotation X", + "RenderSettings.DirectLightRotationX": "Direct light rotation X", + "RenderSettings.DirectLightRotationY": "Direct light rotation Y", + "ShaderTextureView.ApplyTexture": "Apply texture when rendering", + "ShaderTextureView.RemoveTexture": "Remove texture and replace with default mask", + "ShaderTextureView.BrowseFile": "Browse for new file", + "ShaderTextureView.PreviewTexture": "Preview the texture", + "TwuiHierarchy.Search": "Search...", + "BoneMapping.RootScale": "Root scale", + "BoneMapping.OnlyMoveSelectedBone": "Only move selected bone ", + "BoneMapping.RelativeScale": "Relative Scale:", + "BoneMapping.DisplayOffset": "Display offset", + "BoneMapping.PosOffset": "Pos offset", + "BoneMapping.RotOffset": "Rot offset", + "BoneMapping.Scale": "Scale", + "BoneMapping.CopyToChildren": "Copy to children", + "BoneMapping.ResetOffsets": "Reset offsets", + "BoneMapping.CurrentModelBones": "Current model bones - ", + "BoneMapping.OnlyShowUsedBones": "Only show used bones", + "BoneMapping.AutoMapByName": "Auto map based on name", + "BoneMapping.AutoMapByHierarchy": "Auto map based on hierarchy", + "BoneMapping.DeleteSelf": "Delete self", + "BoneMapping.DeleteSelfAndChildren": "Delete self and children", + "BoneMapping.CopyToAllChildren": "Copy to to all children", + "BoneMapping.TargetModelBones": "Target Model Bones - ", + "SceneObjectView.Mesh": "Mesh", + "SceneObjectView.Skeleton": "Skeleton", + "SceneObjectView.Fragment": "Fragment", + "SceneObjectView.Slot": "Slot", + "SceneObjectView.AnimationFile": "Animation File", + "SceneObjectView.MetaFile": "Meta File", + "SceneObjectView.PersistMetaFile": "Persist Meta File", + "EditorHost.SaveShortcutFile": "Save shortcut file", + "EditorHost.SceneContent": "Scene content:", + "AnimationPlayer.Animation": "Animation", + "AnimationPlayer.MainAnimation": "Main animation:", + "AnimationPlayer.Frame": "Frame ", + "AnimationPlayer.Separator": " / ", + "AnimationPlayer.Time": "Time[", + "AnimationPlayer.FPS": " fps]", + "AnimationPlayer.Loop": "Loop", + "AnimationPlayer.Player": "Player", + "AnimationPlayer.Frames": "Frames", + "AnimationMeta.Persistent": "Persistent", + "AnimationMeta.Animation": "Animation", + "AnimationMeta.Description": "Decription:", + "AnimationMeta.MetaDataV": "Meta Data (v", + "AnimationMeta.Entries": ") Entries:", + "AnimationMeta.Up": "Up", + "AnimationMeta.Down": "Down", + "AnimationMeta.CreateEntry": "Create MetaData entry", + "KitbashSkeleton.SkeletonInformation": "Skeleton Information:", + "KitbashSkeleton.NodeScale": "Node scale", + "KitbashSkeleton.NodeScaleTooltip": "Scaling the skeleton will make the mesh look dragged unless the mesh is also exported", + "TintAndFaction.Title": "Tint and Faction", + "TintAndFaction.PreviewCapability": "Preview capability", + "TintAndFaction.TintMask": "Tint Mask", + "TintAndFaction.TintColour": "Tint Colour", + "TintAndFaction.Variation": "Variation:", + "TintAndFaction.UseFactionColours": "Use faction colours", + "TintAndFaction.FactionColour3Mask": "Faction Colour 3 Mask", + "RMV2WeightedMaterial.Title": "RMV2 Weighted Material - Details", + "RMV2WeightedMaterial.Filter": "Filter", + "RMV2WeightedMaterial.MatrixIndex": "MatrixIndex", + "RMV2WeightedMaterial.SetToDefault": "Set to default", + "RMV2WeightedMaterial.ParentMatrixIndex": "ParentMatrixIndex", + "RMV2WeightedMaterial.RmvVertexFormat": "Rmv Vertex format", + "RMV2WeightedMaterial.RmvMaterialId": "Rmv Material Id", + "RMV2WeightedMaterial.TransformInfo": "TransformInfo", + "RMV2WeightedMaterial.StringParams": "String params", + "RMV2WeightedMaterial.FloatParams": "Float params", + "RMV2WeightedMaterial.IntParams": "Int params", + "RMV2WeightedMaterial.TextureParams": "Texture params", + "RMV2WeightedMaterial.AttachmentParams": "Attachment params", + "RMV2WeightedMaterial.Vec4Params": "Vec4 params", + "SpecGloss.Title": "SpecGloss", + "SpecGloss.UseAlpha": "Use Alpha", + "SpecGloss.DiffuseMap": "Diffuse Map", + "SpecGloss.SpecularMap": "Specular Map", + "SpecGloss.GlossMap": "GlossMap Map", + "SpecGloss.NormalMap": "Normal Map", + "SpecGloss.Mask": "Mask", + "ModelMaterial.Title": "Model Material", + "ModelMaterial.SelectedShader": " Selected Shader", + "MetalRough.Title": "MetalRough", + "MetalRough.BaseColour": "Base Colour", + "MetalRough.MaterialMap": "Material Map", + "Emissive.Title": "Emissive", + "Emissive.Distortion": "Emissive Distortion*", + "Emissive.Direction": "Emissive Direction*", + "Emissive.DistortStrength": "E Distort Strength*", + "Emissive.FresnelStrength": "E Fresnel Strength", + "Emissive.Tint": "Emissive Tint", + "Emissive.Gradient1": "Emissive Gradient 1", + "Emissive.Time": "Time", + "Emissive.Gradient2": "Emissive Gradient 2", + "Emissive.Gradient3": "Emissive Gradient 3", + "Emissive.Gradient4": "Emissive Gradient 4", + "Emissive.Speed": "Emissive Speed", + "Emissive.PulseSpeed": "Emissive Pulse Speed*", + "Emissive.PulseStrength": "Emissive Pulse Strength*", + "Emissive.Strength": "Emissiv Strength", + "Emissive.Tiling": "Emissive Tiling", + "Blood.Title": "Blood", + "Blood.ReceivesBlood": "Receives blood", + "Blood.BloodUvScale": "Blood Uv Scale", + "Blood.TextureBloodMap": "Texture - Blood map", + "AdvancedRMV.Title": "Advanced RMV", + "AdvancedRMV.UseDirt": "Use Dirt", + "AdvancedRMV.UseDecal": "Use Decal", + "AdvancedRMV.UseSkin": "Use Skin", + "AdvancedRMV.DirtMap": "Dirt Map", + "AdvancedRMV.DirtMask": "Dirt Mask", + "AdvancedRMV.SkinMask": "Skin Mask", + "AdvancedRMV.DecalMask": "Decal Mask", + "AdvancedRMV.UvScale": "Uv Scale", + "AdvancedRMV.TextureTransform": "Texture transform", + "MeshView.VertexType": "Vertex Type", + "MeshView.Size": "Size", + "MeshView.VertexCount": "Vertex Count:", + "MeshView.IndexCount": "Index Count:", + "MeshView.RenderBbox": "Render Bbox", + "MeshView.Pivot": "Pivot", + "MeshView.CopyToAllMeshes": "Copy to all meshes", + "MeshView.ReduceLods": "Reduce Lods", + "Rmv2AnimationView.SkeletonName": "Skeleton Name", + "Rmv2AnimationView.Bones": "Bones", + "Rmv2AnimationView.BoneIndex": "BoneIndex", + "Rmv2AnimationView.AttachTo": "Attach To", + "Rmv2AnimationView.AnimationMatrix": "Animation Matrix ", + "MainNode.Title": "Main Node:", + "MainNode.TargetAnim": "Target Anim", + "MainNode.CopyTexturesToPack": "Copy textures to pack", + "MainNode.Convertion": "Convertion:", + "MainNode.AttachmentPoints": "Attachment points", + "MainNode.BoneId": "Bone Id", + "MainNode.UseBoneOrientation": "Use Bone Orientation", + "MainNode.CreateAttachmentPoints": "Create AttachmentPoints from Skeleton", + "GroupView.GroupInformation": "Group Information:", + "GroupView.GroupName": "Group name", + "KitbasherView.VertexFalloff": "Vertex Fall-of:", + "KitbasherView.VertexFalloffTooltip": "Fall of distance for selected vertexes", + "Import.SelectedFile": "Selected File", + "Import.CreateProject": "Create Import project ", + "Import.AvailableImporters": "Available Importers", + "Import.ImporterSettings": "Importer Settings:", + "Import.Import": "Import", + "Import.ImportMeshes": "Import Meshes", + "Import.ImportMeshesTooltip": "Make a TW WH3/3K compatible material from a Blender Material Map", + "Import.ImportMaterials": "Import Materials", + "Import.ImportMaterialsTooltip": "Import Materials From RMV File, convert to TW material", + "Import.ConvertMaterialMap": "Convert Material Map From Blender To TW format", + "Import.ConvertNormalMap": "Convert Normal Map From Blue To Orange Type", + "Import.ConvertNormalMapTooltip": "Convert the normal map texture from blue type into to orange type. \r\n - Blue type is used by most 3d software, including blender, substance painter. \r\n - Orange type is a specialal \"compressed\" 2 channel type, used by TW, and some other games.", + "Import.ImportAnimations": "Import Animations ", + "Import.ImportAnimationsTooltip": "Import Animations From GLTF File, convert to TW ANIM;", + "Import.NumberKeySamples": "Number of Key Samples Per Second ", + "Export.ExportTextures": "Export Textures", + "Export.ConvertMaterial": "Convert Material", + "Export.ConvertMaterialTooltip": "Convert the Material texture into the version Blender prefers", + "Export.ConvertNormal": "Convert Normal", + "Export.ConvertNormalTooltip": "Convert the normal map texture into blue version - used by a lot of software, including blender", + "Export.ExportAnimations": "Export Animations ", + "Export.SystemPath": "System Path", + "Export.AvailableExporters": "Available Exporters", + "Export.Export": "Export", + "Export.SwapMaterialRoughness": "Swap Material/Roughness (Blender)", + "DialogueEventMerger.Title": "Dialogue Event Merger", + "DialogueEventMerger.Description": "The Dialogue Event Merger is a tool for merging Dialogue Events from modded SoundBanks with Dialogue Events from vanilla into a single SoundBank. Read the tooltips for more information.", + "DialogueEventMerger.Suffix": "SoundBank Suffix", + "DialogueEventMerger.SuffixTooltip": "The suffix of your merged SoundBanks.", + "DialogueEventMerger.ModdedBanks": "Modded SoundBanks", + "DialogueEventMerger.ModdedBanksTooltip": "Select one or more modded SoundBanks from which their Dialogue Events will be merged with vanilla.", + "AudioProjectMerger.Title": "Audio Project Merger", + "AudioProjectMerger.Description": "The Audio Project Merger is a tool for merging two Audio Projects.", + "AudioProjectMerger.MergedName": "Merged Audio Project Name", + "AudioProjectMerger.MergedNameTooltip": "The name of your merged Audio Project.", + "AudioProjectMerger.OutputDir": "Output Directory Path", + "AudioProjectMerger.OutputDirTooltip": "The pack directory where the merged Audio Project is output to. There needs to be a file in the directory for it to show.", + "AudioProjectMerger.BasePath": "Base Audio Project Path", + "AudioProjectMerger.BasePathTooltip": "The path to the Audio Project that you want to merge the Merging Audio Project into.", + "AudioProjectMerger.MergingPath": "Merging Audio Project Path", + "AudioProjectMerger.MergingPathTooltip": "The path to the Audio Project that you want to merge into the base Audio Project.", + "AudioProjectConverter.Title": "Audio Project Converter", + "AudioProjectConverter.Description": "The Audio Project Converter is a tool for creating an Audio Project out of Dialogue Events in the provided .bnk files. It takes the VO Actor substring(s) and searches the Dialogue Events in the supplied .bnk files for their usage and converts that to the Audio Project format. Read the tooltips for more information.", + "AudioProjectConverter.ProjectName": "Audio Project Name", + "AudioProjectConverter.ProjectNameTooltip": "The name of your converted Audio Project.", + "AudioProjectConverter.VOActor": "VO Actor Substring", + "AudioProjectConverter.VOActorTooltip": "A substring common to all the VO Actor keys whose usage you want converted to the Audio Project format. You can include multiple substrings using a comma to separate them e.g. \"ovn_vo_actor_Araby, ovn_vo_actor_Albion\".", + "AudioProjectConverter.WemsDir": "Wems Directory Path", + "AudioProjectConverter.WemsDirTooltip": "A directory on your computer containing all the .wem files used in the soundbank (just use all wem files if you don't know which are used).", + "AudioProjectConverter.BnksDir": "Bnks Directory Path", + "AudioProjectConverter.BnksDirTooltip": "A directory on your computer containing all the .bnk files to be searched.", + "AudioProjectConverter.ConvertingFromWwise": "Converting Soundbanks from Wwise Project", + "AudioProjectConverter.ConvertingFromWwiseTooltip": "Tick this box if you need to get the States used in the soundbank from the Wwise project. There's no need to tick if you're converting a vanilla .bnk or the pack has a states_data.dat in the pack for the .bnk you're converting as that contains the States data for a or .bnk made by the Audio Editor.", + "AudioProjectConverter.SoundbanksInfo": "SoundbanksInfo.xml", + "AudioProjectConverter.SoundbanksInfoTooltip": "The path to the SoundbanksInfo.xml should be \"your_wwise_project_folder\\GeneratedSoundBanks\\Windows\\SoundbanksInfo.xml\". This contains the States data for the Wwise project.", + "AudioExplorer.SearchAction": "Search by Action Event", + "AudioExplorer.SearchDialogue": "Search by Dialogue Event", + "AudioExplorer.SearchVOActor": "Search by VO__Actor", + "AudioExplorer.SearchID": "Search by ID", + "AudioExplorer.Languages": "Languages", + "AudioExplorer.LoadLanguages": "Load Languages", + "AudioExplorer.PlayAudio": "Play Audio", + "AudioExplorer.WwiseObjectGraph": "Wwise Object Hierarchy Graph", + "NewAudioProject.Title": "New Audio Project", + "NewAudioProject.Location": "Location", + "NewAudioProject.LocationTooltip": "The folder location in the Pack the Audio Project should go.", + "NewAudioProject.Language": "Language", + "NewAudioProject.LanguageTooltip": "The game language of your Audio Project.", + "AudioEditorSettings.ResetSettings": "Reset Settings", + "AudioEditorSettings.ResetSettingsTooltip": "Resets all settings to default.", + "AudioEditorSettings.SetRecommendedVO": "Set Recommended VO Settings", + "AudioEditorSettings.SetRecommendedVOTooltip": "When multiple audio files are set, this sets the container's settings to what is recommended for a container containing VO audio files.\n\nShortcut: Ctrl + R", + "AudioEditorSettings.RemoveAudioFiles": "Remove Audio Files", + "AudioEditorSettings.RemoveAudioFilesTooltip": "Remove the selected Audio Files from the Settings.", + "AudioEditorSettings.ShowSettingsViewer": "Show Settings from Audio Project Viewer", + "AudioEditorSettings.ShowSettingsViewerTooltip": "When selecting items in the Audio Project Viewer with the selected the settings displayed will be that item's settings. When this is not selected the settings displayed will be the settings of the item in the Audio Project Editor.", + "AudioEditorSettings.AudioFiles": "Audio Files", + "AudioEditorSettings.FileName": "File Name", + "AudioEditorSettings.FilePath": "File Path", + "AudioEditorSettings.HircSettings": "Hirc Settings", + "AudioEditorSettings.ContainerType": "Container Type", + "AudioEditorSettings.ContainerTypeTooltip": "The Container Type determines the order in which objects are played.\n\nRandom - Plays objects at random.\nSequence - Plays objects in the sequence in which they were added.", + "AudioEditorSettings.RandomType": "Random Type", + "AudioEditorSettings.RandomTypeTooltip": "The Container Type determines the order in which objects are played.\n\nStandard - Plays objects at random.\nShuffle - Plays objects at random without repeating an object until the entire pool of objects has been played.", + "AudioEditorSettings.RepetitionInterval": "Repetition Interval", + "AudioEditorSettings.RepetitionIntervalTooltip": "Repitition Interval determines how many other objects must be played before an object can be repeated.\n\nIf Random Type is Standard, the object played is selected completely randomly, but the last n objects played are excluded from the list.\nIf Random Type is Shuffle, when the container is looped, the last n objects played will be excluded from the list.\nIf Random Type is Shuffle, non-looping and Play Mode continuous, the Repetition Interval has no effect on the playback of the container.", + "AudioEditorSettings.PlaylistEndBehaviour": "Playlist End Behaviour", + "AudioEditorSettings.PlaylistEndBehaviourTooltip": "Playlist End Behaviour determines how the container behaves after it has played the last object in the playlist.\n\nRestart - Plays the playlist in the same order.\nPlay In Reverse Order - Plays the playlist in reverse order.", + "AudioEditorSettings.PlayMode": "Play Mode", + "AudioEditorSettings.PlayModeTooltip": "The Play Mode determines whether a single object or the full playlist is played when triggered.\n\nStep - Plays one object in the playlist when triggered.\nContinuous - Plays the complete playlist when triggered.", + "AudioEditorSettings.AlwaysResetContainer": "Always Reset Container", + "AudioEditorSettings.AlwaysResetContainerTooltip": "Always Reset Container determines whether playback continues or returns to the start of the playlist when a container is replayed after being stopped during playback.", + "AudioEditorSettings.LoopingType": "Looping Type", + "AudioEditorSettings.LoopingTypeTooltip": "The Looping Type handles how many times a container is played.\n\nDisabled - The container does not loop playback.\nFinite Looping - The container playback loops according to the Number of Loops.\nInfinite Looping - The container playback loops infinitely.", + "AudioEditorSettings.NumberOfLoops": "Number of Loops", + "AudioEditorSettings.NumberOfLoopsTooltip": "The Number of Loops determines how many times a container is played if Looping Type is set to Finite Looping.", + "AudioEditorSettings.TransitionType": "Transition Type", + "AudioEditorSettings.TransitionTypeTooltip": "The Transition Type handles the transition between objects in the container.\n\nDisabled - No transition between objects.\nXfade (amp) - Adds a crossfade between two objects using constant amplitude.\nXfade (power) - Adds a crossfade between two objects using constant power.\nDelay - Adds a silence between two objects.\nSample accurate - Creates seamless transitions with no latency between objects.\nTrigger rate - Determines the rate at which new objects within the container will be played. This option is useful for simulating rapid gun fire.", + "AudioEditorSettings.TransitionDuration": "Transition Duration", + "AudioEditorSettings.TransitionDurationTooltip": "Transition Duration is the length of the crossfades or delay between clips. If Trigger rate is selected as the transition type, the duration defines the amount of time that will pass before the next sound is triggered.\n\nThe Duration slider is unavailable when the Sample Accurate option is selected.\n\nThe range is between 0 and 3600 seconds. The maximum duration of a crossfade is equal to half the duration of the sound. In cases where the crossfade time is longer than half the duration of the sound, the crossfade duration is automatically adjusted to the maximum allowed. This automatic adjustment is performed by the sound engine at run time. Wwise does not limit or indicate that the crossfade time is too long for some of the sounds in the container.", + "AudioProjectViewer.EditRow": "Edit Row", + "AudioProjectViewer.EditRowTooltip": "Removes the selected row from the Audio Project and adds it to the Audio Project Editor.\n\nShortcut: Ctrl + E", + "AudioProjectViewer.RemoveRow": "Remove Row", + "AudioProjectViewer.RemoveRowTooltip": "Removes the selected row(s) from the Audio Project.\n\nShortcuts: Delete / Backspace", + "AudioProjectViewer.DataGridTooltip": "To edit or remove rows select them.\n\nTo copy and paste rows (Dialogue Events rows only) select them and right-click or use the shortcuts:\nCopy: Ctrl + C\nPaste: Ctrl + V", + "AudioProjectViewer.RowControlledTooltip": "This row cannot be selected directly, it is controlled by the corresponding \"Play_...\" Action Event.", + "AudioProjectExplorer.DialogueEventFilters": "Dialogue Event Filters", + "AudioProjectExplorer.SelectDialogueType": "Select Dialogue Event Type Filter", + "AudioProjectExplorer.DialogueTypeTooltip": "Dialogue Event Type refers to the type of action or trigger in game that the Dialogue Event relates to. Select the Dialogue Event type to filter by that.", + "AudioProjectExplorer.SelectDialogueProfile": "Select Dialogue Event Profile Filter", + "AudioProjectExplorer.DialogueProfileTooltip": "The Dialogue Event profile refers to the Select the Dialogue Event profile to filter by that", + "AudioProjectExplorer.GeneralFilters": "General Filters", + "AudioProjectExplorer.ShowEditedOnly": "Show Edited Items Only", + "AudioProjectExplorer.ShowEditedOnlyTooltip": "Filters the Audio Project Explorer tree to show only items that have been edited.", + "AudioProjectExplorer.ShowActionEvents": "Show Action Events", + "AudioProjectExplorer.ShowActionEventsTooltip": "Filters the Audio Project Explorer tree to show or hide Action Events.", + "AudioProjectExplorer.ShowDialogueEvents": "Show Dialogue Events", + "AudioProjectExplorer.ShowDialogueEventsTooltip": "Filters the Audio Project Explorer Tree to show or hide Dialogue Events.", + "AudioProjectExplorer.ToggleTree": "Toggle Collapse / Expand Tree", + "AudioProjectExplorer.ToggleTreeTooltip": "Collapse / expand the tree.", + "AudioProjectExplorer.ResetFilters": "Reset Filters", + "AudioProjectExplorer.SearchAudioProject": "Search Audio Project Explorer", + "AudioProjectEditor.AddRow": "Add Row", + "AudioProjectEditor.AddRowTooltip": "Adds the row to the Audio Project.\n\nShortcut: Ctrl + Q", + "AudioProjectEditor.ShowModdedStates": "Show Modded States Only", + "AudioProjectEditor.ShowModdedStatesTooltip": "Shows only modded states in the drop downs rather than modded states and vanilla states.", + "AudioFilesExplorer.SetAudioFiles": "Set Audio Files", + "AudioFilesExplorer.SetAudioFilesTooltip": "Set the selected audio files as the audio files in the Settings.", + "AudioFilesExplorer.AddAudioFiles": "Add to Audio Files", + "AudioFilesExplorer.AddAudioFilesTooltip": "Add the selected audio files to the audio files already set in the Settings.", + "AudioFilesExplorer.SearchAudioFiles": "Search Audio Files Explorer", + "AudioEditor.NewProject": "New Audio Project", + "AudioEditor.OpenProject": "Open Audio Project", + "AudioEditor.SaveProject": "Save Audio Project", + "AudioEditor.CompileProject": "Compile Audio Project", + "AudioEditor.RefreshSourceIds": "Refresh Source Ids", + "FBXSettings.SkeletonFile": "Skeleton File:", + "FBXSettings.NotImplemented": "Not implemented yet", + "FBXSettings.BrowseAnim": "Browse .ANIM...", + "FBXSettings.SkeletonName": "Skeleton Name:", + "FBXSettings.SkeletonNameTooltip": "Skeleton name stored in .FBX File\nUsed in the .rigid_model_v2\nEnter name manually if needed.", + "FBXSettings.AttemptAutoRig": "Attemp Auto-Rig", + "FBXSettings.AnimationsInfo": "Animations Info", + "FBXSettings.ApplyWeighting": "Apply Weighting", + "FBXSettings.FileInfo": "File Info", + "FBXSettings.FileName": "File Name", + "FBXSettings.SdkVersion": "Sdk Version", + "FBXSettings.Units": "Units", + "FBXSettings.NodeCount": "NodeCount", + "FBXSettings.MeshCount": "Mesh Count", + "FBXSettings.MaterialCount": "Material Count", + "FBXSettings.AnimationCount": "Animation Count", + "FBXSettings.BoneCount": "Bone Count", + "FBXSettings.DeformationData": "Derformation Data", + "AnimReTarget.SavePrefix": "Save Prefix", + "AnimReTarget.Format": "Format:", + "AnimReTarget.UseGeneratedSkeleton": "Use generated skeleton", + "AnimReTarget.ExportMesh": "Export Mesh/skeleton at scale", + "AnimReTarget.BatchExport": "Batch export", + "AnimReTarget.RenderSettings": "Render Settings:", + "AnimReTarget.GeneratedMesh": "Generated Mesh", + "AnimReTarget.GeneratedSkeleton": "Generated Skeleton", + "AnimReTarget.OffsetSpacing": "Offset spacing", + "AnimReTarget.AnimationSettings": "Animation Settings:", + "AnimReTarget.SkeletonScale": "Skeleton Scale", + "AnimReTarget.AnimSpeedMult": "Animation speed mult", + "AnimReTarget.ZeroUnmappedBones": "Zero unmapped bones", + "AnimReTarget.ZeroUnmappedBonesTooltip": "Set the transform of all unmapped bones to 0", + "AnimReTarget.ApplyRelativeScale": "Apply Relative scale", + "AnimReTarget.ApplyRelativeScaleTooltip": "Scale bone length based on relative difference", + "AnimReTarget.ApplySettings": "Apply Settings", + "AnimReTarget.OpenBoneMapping": "Open Bone Mapping Window", + "AnimReTarget.BoneSettings": "Bone settings:", + "AnimReTarget.SelectedBoneSettings": "Settings for selected Bone: ", + "AnimReTarget.TranslationOffset": "Translation offset", + "AnimReTarget.RotationOffset": "Rotation offset", + "AnimReTarget.BoneLengthMult": "Bone length Mult", + "AnimReTarget.FreezePosition": "Freeze position", + "AnimReTarget.FreezePositionTooltip": "Set the bone position to 0,0,0", + "AnimReTarget.FreezeRotation": "Freeze Rotation", + "AnimReTarget.FreezeRotationTooltip": "Set the bone rotation to 0,0,0", + "AnimReTarget.FreezeRotationZ": "Freeze Rotation Z", + "AnimReTarget.FreezeRotationZTooltip": "Set the bone rotation to 0,0, to some rotation Z at frame 1", + "AnimReTarget.SnapWorldspace": "Snap worldspace", + "AnimReTarget.SnapWorldspaceTooltip": "Sets the bone transform to the same as the target, no magic attempted", + "AnimReTarget.ApplyTranslation": "Apply translation", + "AnimReTarget.ApplyRotation": "Apply Rotation", + "AnimReTarget.IsRelativeTo": "Is Relative to", + "AnimReTarget.ClearBoneSettings": "Clear selected bone settings", + "AnimationTransfer.VisibilityGenerated": "Visability - Generated", + "AnimationTransfer.Mesh": "Mesh | ", + "AnimationTransfer.Skeleton": "Skeleton | ", + "AnimationTransfer.Offset": "Offset:", + "AnimationTransfer.Config": "Config", + "AnimationTransfer.RootBoneWarBeast": "Root bone for animation war beast convert operation", + "AnimationTransfer.ConvertToWarBeast": "convert to war beast!", + "AnimationPack.PackfilesToConvert": "PackfilesToConvert:", + "AnimationPack.OutputFormat": "Output format:", + "AnimationPack.BatchNote": "Note: Can not batch process the active packfile", + "MountAnimation.SaveAndPreview": "Save and preview:", + "MountAnimation.UpdatePreview": "Update Preview", + "MountAnimation.SelectedFragment": "Selected fragment:", + "MountAnimation.SelectedSlot": "Selected slot: ", + "MountAnimation.SaveToFragment": "Save to fragment", + "MountAnimation.SaveCurrent": "Save current", + "MountAnimation.BatchSaveUsingTable": "Batch save using table", + "MountAnimation.BatchSaveUsingFragment": "Batch save using Mount/Rider fragment", + "MountAnimation.EnsureUnique": "Ensure unique:", + "MountAnimation.AnimVersion": "Anim Version:", + "MountAnimation.VisualisationHelp": "Visualisation help:", + "MountAnimation.SnapCameraToBone": "Snap camera to Bone", + "MountAnimation.DisplayPreviewMesh": "Display preview mesh", + "MountAnimation.DisplayPreviewSkeleton": "Display preview skelton", + "MountAnimation.BatchProcessOptions": "Batch Process Options", + "MountAnimation.AnimPack": "AnimPack", + "MountAnimation.Animations": "Animations", + "MountAnimation.Create": "Create", + "MountAnimation.MountLinkShortcut": "Mount link shortcut:", + "MountAnimation.Mount": "Mount", + "MountAnimation.Rider": "Rider", + "MountAnimation.MountTag": "Mount tag", + "MountAnimation.RiderTag": "Rider tag", + "MountAnimation.RiderAttachment": "Rider Attachment:", + "MountAnimation.RiderRootBone": "Rider root bone", + "MountAnimation.StaticLegsAnimation": "Static Legs Animation", + "MountAnimation.MountVertex": "Mount Vertex", + "MountAnimation.FitAnimation": "Fit animation", + "MountAnimation.LoopCounter": "Loop Counter", + "MountAnimation.TransOffset": "Trans offset", + "MountAnimation.KeepRiderRot": "Keep rider rot", + "MountAnimation.IsRootNodeAnim": "Is RootNode anim", + "MountAnimation.RefreshTool": "Refresh Tool", + "MountAnimation.CopyRiderAnimation": "Copy rider all animation frames", + "CampaignAnimation.RootBone": "Root bone", + "CampaignAnimation.Convert": "Convert", + "AnimationKeyframe.Title": "Animation Key Frame Editor", + "AnimationKeyframe.DragHint": "<-- Drag the border to reveal the buttons text", + "AnimationKeyframe.Warning": "WARNING: Do not change the rider animation before saving, otherwise you will lose progress", + "AnimationKeyframe.CurrentFrame": "You are currently editing frame Nr:", + "AnimationKeyframe.AllowSelectAnimroot": "Allow to select animroot node", + "AnimationKeyframe.IncrementFrameCopy": "Increment the frame after copy operation", + "AnimationKeyframe.SelectPreviousBones": "Select previous bones when frame changed", + "AnimationKeyframe.EnableIK": "Enable Inverse Kinematics (currently not completed, help needed!)", + "AnimationKeyframe.IKEndBone": "Last end of the bones chain (for IK):", + "AnimationKeyframe.FirstFrame": "First frame", + "AnimationKeyframe.PrevFrame": "Prev frame", + "AnimationKeyframe.NextFrame": "Next frame", + "AnimationKeyframe.LastFrame": "Last frame", + "AnimationKeyframe.DuplicateFrame": "Duplicate frame", + "AnimationKeyframe.RemoveFrame": "Remove frame", + "AnimationKeyframe.ResetPose": "Reset pose", + "AnimationKeyframe.UndoPose": "Undo pose", + "AnimationKeyframe.Select": "Select", + "AnimationKeyframe.SelectPreviousBones2": "Select previous bones", + "AnimationKeyframe.Move": "Move", + "AnimationKeyframe.Rotate": "Rotate", + "AnimationKeyframe.Scale": "Scale", + "AnimationKeyframe.PasteOperations": "on paste or interpolation operations:", + "AnimationKeyframe.PastePosition": "Paste position", + "AnimationKeyframe.PasteRotation": "Paste rotation", + "AnimationKeyframe.PasteScale": "Paste scale", + "AnimationKeyframe.CopyPose": "Copy Pose", + "AnimationKeyframe.PastePose": "Paste Pose", + "AnimationKeyframe.PastePoseSelected": "Paste Pose into previously selected nodes", + "AnimationKeyframe.CopyPastePrevious": "Copy n paste previous edited nodes", + "AnimationKeyframe.AnimationDuration": "Animation Duration:", + "AnimationKeyframe.Seconds": "seconds", + "AnimationKeyframe.InRangeCopyHint": "In range copy operations from other keyedframe editor window. \nIt will copy current frame and then paste in the destination animation up to desired length", + "AnimationKeyframe.CopyMultipleFrames": "Copy/paste multiple frames", + "AnimationKeyframe.DontWarnDifferentSkeletons": "Don't warn if the skeletons are different", + "AnimationKeyframe.DontWarnIncomingFrames": "Don't warn if the incoming total frames > this animation total frames", + "AnimationKeyframe.PasteUsingForm": "When pasting use the frame number ranges below, otherwise it will paste whole frames", + "AnimationKeyframe.PasteLength": "Paste Length:", + "AnimationKeyframe.SetMax": "Set Max", + "AnimationKeyframe.FromClipboard": "From clipboard", + "AnimationKeyframe.CopyPoseClipboard": "Copy Pose into global clipboard...", + "AnimationKeyframe.PastePoseClipboard": "Paste Pose from global clipboard...", + "AnimationKeyframe.PastePoseSelectedClipboard": "Paste Pose into previously selected nodes from global clipboard...", + "AnimationKeyframe.InterpolationHint1": "Interpolate between frame", + "AnimationKeyframe.SelectedFrameA": "Selected Frame A:", + "AnimationKeyframe.SelectedFrameB": "Selected Frame B:", + "AnimationKeyframe.InterpolationHint2": "Drag the slider to manipulate the blending between frames,\nto apply to the current frame, click apply interpolation on current frame.\nTo enable preview you need to select frame A and B.", + "AnimationKeyframe.SelectFrameA": "Select frame A", + "AnimationKeyframe.SelectFrameB": "Select frame B", + "AnimationKeyframe.ApplyInterpolationCurrent": "Apply interpolation on current frame", + "AnimationKeyframe.ApplyInterpolationAcross": "Apply interpolation across frame A to B", + "AnimationKeyframe.LivePreviewInterpolation": "Live preview interpolation (automatically applies interpolation)", + "AnimationKeyframe.InterpolationOnlySelectedBones": "Interpolation only on previously selected bones" } \ No newline at end of file diff --git a/AssetEditor/Language_Fr.json b/AssetEditor/Language_Fr.json index 944c1a34f..e763d740e 100644 --- a/AssetEditor/Language_Fr.json +++ b/AssetEditor/Language_Fr.json @@ -12,10 +12,643 @@ "SettingsWindow.GridSize": "Taille de la grille", "SettingsWindow.AudioModding": "Modding audio", "SettingsWindow.SaveButton": "Enregistrer", - "UpdaterWindow.Title": "Mise à jour", "UpdaterWindow.UpdateInfo": "Une nouvelle version d’AssetEditor est disponible!\n\nVotre version actuelle est la {0}. Mettez à jour vers la version {1} pour découvrir les dernières modifications détaillées ci-dessous.", "UpdaterWindow.ReleaseNotes": "Notes de version", "UpdaterWindow.UpdateButton": "Mettre à jour", - "UpdaterWindow.CancelButton": "Annuler" + "UpdaterWindow.CancelButton": "Annuler", + "MenuBar.File": "_File", + "MenuBar.NewPack": "New Pack", + "MenuBar.NewAnimPackWh3": "New AnimPack (Warhammer III)", + "MenuBar.NewAnimPack3k": "New AnimPack (Three Kingdoms)", + "MenuBar.SaveActivePack": "Save active pack", + "MenuBar.OpenPack": "Open Pack", + "MenuBar.OpenRecentPacks": "Open Recent Packs", + "MenuBar.OpenGamePacks": "Open Game Packs", + "MenuBar.Game.Attila": "Attila", + "MenuBar.Game.RomeRemastered": "Rome Remastered", + "MenuBar.Game.ThreeKingdoms": "Three Kingdoms", + "MenuBar.Game.Warhammer2": "Warhammer II", + "MenuBar.Game.Warhammer3": "Warhammer III", + "MenuBar.Game.Troy": "Troy", + "MenuBar.Settings": "Settings", + "MenuBar.OpenAssetEditorFolder": "Open AssetEditor Folder", + "MenuBar.ClearAssetEditorFolder": "Clear AssetEditor Folder", + "MenuBar.Exit": "_Exit", + "MenuBar.View": "View", + "MenuBar.TogglePackBrowser": "Toggle Pack File Browser", + "MenuBar.Tools": "Tools", + "MenuBar.Reports": "Reports", + "MenuBar.Reports.Rmv2": "Rmv2", + "MenuBar.Reports.MetaData": "Meta Data", + "MenuBar.Reports.FileList": "File List", + "MenuBar.Reports.MetaJsons": "Meta Jsons", + "MenuBar.Reports.Materials": "Materials", + "MenuBar.Reports.DialogueEventsStateGroups": "Dialogue Events with State Groups", + "MenuBar.Reports.DialogueEventNames": "Dialogue Event and Event Names", + "MenuBar.Reports.DatDump": "Dat Dump", + "MenuBar.Search": "Search", + "MenuBar.TouchedFiles": "Touched Files", + "MenuBar.TouchedFiles.StartRecorder": "Start Recorder", + "MenuBar.TouchedFiles.PrintFiles": "Print Files", + "MenuBar.TouchedFiles.ExtractToPack": "Extract to Pack", + "MenuBar.TouchedFiles.StopRecorder": "Stop Recorder", + "MenuBar.Debug.ClearConsole": "Debug - Clear Console", + "MenuBar.Debug.PrintScopes": "Debug - Print Scopes", + "MenuBar.Help": "Help", + "MenuBar.Help.ModdingWiki": "Modding Wiki", + "MenuBar.Help.VideoTutorials": "Video Tutorials", + "MenuBar.Help.Tutorial.AssetEdBasics1": "AssetEditor Basics 1", + "MenuBar.Help.Tutorial.AssetEdBasics2": "AssetEditor Basics 2", + "MenuBar.Help.Tutorial.SkragReskin": "Skrag Reskin", + "MenuBar.Help.Tutorial.TzarGuardGun": "Tzar Guard with Gun", + "MenuBar.Help.Tutorial.KostaltynReskin": "Kostaltyn Reskin", + "MenuBar.Help.Tutorial.RecolouringModels": "Recolouring Models", + "MenuBar.Help.Tutorial.AnimationBasics": "Animation Basics", + "MenuBar.Help.Tutorial.AnimatedProps": "Animated Props and Custom Animation Packs", + "MenuBar.Help.Discord": "Discord", + "MainWindow.Titlebar.Minimise": "Minimise", + "MainWindow.Titlebar.Maximise": "Maximise", + "MainWindow.Titlebar.Close": "Close", + "MainWindow.Tabs.ContextMenu.Close": "Close", + "MainWindow.Tabs.ContextMenu.CloseMultiple": "Close Multiple", + "MainWindow.Tabs.ContextMenu.CloseOtherTabs": "Close Other Tabs", + "MainWindow.Tabs.ContextMenu.CloseAllTabs": "Close All Tabs", + "MainWindow.Tabs.ContextMenu.CloseTabsToLeft": "Close Tabs To Left", + "MainWindow.Tabs.ContextMenu.CloseTabsToRight": "Close Tabs To Right", + "SettingsWindow.Title": "Settings", + "SettingsWindow.GameFiles": "Game Files", + "SettingsWindow.Tooltip.OnlyLoadLod0": "When importing a reference mesh in the Kitbash tool, only import Lod0 in order to save memory.", + "SettingsWindow.Tooltip.GridSize": "Size of the grid in visual editors", + "SettingsWindow.Tooltip.BrowseGameData": "Browse for game data location e.g. \"C:\\SteamLibrary\\steamapps\\common\\Total War WARHAMMER III\\data\"", + "SettingsWindow.WwiseCLI": "Wwise CLI", + "SettingsWindow.Tooltip.WwiseCLI": "e.g. \"C:\\Program Files (x86)\\Audiokinetic\\Wwise2019.2.15.7667\\Authoring\\x64\\Release\\bin\\WwiseCLI.exe\"", + "AnimationPack.Menu.File": "_File", + "AnimationPack.Menu.Save": "Save", + "AnimationPack.Menu.NewAnimSet": "New AnimationSet (Wh3/3K)", + "AnimationPack.Menu.ExportAnimSlotsWh3": "Export animation slots (Wh3)", + "AnimationPack.Menu.ExportAnimSlotsWh2": "Export animation slots (Wh2)", + "AnimationPack.FilterWatermark": "Filter, Regex", + "AnimationPack.ContextMenu.Rename": "Rename", + "AnimationPack.ContextMenu.Remove": "Remove", + "AnimationPack.ContextMenu.CopyFullPath": "Copy Full Path", + "TextureEditor.UvChannels": "Uv Channels", + "TextureEditor.Format": "Format", + "TextureEditor.Width": "Width", + "TextureEditor.Height": "Height", + "TextureEditor.NumMipMaps": "Num MipMaps", + "TextureEditor.ImageDetails": "Image Details", + "TextureEditor.ImagePath": "Image Path:", + "TwuiEditor.Component.String": "String", + "TwuiEditor.Component.Float": "Float", + "TwuiEditor.Component.Vector2": "Vector2", + "TwuiEditor.Component.Bool": "Bool", + "TwuiEditor.Hierarchy.Filter": "Filter", + "TwuiEditor.Hierarchy.Search": "Search...", + "TwuiEditor.Hierarchy.ToggleSelected": "Toggle selected", + "Kitbash.Bmi.CheckAllChildren": "Check all children", + "Kitbash.Bmi.UncheckAllChildren": "Un-check all children", + "Kitbash.Bmi.ScaleFactor": "Scale factor:", + "Kitbash.Bmi.Apply": "Apply", + "Kitbash.MeshFitter.Title": "Mesh Fitter Tool", + "Kitbash.MeshFitter.Apply": "Apply", + "Kitbash.MeshFitter.Ok": "OK", + "Kitbash.MeshFitter.Cancel": "Cancel", + "Kitbash.PinTool.Title": "Pin Tool", + "Kitbash.PinTool.InstructionsHeader": "Instructions", + "Kitbash.PinTool.InstructionsText": "1. Select mode:\n'Pin': for things which should not bend\n'Skin wrap': for things which should deform\n2. Select meshes which should get new animation\n3. Select the meshes to take animation from\n'Pin': go into vertex mode and press button with a vertex selected\n'Skin wrap': select mesh\n4. Press Apply", + "Kitbash.PinTool.TransferMode": "Animation transfer mode:", + "Kitbash.PinTool.ApplyTo": "Apply animation to:", + "Kitbash.PinTool.AddSelected": "Add selected meshes", + "Kitbash.PinTool.RemoveAll": "Remove all", + "Kitbash.PinTool.TakeFromPin": "Take animation from (PinMode):", + "Kitbash.PinTool.Source": "Source:", + "Kitbash.PinTool.SetFromVertex": "Set from selected Vertex", + "Kitbash.PinTool.TakeFromSkinWrap": "Take AnimationFrom (SkinWrapMode):", + "Kitbash.PinTool.Mesh": "Mesh:", + "Kitbash.PinTool.SetFromSelection": "Set from selection", + "Kitbash.ReRigging.Title": "Re-Rigging Tool", + "Kitbash.SaveDialog.Title": "Save", + "Kitbash.SaveDialog.Path": "Path:", + "Kitbash.SaveDialog.Browse": "Browse", + "Kitbash.SaveDialog.MeshFormat": "Mesh Format:", + "Kitbash.SaveDialog.WsModelFormat": "WS model Format:", + "Kitbash.SaveDialog.LodStrategy": "Lod Stategy:", + "Kitbash.SaveDialog.NumLods": "Number of lods:", + "Kitbash.SaveDialog.NumLodsTooltip": "Number of lods that will be generated. Normal is 4, large models have 5 and some special models have 1", + "Kitbash.SaveDialog.LodInfo": "Lod Info:", + "Kitbash.SaveDialog.Index": "Index", + "Kitbash.SaveDialog.Distance": "Distance", + "Kitbash.SaveDialog.QltLevel": "Qlt Level", + "Kitbash.SaveDialog.ReductionFactor": "Reduction Factor", + "Kitbash.SaveDialog.MergeAlpha": "Merge Alpha", + "Kitbash.SaveDialog.FastAnimVertex": "Fast AnimVertex", + "Kitbash.SaveDialog.NumPolygons": "Num Polygons", + "Kitbash.SaveDialog.NumMeshes": "Num Meshes", + "Kitbash.SaveDialog.NumTextures": "Num Textures", + "Kitbash.SaveDialog.OnlySaveVisible": "Only save visible nodes", + "Kitbash.VertexDebugger.Title": "Vertex Debugger", + "Kitbash.VertexDebugger.NormalScale": "Normal debug scale:", + "Kitbash.VertexDebugger.ShowStats": "Show Statistics", + "Common.Ok": "Ok", + "Common.OK": "OK", + "Common.Cancel": "Cancel", + "Common.Save": "Save", + "Common.SaveAs": "Save as", + "Common.Close": "Close", + "Common.Apply": "Apply", + "Common.Open": "Open", + "Common.Delete": "Delete", + "Common.Copy": "Copy", + "Common.Paste": "Paste", + "Common.Undo": "Undo", + "Common.New": "New", + "Common.Duplicate": "Duplicate", + "Common.Rename": "Rename", + "Common.Remove": "Remove", + "Common.Browse": "Browse...", + "Common.BrowseEllipsis": "...", + "Common.Clear": "Clear", + "Common.Filter": "Filter:", + "Common.SearchFilterWatermark": "Search filter, regEx supported", + "Common.SelectAll": "Select All", + "Common.DeselectAll": "Deselect All", + "Common.Name": "Name", + "Common.Format": "Format", + "Common.Width": "Width", + "Common.Height": "Height", + "Common.Set": "Set", + "Common.Reset": "Reset", + "Common.Count": "Count = ", + "Common.FocusSelection": "Focus Selection", + "Common.ResetCamera": "Reset", + "Common.General": "General", + "Common.Camera": "Camera", + "Common.Refresh": "Refresh", + "SkeletonEditor.Title": "Skeleton Editor:", + "SkeletonEditor.Skeleton": "Skeleton", + "SkeletonEditor.Load": "Load", + "SkeletonEditor.RefMesh": "Ref Mesh", + "SkeletonEditor.Settings": "Settings:", + "SkeletonEditor.SourceSkeleton": "Source Skeleton", + "SkeletonEditor.SelectedBoneScale": "Selected Bone Scale", + "SkeletonEditor.FocusSelectedBone": "Focus selected bone", + "SkeletonEditor.WorldTransforms": "World transforms", + "SkeletonEditor.IsTechSkeleton": "Is Tech skeleton", + "SkeletonEditor.SelectedBone": "Selected bone:", + "SkeletonEditor.Translation": "Translation", + "SkeletonEditor.Rotation": "Rotation", + "SkeletonEditor.LengthScale": "Length Scale", + "SkeletonEditor.Bake": "Bake", + "ErrorWindow.Title": "Error", + "ErrorWindow.ForceClose": "Emergency - Force Close Current Window", + "ErrorWindow.CloseError": "Close Error window", + "ErrorWindow.CopyToClipboard": "Copy to Clipboard", + "ErrorWindow.MessageDesc": "If this error was unexpected, please press the copy button and provide the text dump to the developers through discord or github.\nThe Clipboard contains more information then what is displayed! \n \nDiscord: https://discord.gg/moddingden \nGithub: https://github.com/donkeyProgramming/TheAssetEditor/issues", + "ErrorWindow.ExtraInformation": "Extra information", + "ErrorWindow.ErrorMessage": "Error Message", + "ErrorList.SaveReport": "Save Report", + "ErrorList.Error": "Error", + "ErrorList.Item": "Item", + "ErrorList.Description": "Description", + "SelectionList.IsChecked": "IsChecked", + "PackFileBrowser.Title": "PackFile Explorer", + "PackFileBrowser.Search": "Search PackFile Explorer (Ctrl+Shift+F)", + "RenderSettings.Title": "Render settings", + "RenderSettings.UseBackfaceCulling": "Use backface culling", + "RenderSettings.UseLargeSceneCulling": "Use Large scene culling", + "RenderSettings.ShowGrid": "Show grid", + "RenderSettings.GridColour": "Grid colour", + "RenderSettings.FactionColours": "Faction colours", + "RenderSettings.LightIntensity": "Light intensity", + "RenderSettings.EnvLightRotationX": "Env light rotation X", + "RenderSettings.DirectLightRotationX": "Direct light rotation X", + "RenderSettings.DirectLightRotationY": "Direct light rotation Y", + "ShaderTextureView.ApplyTexture": "Apply texture when rendering", + "ShaderTextureView.RemoveTexture": "Remove texture and replace with default mask", + "ShaderTextureView.BrowseFile": "Browse for new file", + "ShaderTextureView.PreviewTexture": "Preview the texture", + "TwuiHierarchy.Search": "Search...", + "BoneMapping.RootScale": "Root scale", + "BoneMapping.OnlyMoveSelectedBone": "Only move selected bone ", + "BoneMapping.RelativeScale": "Relative Scale:", + "BoneMapping.DisplayOffset": "Display offset", + "BoneMapping.PosOffset": "Pos offset", + "BoneMapping.RotOffset": "Rot offset", + "BoneMapping.Scale": "Scale", + "BoneMapping.CopyToChildren": "Copy to children", + "BoneMapping.ResetOffsets": "Reset offsets", + "BoneMapping.CurrentModelBones": "Current model bones - ", + "BoneMapping.OnlyShowUsedBones": "Only show used bones", + "BoneMapping.AutoMapByName": "Auto map based on name", + "BoneMapping.AutoMapByHierarchy": "Auto map based on hierarchy", + "BoneMapping.DeleteSelf": "Delete self", + "BoneMapping.DeleteSelfAndChildren": "Delete self and children", + "BoneMapping.CopyToAllChildren": "Copy to to all children", + "BoneMapping.TargetModelBones": "Target Model Bones - ", + "SceneObjectView.Mesh": "Mesh", + "SceneObjectView.Skeleton": "Skeleton", + "SceneObjectView.Fragment": "Fragment", + "SceneObjectView.Slot": "Slot", + "SceneObjectView.AnimationFile": "Animation File", + "SceneObjectView.MetaFile": "Meta File", + "SceneObjectView.PersistMetaFile": "Persist Meta File", + "EditorHost.SaveShortcutFile": "Save shortcut file", + "EditorHost.SceneContent": "Scene content:", + "AnimationPlayer.Animation": "Animation", + "AnimationPlayer.MainAnimation": "Main animation:", + "AnimationPlayer.Frame": "Frame ", + "AnimationPlayer.Separator": " / ", + "AnimationPlayer.Time": "Time[", + "AnimationPlayer.FPS": " fps]", + "AnimationPlayer.Loop": "Loop", + "AnimationPlayer.Player": "Player", + "AnimationPlayer.Frames": "Frames", + "AnimationMeta.Persistent": "Persistent", + "AnimationMeta.Animation": "Animation", + "AnimationMeta.Description": "Decription:", + "AnimationMeta.MetaDataV": "Meta Data (v", + "AnimationMeta.Entries": ") Entries:", + "AnimationMeta.Up": "Up", + "AnimationMeta.Down": "Down", + "AnimationMeta.CreateEntry": "Create MetaData entry", + "KitbashSkeleton.SkeletonInformation": "Skeleton Information:", + "KitbashSkeleton.NodeScale": "Node scale", + "KitbashSkeleton.NodeScaleTooltip": "Scaling the skeleton will make the mesh look dragged unless the mesh is also exported", + "TintAndFaction.Title": "Tint and Faction", + "TintAndFaction.PreviewCapability": "Preview capability", + "TintAndFaction.TintMask": "Tint Mask", + "TintAndFaction.TintColour": "Tint Colour", + "TintAndFaction.Variation": "Variation:", + "TintAndFaction.UseFactionColours": "Use faction colours", + "TintAndFaction.FactionColour3Mask": "Faction Colour 3 Mask", + "RMV2WeightedMaterial.Title": "RMV2 Weighted Material - Details", + "RMV2WeightedMaterial.Filter": "Filter", + "RMV2WeightedMaterial.MatrixIndex": "MatrixIndex", + "RMV2WeightedMaterial.SetToDefault": "Set to default", + "RMV2WeightedMaterial.ParentMatrixIndex": "ParentMatrixIndex", + "RMV2WeightedMaterial.RmvVertexFormat": "Rmv Vertex format", + "RMV2WeightedMaterial.RmvMaterialId": "Rmv Material Id", + "RMV2WeightedMaterial.TransformInfo": "TransformInfo", + "RMV2WeightedMaterial.StringParams": "String params", + "RMV2WeightedMaterial.FloatParams": "Float params", + "RMV2WeightedMaterial.IntParams": "Int params", + "RMV2WeightedMaterial.TextureParams": "Texture params", + "RMV2WeightedMaterial.AttachmentParams": "Attachment params", + "RMV2WeightedMaterial.Vec4Params": "Vec4 params", + "SpecGloss.Title": "SpecGloss", + "SpecGloss.UseAlpha": "Use Alpha", + "SpecGloss.DiffuseMap": "Diffuse Map", + "SpecGloss.SpecularMap": "Specular Map", + "SpecGloss.GlossMap": "GlossMap Map", + "SpecGloss.NormalMap": "Normal Map", + "SpecGloss.Mask": "Mask", + "ModelMaterial.Title": "Model Material", + "ModelMaterial.SelectedShader": " Selected Shader", + "MetalRough.Title": "MetalRough", + "MetalRough.BaseColour": "Base Colour", + "MetalRough.MaterialMap": "Material Map", + "Emissive.Title": "Emissive", + "Emissive.Distortion": "Emissive Distortion*", + "Emissive.Direction": "Emissive Direction*", + "Emissive.DistortStrength": "E Distort Strength*", + "Emissive.FresnelStrength": "E Fresnel Strength", + "Emissive.Tint": "Emissive Tint", + "Emissive.Gradient1": "Emissive Gradient 1", + "Emissive.Time": "Time", + "Emissive.Gradient2": "Emissive Gradient 2", + "Emissive.Gradient3": "Emissive Gradient 3", + "Emissive.Gradient4": "Emissive Gradient 4", + "Emissive.Speed": "Emissive Speed", + "Emissive.PulseSpeed": "Emissive Pulse Speed*", + "Emissive.PulseStrength": "Emissive Pulse Strength*", + "Emissive.Strength": "Emissiv Strength", + "Emissive.Tiling": "Emissive Tiling", + "Blood.Title": "Blood", + "Blood.ReceivesBlood": "Receives blood", + "Blood.BloodUvScale": "Blood Uv Scale", + "Blood.TextureBloodMap": "Texture - Blood map", + "AdvancedRMV.Title": "Advanced RMV", + "AdvancedRMV.UseDirt": "Use Dirt", + "AdvancedRMV.UseDecal": "Use Decal", + "AdvancedRMV.UseSkin": "Use Skin", + "AdvancedRMV.DirtMap": "Dirt Map", + "AdvancedRMV.DirtMask": "Dirt Mask", + "AdvancedRMV.SkinMask": "Skin Mask", + "AdvancedRMV.DecalMask": "Decal Mask", + "AdvancedRMV.UvScale": "Uv Scale", + "AdvancedRMV.TextureTransform": "Texture transform", + "MeshView.VertexType": "Vertex Type", + "MeshView.Size": "Size", + "MeshView.VertexCount": "Vertex Count:", + "MeshView.IndexCount": "Index Count:", + "MeshView.RenderBbox": "Render Bbox", + "MeshView.Pivot": "Pivot", + "MeshView.CopyToAllMeshes": "Copy to all meshes", + "MeshView.ReduceLods": "Reduce Lods", + "Rmv2AnimationView.SkeletonName": "Skeleton Name", + "Rmv2AnimationView.Bones": "Bones", + "Rmv2AnimationView.BoneIndex": "BoneIndex", + "Rmv2AnimationView.AttachTo": "Attach To", + "Rmv2AnimationView.AnimationMatrix": "Animation Matrix ", + "MainNode.Title": "Main Node:", + "MainNode.TargetAnim": "Target Anim", + "MainNode.CopyTexturesToPack": "Copy textures to pack", + "MainNode.Convertion": "Convertion:", + "MainNode.AttachmentPoints": "Attachment points", + "MainNode.BoneId": "Bone Id", + "MainNode.UseBoneOrientation": "Use Bone Orientation", + "MainNode.CreateAttachmentPoints": "Create AttachmentPoints from Skeleton", + "GroupView.GroupInformation": "Group Information:", + "GroupView.GroupName": "Group name", + "KitbasherView.VertexFalloff": "Vertex Fall-of:", + "KitbasherView.VertexFalloffTooltip": "Fall of distance for selected vertexes", + "Import.SelectedFile": "Selected File", + "Import.CreateProject": "Create Import project ", + "Import.AvailableImporters": "Available Importers", + "Import.ImporterSettings": "Importer Settings:", + "Import.Import": "Import", + "Import.ImportMeshes": "Import Meshes", + "Import.ImportMeshesTooltip": "Make a TW WH3/3K compatible material from a Blender Material Map", + "Import.ImportMaterials": "Import Materials", + "Import.ImportMaterialsTooltip": "Import Materials From RMV File, convert to TW material", + "Import.ConvertMaterialMap": "Convert Material Map From Blender To TW format", + "Import.ConvertNormalMap": "Convert Normal Map From Blue To Orange Type", + "Import.ConvertNormalMapTooltip": "Convert the normal map texture from blue type into to orange type. \r\n - Blue type is used by most 3d software, including blender, substance painter. \r\n - Orange type is a specialal \"compressed\" 2 channel type, used by TW, and some other games.", + "Import.ImportAnimations": "Import Animations ", + "Import.ImportAnimationsTooltip": "Import Animations From GLTF File, convert to TW ANIM;", + "Import.NumberKeySamples": "Number of Key Samples Per Second ", + "Export.ExportTextures": "Export Textures", + "Export.ConvertMaterial": "Convert Material", + "Export.ConvertMaterialTooltip": "Convert the Material texture into the version Blender prefers", + "Export.ConvertNormal": "Convert Normal", + "Export.ConvertNormalTooltip": "Convert the normal map texture into blue version - used by a lot of software, including blender", + "Export.ExportAnimations": "Export Animations ", + "Export.SystemPath": "System Path", + "Export.AvailableExporters": "Available Exporters", + "Export.Export": "Export", + "Export.SwapMaterialRoughness": "Swap Material/Roughness (Blender)", + "DialogueEventMerger.Title": "Dialogue Event Merger", + "DialogueEventMerger.Description": "The Dialogue Event Merger is a tool for merging Dialogue Events from modded SoundBanks with Dialogue Events from vanilla into a single SoundBank. Read the tooltips for more information.", + "DialogueEventMerger.Suffix": "SoundBank Suffix", + "DialogueEventMerger.SuffixTooltip": "The suffix of your merged SoundBanks.", + "DialogueEventMerger.ModdedBanks": "Modded SoundBanks", + "DialogueEventMerger.ModdedBanksTooltip": "Select one or more modded SoundBanks from which their Dialogue Events will be merged with vanilla.", + "AudioProjectMerger.Title": "Audio Project Merger", + "AudioProjectMerger.Description": "The Audio Project Merger is a tool for merging two Audio Projects.", + "AudioProjectMerger.MergedName": "Merged Audio Project Name", + "AudioProjectMerger.MergedNameTooltip": "The name of your merged Audio Project.", + "AudioProjectMerger.OutputDir": "Output Directory Path", + "AudioProjectMerger.OutputDirTooltip": "The pack directory where the merged Audio Project is output to. There needs to be a file in the directory for it to show.", + "AudioProjectMerger.BasePath": "Base Audio Project Path", + "AudioProjectMerger.BasePathTooltip": "The path to the Audio Project that you want to merge the Merging Audio Project into.", + "AudioProjectMerger.MergingPath": "Merging Audio Project Path", + "AudioProjectMerger.MergingPathTooltip": "The path to the Audio Project that you want to merge into the base Audio Project.", + "AudioProjectConverter.Title": "Audio Project Converter", + "AudioProjectConverter.Description": "The Audio Project Converter is a tool for creating an Audio Project out of Dialogue Events in the provided .bnk files. It takes the VO Actor substring(s) and searches the Dialogue Events in the supplied .bnk files for their usage and converts that to the Audio Project format. Read the tooltips for more information.", + "AudioProjectConverter.ProjectName": "Audio Project Name", + "AudioProjectConverter.ProjectNameTooltip": "The name of your converted Audio Project.", + "AudioProjectConverter.VOActor": "VO Actor Substring", + "AudioProjectConverter.VOActorTooltip": "A substring common to all the VO Actor keys whose usage you want converted to the Audio Project format. You can include multiple substrings using a comma to separate them e.g. \"ovn_vo_actor_Araby, ovn_vo_actor_Albion\".", + "AudioProjectConverter.WemsDir": "Wems Directory Path", + "AudioProjectConverter.WemsDirTooltip": "A directory on your computer containing all the .wem files used in the soundbank (just use all wem files if you don't know which are used).", + "AudioProjectConverter.BnksDir": "Bnks Directory Path", + "AudioProjectConverter.BnksDirTooltip": "A directory on your computer containing all the .bnk files to be searched.", + "AudioProjectConverter.ConvertingFromWwise": "Converting Soundbanks from Wwise Project", + "AudioProjectConverter.ConvertingFromWwiseTooltip": "Tick this box if you need to get the States used in the soundbank from the Wwise project. There's no need to tick if you're converting a vanilla .bnk or the pack has a states_data.dat in the pack for the .bnk you're converting as that contains the States data for a or .bnk made by the Audio Editor.", + "AudioProjectConverter.SoundbanksInfo": "SoundbanksInfo.xml", + "AudioProjectConverter.SoundbanksInfoTooltip": "The path to the SoundbanksInfo.xml should be \"your_wwise_project_folder\\GeneratedSoundBanks\\Windows\\SoundbanksInfo.xml\". This contains the States data for the Wwise project.", + "AudioExplorer.SearchAction": "Search by Action Event", + "AudioExplorer.SearchDialogue": "Search by Dialogue Event", + "AudioExplorer.SearchVOActor": "Search by VO__Actor", + "AudioExplorer.SearchID": "Search by ID", + "AudioExplorer.Languages": "Languages", + "AudioExplorer.LoadLanguages": "Load Languages", + "AudioExplorer.PlayAudio": "Play Audio", + "AudioExplorer.WwiseObjectGraph": "Wwise Object Hierarchy Graph", + "NewAudioProject.Title": "New Audio Project", + "NewAudioProject.Location": "Location", + "NewAudioProject.LocationTooltip": "The folder location in the Pack the Audio Project should go.", + "NewAudioProject.Language": "Language", + "NewAudioProject.LanguageTooltip": "The game language of your Audio Project.", + "AudioEditorSettings.ResetSettings": "Reset Settings", + "AudioEditorSettings.ResetSettingsTooltip": "Resets all settings to default.", + "AudioEditorSettings.SetRecommendedVO": "Set Recommended VO Settings", + "AudioEditorSettings.SetRecommendedVOTooltip": "When multiple audio files are set, this sets the container's settings to what is recommended for a container containing VO audio files.\n\nShortcut: Ctrl + R", + "AudioEditorSettings.RemoveAudioFiles": "Remove Audio Files", + "AudioEditorSettings.RemoveAudioFilesTooltip": "Remove the selected Audio Files from the Settings.", + "AudioEditorSettings.ShowSettingsViewer": "Show Settings from Audio Project Viewer", + "AudioEditorSettings.ShowSettingsViewerTooltip": "When selecting items in the Audio Project Viewer with the selected the settings displayed will be that item's settings. When this is not selected the settings displayed will be the settings of the item in the Audio Project Editor.", + "AudioEditorSettings.AudioFiles": "Audio Files", + "AudioEditorSettings.FileName": "File Name", + "AudioEditorSettings.FilePath": "File Path", + "AudioEditorSettings.HircSettings": "Hirc Settings", + "AudioEditorSettings.ContainerType": "Container Type", + "AudioEditorSettings.ContainerTypeTooltip": "The Container Type determines the order in which objects are played.\n\nRandom - Plays objects at random.\nSequence - Plays objects in the sequence in which they were added.", + "AudioEditorSettings.RandomType": "Random Type", + "AudioEditorSettings.RandomTypeTooltip": "The Container Type determines the order in which objects are played.\n\nStandard - Plays objects at random.\nShuffle - Plays objects at random without repeating an object until the entire pool of objects has been played.", + "AudioEditorSettings.RepetitionInterval": "Repetition Interval", + "AudioEditorSettings.RepetitionIntervalTooltip": "Repitition Interval determines how many other objects must be played before an object can be repeated.\n\nIf Random Type is Standard, the object played is selected completely randomly, but the last n objects played are excluded from the list.\nIf Random Type is Shuffle, when the container is looped, the last n objects played will be excluded from the list.\nIf Random Type is Shuffle, non-looping and Play Mode continuous, the Repetition Interval has no effect on the playback of the container.", + "AudioEditorSettings.PlaylistEndBehaviour": "Playlist End Behaviour", + "AudioEditorSettings.PlaylistEndBehaviourTooltip": "Playlist End Behaviour determines how the container behaves after it has played the last object in the playlist.\n\nRestart - Plays the playlist in the same order.\nPlay In Reverse Order - Plays the playlist in reverse order.", + "AudioEditorSettings.PlayMode": "Play Mode", + "AudioEditorSettings.PlayModeTooltip": "The Play Mode determines whether a single object or the full playlist is played when triggered.\n\nStep - Plays one object in the playlist when triggered.\nContinuous - Plays the complete playlist when triggered.", + "AudioEditorSettings.AlwaysResetContainer": "Always Reset Container", + "AudioEditorSettings.AlwaysResetContainerTooltip": "Always Reset Container determines whether playback continues or returns to the start of the playlist when a container is replayed after being stopped during playback.", + "AudioEditorSettings.LoopingType": "Looping Type", + "AudioEditorSettings.LoopingTypeTooltip": "The Looping Type handles how many times a container is played.\n\nDisabled - The container does not loop playback.\nFinite Looping - The container playback loops according to the Number of Loops.\nInfinite Looping - The container playback loops infinitely.", + "AudioEditorSettings.NumberOfLoops": "Number of Loops", + "AudioEditorSettings.NumberOfLoopsTooltip": "The Number of Loops determines how many times a container is played if Looping Type is set to Finite Looping.", + "AudioEditorSettings.TransitionType": "Transition Type", + "AudioEditorSettings.TransitionTypeTooltip": "The Transition Type handles the transition between objects in the container.\n\nDisabled - No transition between objects.\nXfade (amp) - Adds a crossfade between two objects using constant amplitude.\nXfade (power) - Adds a crossfade between two objects using constant power.\nDelay - Adds a silence between two objects.\nSample accurate - Creates seamless transitions with no latency between objects.\nTrigger rate - Determines the rate at which new objects within the container will be played. This option is useful for simulating rapid gun fire.", + "AudioEditorSettings.TransitionDuration": "Transition Duration", + "AudioEditorSettings.TransitionDurationTooltip": "Transition Duration is the length of the crossfades or delay between clips. If Trigger rate is selected as the transition type, the duration defines the amount of time that will pass before the next sound is triggered.\n\nThe Duration slider is unavailable when the Sample Accurate option is selected.\n\nThe range is between 0 and 3600 seconds. The maximum duration of a crossfade is equal to half the duration of the sound. In cases where the crossfade time is longer than half the duration of the sound, the crossfade duration is automatically adjusted to the maximum allowed. This automatic adjustment is performed by the sound engine at run time. Wwise does not limit or indicate that the crossfade time is too long for some of the sounds in the container.", + "AudioProjectViewer.EditRow": "Edit Row", + "AudioProjectViewer.EditRowTooltip": "Removes the selected row from the Audio Project and adds it to the Audio Project Editor.\n\nShortcut: Ctrl + E", + "AudioProjectViewer.RemoveRow": "Remove Row", + "AudioProjectViewer.RemoveRowTooltip": "Removes the selected row(s) from the Audio Project.\n\nShortcuts: Delete / Backspace", + "AudioProjectViewer.DataGridTooltip": "To edit or remove rows select them.\n\nTo copy and paste rows (Dialogue Events rows only) select them and right-click or use the shortcuts:\nCopy: Ctrl + C\nPaste: Ctrl + V", + "AudioProjectViewer.RowControlledTooltip": "This row cannot be selected directly, it is controlled by the corresponding \"Play_...\" Action Event.", + "AudioProjectExplorer.DialogueEventFilters": "Dialogue Event Filters", + "AudioProjectExplorer.SelectDialogueType": "Select Dialogue Event Type Filter", + "AudioProjectExplorer.DialogueTypeTooltip": "Dialogue Event Type refers to the type of action or trigger in game that the Dialogue Event relates to. Select the Dialogue Event type to filter by that.", + "AudioProjectExplorer.SelectDialogueProfile": "Select Dialogue Event Profile Filter", + "AudioProjectExplorer.DialogueProfileTooltip": "The Dialogue Event profile refers to the Select the Dialogue Event profile to filter by that", + "AudioProjectExplorer.GeneralFilters": "General Filters", + "AudioProjectExplorer.ShowEditedOnly": "Show Edited Items Only", + "AudioProjectExplorer.ShowEditedOnlyTooltip": "Filters the Audio Project Explorer tree to show only items that have been edited.", + "AudioProjectExplorer.ShowActionEvents": "Show Action Events", + "AudioProjectExplorer.ShowActionEventsTooltip": "Filters the Audio Project Explorer tree to show or hide Action Events.", + "AudioProjectExplorer.ShowDialogueEvents": "Show Dialogue Events", + "AudioProjectExplorer.ShowDialogueEventsTooltip": "Filters the Audio Project Explorer Tree to show or hide Dialogue Events.", + "AudioProjectExplorer.ToggleTree": "Toggle Collapse / Expand Tree", + "AudioProjectExplorer.ToggleTreeTooltip": "Collapse / expand the tree.", + "AudioProjectExplorer.ResetFilters": "Reset Filters", + "AudioProjectExplorer.SearchAudioProject": "Search Audio Project Explorer", + "AudioProjectEditor.AddRow": "Add Row", + "AudioProjectEditor.AddRowTooltip": "Adds the row to the Audio Project.\n\nShortcut: Ctrl + Q", + "AudioProjectEditor.ShowModdedStates": "Show Modded States Only", + "AudioProjectEditor.ShowModdedStatesTooltip": "Shows only modded states in the drop downs rather than modded states and vanilla states.", + "AudioFilesExplorer.SetAudioFiles": "Set Audio Files", + "AudioFilesExplorer.SetAudioFilesTooltip": "Set the selected audio files as the audio files in the Settings.", + "AudioFilesExplorer.AddAudioFiles": "Add to Audio Files", + "AudioFilesExplorer.AddAudioFilesTooltip": "Add the selected audio files to the audio files already set in the Settings.", + "AudioFilesExplorer.SearchAudioFiles": "Search Audio Files Explorer", + "AudioEditor.NewProject": "New Audio Project", + "AudioEditor.OpenProject": "Open Audio Project", + "AudioEditor.SaveProject": "Save Audio Project", + "AudioEditor.CompileProject": "Compile Audio Project", + "AudioEditor.RefreshSourceIds": "Refresh Source Ids", + "FBXSettings.SkeletonFile": "Skeleton File:", + "FBXSettings.NotImplemented": "Not implemented yet", + "FBXSettings.BrowseAnim": "Browse .ANIM...", + "FBXSettings.SkeletonName": "Skeleton Name:", + "FBXSettings.SkeletonNameTooltip": "Skeleton name stored in .FBX File\nUsed in the .rigid_model_v2\nEnter name manually if needed.", + "FBXSettings.AttemptAutoRig": "Attemp Auto-Rig", + "FBXSettings.AnimationsInfo": "Animations Info", + "FBXSettings.ApplyWeighting": "Apply Weighting", + "FBXSettings.FileInfo": "File Info", + "FBXSettings.FileName": "File Name", + "FBXSettings.SdkVersion": "Sdk Version", + "FBXSettings.Units": "Units", + "FBXSettings.NodeCount": "NodeCount", + "FBXSettings.MeshCount": "Mesh Count", + "FBXSettings.MaterialCount": "Material Count", + "FBXSettings.AnimationCount": "Animation Count", + "FBXSettings.BoneCount": "Bone Count", + "FBXSettings.DeformationData": "Derformation Data", + "AnimReTarget.SavePrefix": "Save Prefix", + "AnimReTarget.Format": "Format:", + "AnimReTarget.UseGeneratedSkeleton": "Use generated skeleton", + "AnimReTarget.ExportMesh": "Export Mesh/skeleton at scale", + "AnimReTarget.BatchExport": "Batch export", + "AnimReTarget.RenderSettings": "Render Settings:", + "AnimReTarget.GeneratedMesh": "Generated Mesh", + "AnimReTarget.GeneratedSkeleton": "Generated Skeleton", + "AnimReTarget.OffsetSpacing": "Offset spacing", + "AnimReTarget.AnimationSettings": "Animation Settings:", + "AnimReTarget.SkeletonScale": "Skeleton Scale", + "AnimReTarget.AnimSpeedMult": "Animation speed mult", + "AnimReTarget.ZeroUnmappedBones": "Zero unmapped bones", + "AnimReTarget.ZeroUnmappedBonesTooltip": "Set the transform of all unmapped bones to 0", + "AnimReTarget.ApplyRelativeScale": "Apply Relative scale", + "AnimReTarget.ApplyRelativeScaleTooltip": "Scale bone length based on relative difference", + "AnimReTarget.ApplySettings": "Apply Settings", + "AnimReTarget.OpenBoneMapping": "Open Bone Mapping Window", + "AnimReTarget.BoneSettings": "Bone settings:", + "AnimReTarget.SelectedBoneSettings": "Settings for selected Bone: ", + "AnimReTarget.TranslationOffset": "Translation offset", + "AnimReTarget.RotationOffset": "Rotation offset", + "AnimReTarget.BoneLengthMult": "Bone length Mult", + "AnimReTarget.FreezePosition": "Freeze position", + "AnimReTarget.FreezePositionTooltip": "Set the bone position to 0,0,0", + "AnimReTarget.FreezeRotation": "Freeze Rotation", + "AnimReTarget.FreezeRotationTooltip": "Set the bone rotation to 0,0,0", + "AnimReTarget.FreezeRotationZ": "Freeze Rotation Z", + "AnimReTarget.FreezeRotationZTooltip": "Set the bone rotation to 0,0, to some rotation Z at frame 1", + "AnimReTarget.SnapWorldspace": "Snap worldspace", + "AnimReTarget.SnapWorldspaceTooltip": "Sets the bone transform to the same as the target, no magic attempted", + "AnimReTarget.ApplyTranslation": "Apply translation", + "AnimReTarget.ApplyRotation": "Apply Rotation", + "AnimReTarget.IsRelativeTo": "Is Relative to", + "AnimReTarget.ClearBoneSettings": "Clear selected bone settings", + "AnimationTransfer.VisibilityGenerated": "Visability - Generated", + "AnimationTransfer.Mesh": "Mesh | ", + "AnimationTransfer.Skeleton": "Skeleton | ", + "AnimationTransfer.Offset": "Offset:", + "AnimationTransfer.Config": "Config", + "AnimationTransfer.RootBoneWarBeast": "Root bone for animation war beast convert operation", + "AnimationTransfer.ConvertToWarBeast": "convert to war beast!", + "AnimationPack.PackfilesToConvert": "PackfilesToConvert:", + "AnimationPack.OutputFormat": "Output format:", + "AnimationPack.BatchNote": "Note: Can not batch process the active packfile", + "MountAnimation.SaveAndPreview": "Save and preview:", + "MountAnimation.UpdatePreview": "Update Preview", + "MountAnimation.SelectedFragment": "Selected fragment:", + "MountAnimation.SelectedSlot": "Selected slot: ", + "MountAnimation.SaveToFragment": "Save to fragment", + "MountAnimation.SaveCurrent": "Save current", + "MountAnimation.BatchSaveUsingTable": "Batch save using table", + "MountAnimation.BatchSaveUsingFragment": "Batch save using Mount/Rider fragment", + "MountAnimation.EnsureUnique": "Ensure unique:", + "MountAnimation.AnimVersion": "Anim Version:", + "MountAnimation.VisualisationHelp": "Visualisation help:", + "MountAnimation.SnapCameraToBone": "Snap camera to Bone", + "MountAnimation.DisplayPreviewMesh": "Display preview mesh", + "MountAnimation.DisplayPreviewSkeleton": "Display preview skelton", + "MountAnimation.BatchProcessOptions": "Batch Process Options", + "MountAnimation.AnimPack": "AnimPack", + "MountAnimation.Animations": "Animations", + "MountAnimation.Create": "Create", + "MountAnimation.MountLinkShortcut": "Mount link shortcut:", + "MountAnimation.Mount": "Mount", + "MountAnimation.Rider": "Rider", + "MountAnimation.MountTag": "Mount tag", + "MountAnimation.RiderTag": "Rider tag", + "MountAnimation.RiderAttachment": "Rider Attachment:", + "MountAnimation.RiderRootBone": "Rider root bone", + "MountAnimation.StaticLegsAnimation": "Static Legs Animation", + "MountAnimation.MountVertex": "Mount Vertex", + "MountAnimation.FitAnimation": "Fit animation", + "MountAnimation.LoopCounter": "Loop Counter", + "MountAnimation.TransOffset": "Trans offset", + "MountAnimation.KeepRiderRot": "Keep rider rot", + "MountAnimation.IsRootNodeAnim": "Is RootNode anim", + "MountAnimation.RefreshTool": "Refresh Tool", + "MountAnimation.CopyRiderAnimation": "Copy rider all animation frames", + "CampaignAnimation.RootBone": "Root bone", + "CampaignAnimation.Convert": "Convert", + "AnimationKeyframe.Title": "Animation Key Frame Editor", + "AnimationKeyframe.DragHint": "<-- Drag the border to reveal the buttons text", + "AnimationKeyframe.Warning": "WARNING: Do not change the rider animation before saving, otherwise you will lose progress", + "AnimationKeyframe.CurrentFrame": "You are currently editing frame Nr:", + "AnimationKeyframe.AllowSelectAnimroot": "Allow to select animroot node", + "AnimationKeyframe.IncrementFrameCopy": "Increment the frame after copy operation", + "AnimationKeyframe.SelectPreviousBones": "Select previous bones when frame changed", + "AnimationKeyframe.EnableIK": "Enable Inverse Kinematics (currently not completed, help needed!)", + "AnimationKeyframe.IKEndBone": "Last end of the bones chain (for IK):", + "AnimationKeyframe.FirstFrame": "First frame", + "AnimationKeyframe.PrevFrame": "Prev frame", + "AnimationKeyframe.NextFrame": "Next frame", + "AnimationKeyframe.LastFrame": "Last frame", + "AnimationKeyframe.DuplicateFrame": "Duplicate frame", + "AnimationKeyframe.RemoveFrame": "Remove frame", + "AnimationKeyframe.ResetPose": "Reset pose", + "AnimationKeyframe.UndoPose": "Undo pose", + "AnimationKeyframe.Select": "Select", + "AnimationKeyframe.SelectPreviousBones2": "Select previous bones", + "AnimationKeyframe.Move": "Move", + "AnimationKeyframe.Rotate": "Rotate", + "AnimationKeyframe.Scale": "Scale", + "AnimationKeyframe.PasteOperations": "on paste or interpolation operations:", + "AnimationKeyframe.PastePosition": "Paste position", + "AnimationKeyframe.PasteRotation": "Paste rotation", + "AnimationKeyframe.PasteScale": "Paste scale", + "AnimationKeyframe.CopyPose": "Copy Pose", + "AnimationKeyframe.PastePose": "Paste Pose", + "AnimationKeyframe.PastePoseSelected": "Paste Pose into previously selected nodes", + "AnimationKeyframe.CopyPastePrevious": "Copy n paste previous edited nodes", + "AnimationKeyframe.AnimationDuration": "Animation Duration:", + "AnimationKeyframe.Seconds": "seconds", + "AnimationKeyframe.InRangeCopyHint": "In range copy operations from other keyedframe editor window. \nIt will copy current frame and then paste in the destination animation up to desired length", + "AnimationKeyframe.CopyMultipleFrames": "Copy/paste multiple frames", + "AnimationKeyframe.DontWarnDifferentSkeletons": "Don't warn if the skeletons are different", + "AnimationKeyframe.DontWarnIncomingFrames": "Don't warn if the incoming total frames > this animation total frames", + "AnimationKeyframe.PasteUsingForm": "When pasting use the frame number ranges below, otherwise it will paste whole frames", + "AnimationKeyframe.PasteLength": "Paste Length:", + "AnimationKeyframe.SetMax": "Set Max", + "AnimationKeyframe.FromClipboard": "From clipboard", + "AnimationKeyframe.CopyPoseClipboard": "Copy Pose into global clipboard...", + "AnimationKeyframe.PastePoseClipboard": "Paste Pose from global clipboard...", + "AnimationKeyframe.PastePoseSelectedClipboard": "Paste Pose into previously selected nodes from global clipboard...", + "AnimationKeyframe.InterpolationHint1": "Interpolate between frame", + "AnimationKeyframe.SelectedFrameA": "Selected Frame A:", + "AnimationKeyframe.SelectedFrameB": "Selected Frame B:", + "AnimationKeyframe.InterpolationHint2": "Drag the slider to manipulate the blending between frames,\nto apply to the current frame, click apply interpolation on current frame.\nTo enable preview you need to select frame A and B.", + "AnimationKeyframe.SelectFrameA": "Select frame A", + "AnimationKeyframe.SelectFrameB": "Select frame B", + "AnimationKeyframe.ApplyInterpolationCurrent": "Apply interpolation on current frame", + "AnimationKeyframe.ApplyInterpolationAcross": "Apply interpolation across frame A to B", + "AnimationKeyframe.LivePreviewInterpolation": "Live preview interpolation (automatically applies interpolation)", + "AnimationKeyframe.InterpolationOnlySelectedBones": "Interpolation only on previously selected bones" } \ No newline at end of file diff --git a/AssetEditor/Themes/Controls.xaml b/AssetEditor/Themes/Controls.xaml index 58a4c3170..a313a5f08 100644 --- a/AssetEditor/Themes/Controls.xaml +++ b/AssetEditor/Themes/Controls.xaml @@ -1,7 +1,8 @@ -(_localizationManager.GetPossibleLanguages()); - SelectedLanguage = _localizationManager.SelectedLangauge; + SelectedLanguage = _settingsService.CurrentSettings.SelectedLangauge; AvailableThemes = new ObservableCollection((ThemeType[])Enum.GetValues(typeof(ThemeType))); CurrentTheme = _settingsService.CurrentSettings.Theme; diff --git a/AssetEditor/Views/CachedTabControl.cs b/AssetEditor/Views/CachedTabControl.cs new file mode 100644 index 000000000..9e1dcbd75 --- /dev/null +++ b/AssetEditor/Views/CachedTabControl.cs @@ -0,0 +1,85 @@ +using System.Collections.Specialized; +using System.Windows; +using System.Windows.Controls; + +namespace AssetEditor.Views +{ + [TemplatePart(Name = "PART_ItemsHolder", Type = typeof(Panel))] + public class CachedTabControl : TabControl + { + private Panel _itemsHolderPanel = null; + + public override void OnApplyTemplate() + { + base.OnApplyTemplate(); + _itemsHolderPanel = GetTemplateChild("PART_ItemsHolder") as Panel; + UpdateSelectedItem(); + } + + protected override void OnSelectionChanged(SelectionChangedEventArgs e) + { + base.OnSelectionChanged(e); + UpdateSelectedItem(); + } + + private void UpdateSelectedItem() + { + if (_itemsHolderPanel == null) return; + + object selectedItem = this.SelectedItem; + if (selectedItem == null) return; + + ContentPresenter cp = FindChildContentPresenter(selectedItem); + if (cp == null) + { + cp = new ContentPresenter + { + Content = selectedItem, + ContentTemplate = this.SelectedContentTemplate, + ContentTemplateSelector = this.ContentTemplateSelector, + ContentStringFormat = this.SelectedContentStringFormat, + HorizontalAlignment = HorizontalAlignment.Stretch, + VerticalAlignment = VerticalAlignment.Stretch + }; + _itemsHolderPanel.Children.Add(cp); + } + + foreach (ContentPresenter child in _itemsHolderPanel.Children) + { + child.Visibility = (child.Content == selectedItem) ? Visibility.Visible : Visibility.Collapsed; + } + } + + protected override void OnItemsChanged(NotifyCollectionChangedEventArgs e) + { + base.OnItemsChanged(e); + if (_itemsHolderPanel == null) return; + + if (e.Action == NotifyCollectionChangedAction.Remove || e.Action == NotifyCollectionChangedAction.Replace) + { + if (e.OldItems != null) + { + foreach (var item in e.OldItems) + { + var cp = FindChildContentPresenter(item); + if (cp != null) _itemsHolderPanel.Children.Remove(cp); + } + } + } + else if (e.Action == NotifyCollectionChangedAction.Reset) + { + _itemsHolderPanel.Children.Clear(); + } + } + + private ContentPresenter FindChildContentPresenter(object data) + { + if (_itemsHolderPanel == null) return null; + foreach (ContentPresenter cp in _itemsHolderPanel.Children) + { + if (cp.Content == data) return cp; + } + return null; + } + } +} diff --git a/AssetEditor/Views/MainWindow.xaml b/AssetEditor/Views/MainWindow.xaml index 2f657c76b..cc7211b2f 100644 --- a/AssetEditor/Views/MainWindow.xaml +++ b/AssetEditor/Views/MainWindow.xaml @@ -1,4 +1,4 @@ - @@ -126,7 +127,7 @@ Width="46" Click="OnCloseButtonClick" Style="{StaticResource TitleBarCloseButtonStyle}" - ToolTip="Close" + ToolTip="{loc:Loc MainWindow.Titlebar.Close}" VerticalAlignment="Stretch" Height="Auto"> - + x:Name="EditorsTabControl" BorderThickness="1, 1, 0, 0" > - - - + + + + + + + + + + + + + + + + + + - - - + + + - + @@ -193,22 +214,12 @@ - - - - - - + + + + + + @@ -224,18 +235,12 @@ - - - + + diff --git a/AssetEditor/Views/MenuBarView.xaml b/AssetEditor/Views/MenuBarView.xaml index cd9e254e7..52dfaf8f7 100644 --- a/AssetEditor/Views/MenuBarView.xaml +++ b/AssetEditor/Views/MenuBarView.xaml @@ -5,6 +5,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:AssetEditor.Views" xmlns:viewModels="clr-namespace:AssetEditor.ViewModels" + xmlns:loc="clr-namespace:Shared.Ui.Common;assembly=Shared.Ui" mc:Ignorable="d" d:DesignHeight="30" d:DesignWidth="800"> @@ -16,19 +17,19 @@