diff --git a/SM64 ROM Manager Administration.sln b/SM64 ROM Manager Administration.sln index 5f68dc4..5869ed2 100644 --- a/SM64 ROM Manager Administration.sln +++ b/SM64 ROM Manager Administration.sln @@ -1,12 +1,14 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.32002.261 +# Visual Studio Version 17 +VisualStudioVersion = 17.2.32602.215 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SM64 ROM Manager.ProgressUpdater", "SM64 ROM Manager.ProgressUpdater\SM64 ROM Manager.ProgressUpdater.csproj", "{E2B5326E-FF5F-4521-BD8A-0A8DA5A6671E}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SM64 ROM Manager.UpdateInstallerAddOn", "SM64 ROM Manager.UpdateInstallerAddOn\SM64 ROM Manager.UpdateInstallerAddOn.csproj", "{C702C309-65C1-4FE4-B468-035ADC31FDEF}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SM64 ROM Manager.LangResCollector", "SM64 ROM Manager.LangResCollector\SM64 ROM Manager.LangResCollector.csproj", "{BE9DA0F8-654E-4035-A71B-7A04E009BE46}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -21,6 +23,10 @@ Global {C702C309-65C1-4FE4-B468-035ADC31FDEF}.Debug|Any CPU.Build.0 = Debug|Any CPU {C702C309-65C1-4FE4-B468-035ADC31FDEF}.Release|Any CPU.ActiveCfg = Release|Any CPU {C702C309-65C1-4FE4-B468-035ADC31FDEF}.Release|Any CPU.Build.0 = Release|Any CPU + {BE9DA0F8-654E-4035-A71B-7A04E009BE46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BE9DA0F8-654E-4035-A71B-7A04E009BE46}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BE9DA0F8-654E-4035-A71B-7A04E009BE46}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BE9DA0F8-654E-4035-A71B-7A04E009BE46}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/SM64 ROM Manager.LangResCollector/Program.cs b/SM64 ROM Manager.LangResCollector/Program.cs new file mode 100644 index 0000000..da2e443 --- /dev/null +++ b/SM64 ROM Manager.LangResCollector/Program.cs @@ -0,0 +1,124 @@ +using Microsoft.VisualBasic; +using static Microsoft.VisualBasic.CompilerServices.LikeOperator; +using System; +using System.Collections.Generic; +using System.IO; +using System.Resources; +using System.Collections; +using System.Linq; +using Microsoft.WindowsAPICodePack.Dialogs; + +namespace SM64_ROM_Manager_LangRes_Collector +{ + class Program + { + static void Main(string[] args) + { + var resFiles = new List(); + var ofd = new CommonOpenFileDialog { IsFolderPicker = true }; + string rootPath, outputPath; + var fileNameBlackList = new string[] + { + "Resources.resx", + "My*Icons.resx", + "*.de.resx", + "ReflectionSymbols.resx", + "UpdatingAdministrationLangRes" + }; + var fileNameWhiteList = new string[] + { + "*.resx" + }; + var blackListPropNames = new string[] + { + ">>*", + "*.AccessibleName", + "*.AccessibleDescription" + }; + + // Get root path + ofd.Title = "Root (repository) directory"; + if (ofd.ShowDialog() == CommonFileDialogResult.Ok) + rootPath = ofd.FileName; + else + return; + + // Get output path + ofd.Title = "Output directory"; + if (ofd.ShowDialog() == CommonFileDialogResult.Ok) + outputPath = ofd.FileName; + else + return; + + // Collect files + if (Directory.Exists(rootPath)) + { + foreach (var filePath in Directory.GetFiles(rootPath, "*.resx", SearchOption.AllDirectories)) + { + var fileName = Path.GetFileName(filePath); + var copyFile = true; + + foreach (var blackFileName in fileNameBlackList) + { + if (copyFile && LikeString(fileName, blackFileName, CompareMethod.Binary)) + copyFile = false; + } + + foreach (var whiteFileName in fileNameWhiteList) + { + if (copyFile && !LikeString(fileName, whiteFileName, CompareMethod.Binary)) + copyFile = false; + } + + if (copyFile) + resFiles.Add(filePath); + } + } + + // Create output path if not exists + Directory.CreateDirectory(outputPath); + + // Copy and prepair files + foreach (var resFileInput in resFiles) + { + var resReader = new ResXResourceReader(resFileInput); + var propsToCopy = new Dictionary(); + + // Collect input properties + foreach (DictionaryEntry kvp in resReader) + { + var propName = (string)kvp.Key; + var useProp = true; + + foreach (var blackPropName in blackListPropNames) + { + if (useProp && LikeString(propName, blackPropName, CompareMethod.Binary)) + useProp = false; + } + + if (useProp && kvp.Value is string) + { + var val = (string)kvp.Value; + + if (!string.IsNullOrEmpty(val)) + propsToCopy.Add(propName, (string)kvp.Value); + } + } + + resReader.Close(); + + // Write output ResX file + if (propsToCopy.Any()) + { + var resFileOutput = Path.Combine(outputPath, Path.GetFileName(resFileInput)); + var resWriter = new ResXResourceWriter(resFileOutput); + + foreach (var kvp in propsToCopy) + resWriter.AddResource(kvp.Key, kvp.Value); + + resWriter.Close(); + } + } + } + } +} diff --git a/SM64 ROM Manager.LangResCollector/SM64 ROM Manager.LangResCollector.csproj b/SM64 ROM Manager.LangResCollector/SM64 ROM Manager.LangResCollector.csproj new file mode 100644 index 0000000..23ea8df --- /dev/null +++ b/SM64 ROM Manager.LangResCollector/SM64 ROM Manager.LangResCollector.csproj @@ -0,0 +1,46 @@ + + + + Exe + net6.0-windows7 + true + SM64_ROM_Manager_LangRes_Collector + SM64_ROM_Manager_LangRes_Collector.Program + + + + + + + + + + ..\Shared Libs\DotNetBarNew\DevComponents.Charts.Design.dll + + + ..\Shared Libs\DotNetBarNew\DevComponents.DotNetBar.Charts.dll + + + ..\Shared Libs\DotNetBarNew\DevComponents.DotNetBar.Keyboard.dll + + + ..\Shared Libs\DotNetBarNew\DevComponents.DotNetBar.Layout.dll + + + ..\Shared Libs\DotNetBarNew\DevComponents.DotNetBar.Schedule.dll + + + ..\Shared Libs\DotNetBarNew\DevComponents.DotNetBar.SuperGrid.dll + + + ..\Shared Libs\DotNetBarNew\DevComponents.DotNetBar2.dll + + + ..\Shared Libs\DotNetBarNew\DevComponents.Instrumentation.dll + + + ..\Shared Libs\DotNetBarNew\DevComponents.TreeGX.dll + + + +