Skip to content

Commit

Permalink
Add support for multiple translation languages to release tool
Browse files Browse the repository at this point in the history
  • Loading branch information
ManlyMarco committed Oct 24, 2022
1 parent 996610c commit 8b6bf32
Showing 1 changed file with 108 additions and 92 deletions.
200 changes: 108 additions & 92 deletions tools/ReleaseTool/ReleaseTool/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using ICSharpCode.SharpZipLib.Zip;

namespace ReleaseTool
Expand Down Expand Up @@ -47,6 +48,14 @@ private static void Main(string[] args)
var root = new DirectoryInfo(args[0]);
var translationName = root.Name.Replace("-master", ""); //todo let user enter it

var translationPriorityNumber = 1;
var m = Regex.Match(translationName, @"^(\d\d)_(.+)$");
if (m.Success)
{
translationPriorityNumber = int.Parse(m.Groups[1].Value);
translationName = m.Groups[2].Value;
}

var translationDir = Path.Combine(root.FullName, "translation");
if (!Directory.Exists(translationDir))
{
Expand All @@ -61,8 +70,6 @@ private static void Main(string[] args)
var programDir = Path.GetDirectoryName(typeof(ReleaseTool).Assembly.Location) ??
Environment.CurrentDirectory;

var detailsPath = Path.Combine(programDir, "results.txt");

var outputPath = Path.Combine(programDir, translationName + "_Release_" + DateTime.Now.ToString("yyyy-MM-dd") + ".zip");
File.Delete(outputPath);

Expand Down Expand Up @@ -108,128 +115,137 @@ void AddToZip(string filePath, string entryName)
}
}

var tlDir = Path.Combine(root.FullName, "Translation\\en");
var tlTopDir = Path.Combine(root.FullName, "Translation");

// Make a working copy
Console.WriteLine("Creating a work copy of the translation files...");
var copyDir = new DirectoryInfo(Path.Combine(GetTempPath(), "releasetool_tl_temp"));
if (copyDir.Exists) copyDir.Delete(true);
CopyAll(new DirectoryInfo(tlDir), copyDir);
foreach (var languageCode in Directory.GetDirectories(tlTopDir, "*", SearchOption.TopDirectoryOnly).Select(Path.GetFileName))
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"=============== Processing {languageCode} translation ===============");
Console.ForegroundColor = ConsoleColor.White;

var tlDir = Path.Combine(tlTopDir, languageCode);

// Make a working copy
Console.WriteLine("Creating a work copy of the translation files...");
var copyDir = new DirectoryInfo(Path.Combine(GetTempPath(), "releasetool_tl_temp"));
if (copyDir.Exists) copyDir.Delete(true);
CopyAll(new DirectoryInfo(tlDir), copyDir);

Console.WriteLine("Cleaning untranslated lines and files...");
_originalOut = Console.Out;
var detailsPath = Path.Combine(programDir, $"results_{languageCode}.txt");
Console.SetOut(new StreamWriter(detailsPath));
// Clean up the copied files
var result = CleanTranslations(copyDir, copyDir);
Console.Out.Flush();
Console.SetOut(_originalOut);

// Use the cleaned up copy
tlDir = copyDir.FullName;

Console.WriteLine("Writing cleaned translation files into archives...");

var texDir = Path.Combine(tlDir, "Texture");
if (Directory.Exists(texDir))
{
foreach (var subTexDir in Directory.GetDirectories(texDir))
{
if (!Directory.GetFiles(subTexDir, "*.png", SearchOption.AllDirectories).Any())
continue;

Console.WriteLine("Cleaning untranslated lines and files...");
_originalOut = Console.Out;
Console.SetOut(new StreamWriter(detailsPath));
// Clean up the copied files
var result = CleanTranslations(copyDir, copyDir);
Console.Out.Flush();
Console.SetOut(_originalOut);
var texZipPath = GetTempFileName();
using (var texZipFile = ZipFile.Create(texZipPath))
{
texZipFile.BeginUpdate(new MemoryArchiveStorage(FileUpdateMode.Direct));

// Use the cleaned up copy
tlDir = copyDir.FullName;
foreach (var file in Directory.GetFiles(subTexDir, "*.png", SearchOption.AllDirectories))
{
var entryName = CleanPath(file.Substring(subTexDir.Length));
//Console.WriteLine("Adding texture to texture archive: " + entryName);
texZipFile.Add(file, entryName);
}

Console.WriteLine("Writing cleaned translation files into archives...");
texZipFile.CommitUpdate();
}
AddToZip(texZipPath, $"BepInEx\\Translation\\{languageCode}\\Texture\\{translationPriorityNumber:00}_{translationName}_{Path.GetFileName(subTexDir)}.zip");
}
}

var texDir = Path.Combine(tlDir, "Texture");
if (Directory.Exists(texDir))
{
foreach (var subTexDir in Directory.GetDirectories(texDir))
var assetDir = Path.Combine(tlDir, "RedirectedResources\\assets");
if (Directory.Exists(assetDir) && Directory.GetFiles(assetDir, "translation*.txt", SearchOption.AllDirectories).Any())
{
if (!Directory.GetFiles(subTexDir, "*.png", SearchOption.AllDirectories).Any())
continue;

var texZipPath = GetTempFileName();
using (var texZipFile = ZipFile.Create(texZipPath))
var assZipPath = GetTempFileName();
using (var assZipFile = ZipFile.Create(assZipPath))
{
texZipFile.BeginUpdate(new MemoryArchiveStorage(FileUpdateMode.Direct));
assZipFile.BeginUpdate(new MemoryArchiveStorage(FileUpdateMode.Direct));

foreach (var file in Directory.GetFiles(subTexDir, "*.png", SearchOption.AllDirectories))
foreach (var file in Directory.GetFiles(assetDir, "translation*.txt", SearchOption.AllDirectories))
{
var entryName = CleanPath(file.Substring(subTexDir.Length));
//Console.WriteLine("Adding texture to texture archive: " + entryName);
texZipFile.Add(file, entryName);
var entryName = CleanPath(file.Substring(assetDir.Length));
//Console.WriteLine("Adding to redirected assets archive: " + entryName);
assZipFile.Add(file, entryName);
}

texZipFile.CommitUpdate();
assZipFile.CommitUpdate();
}
AddToZip(texZipPath, "BepInEx\\Translation\\en\\Texture\\" + translationName + "_" + Path.GetFileName(subTexDir) + ".zip");
AddToZip(assZipPath, $"BepInEx\\Translation\\{languageCode}\\RedirectedResources\\assets\\{translationPriorityNumber:00}_{translationName}_Translations.zip");
}
}

var assetDir = Path.Combine(tlDir, "RedirectedResources\\assets");
if (Directory.Exists(assetDir) && Directory.GetFiles(assetDir, "translation*.txt", SearchOption.AllDirectories).Any())
{
var assZipPath = GetTempFileName();
using (var assZipFile = ZipFile.Create(assZipPath))
assetDir = Path.Combine(tlDir, "RedirectedResources\\assets");
if (Directory.Exists(assetDir) && Directory.GetFiles(assetDir, "zz_machineTranslation.txt", SearchOption.AllDirectories).Any())
{
assZipFile.BeginUpdate(new MemoryArchiveStorage(FileUpdateMode.Direct));

foreach (var file in Directory.GetFiles(assetDir, "translation*.txt", SearchOption.AllDirectories))
var assZipPath = GetTempFileName();
using (var assZipFile = ZipFile.Create(assZipPath))
{
var entryName = CleanPath(file.Substring(assetDir.Length));
//Console.WriteLine("Adding to redirected assets archive: " + entryName);
assZipFile.Add(file, entryName);
}

assZipFile.CommitUpdate();
}
AddToZip(assZipPath, "BepInEx\\Translation\\en\\RedirectedResources\\assets\\" + "01_" + translationName + "_Translations.zip");
}
assZipFile.BeginUpdate(new MemoryArchiveStorage(FileUpdateMode.Direct));

assetDir = Path.Combine(tlDir, "RedirectedResources\\assets");
if (Directory.Exists(assetDir) && Directory.GetFiles(assetDir, "zz_machineTranslation.txt", SearchOption.AllDirectories).Any())
{
var assZipPath = GetTempFileName();
using (var assZipFile = ZipFile.Create(assZipPath))
{
assZipFile.BeginUpdate(new MemoryArchiveStorage(FileUpdateMode.Direct));
foreach (var file in Directory.GetFiles(assetDir, "zz_machineTranslation.txt", SearchOption.AllDirectories))
{
var entryName = CleanPath(file.Substring(assetDir.Length));
//Console.WriteLine("Adding to redirected assets archive: " + entryName);
assZipFile.Add(file, entryName);
}

foreach (var file in Directory.GetFiles(assetDir, "zz_machineTranslation.txt", SearchOption.AllDirectories))
{
var entryName = CleanPath(file.Substring(assetDir.Length));
//Console.WriteLine("Adding to redirected assets archive: " + entryName);
assZipFile.Add(file, entryName);
assZipFile.CommitUpdate();
}

assZipFile.CommitUpdate();
AddToZip(assZipPath, $"BepInEx\\Translation\\{languageCode}\\RedirectedResources\\assets\\09_{translationName}_MachineTranslations.zip");
}
AddToZip(assZipPath, "BepInEx\\Translation\\en\\RedirectedResources\\assets\\" + "09_" + translationName + "_MachineTranslations.zip");
}

var textDir = Path.Combine(tlDir, "Text");
if (Directory.Exists(textDir) && Directory.GetFiles(textDir, "*.txt", SearchOption.AllDirectories).Any())
{
var textZipPath = GetTempFileName();
using (var textZipFile = ZipFile.Create(textZipPath))
var textDir = Path.Combine(tlDir, "Text");
if (Directory.Exists(textDir) && Directory.GetFiles(textDir, "*.txt", SearchOption.AllDirectories).Any())
{
textZipFile.BeginUpdate(new MemoryArchiveStorage(FileUpdateMode.Direct));

foreach (var file in Directory.GetFiles(textDir, "*.txt", SearchOption.AllDirectories))
var textZipPath = GetTempFileName();
using (var textZipFile = ZipFile.Create(textZipPath))
{
var entryName = CleanPath(file.Substring(textDir.Length));
//Console.WriteLine("Adding to redirected assets archive: " + entryName);
textZipFile.Add(file, entryName);
}
textZipFile.BeginUpdate(new MemoryArchiveStorage(FileUpdateMode.Direct));

textZipFile.CommitUpdate();
foreach (var file in Directory.GetFiles(textDir, "*.txt", SearchOption.AllDirectories))
{
var entryName = CleanPath(file.Substring(textDir.Length));
//Console.WriteLine("Adding to redirected assets archive: " + entryName);
textZipFile.Add(file, entryName);
}

textZipFile.CommitUpdate();
}
AddToZip(textZipPath, $"BepInEx\\Translation\\{languageCode}\\Text\\{translationPriorityNumber:00}_{translationName}_Text.zip");
}
AddToZip(textZipPath, "BepInEx\\Translation\\en\\Text\\" + translationName + "_Text.zip");

Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"Creating {languageCode} release done, {result.GetPercent() * 100:F3}% completed.");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Detailed results were saved to " + detailsPath);
Console.ForegroundColor = ConsoleColor.White;

copyDir.Delete(true);
}

Console.WriteLine("\nCompressing and saving...");
foreach (ZipEntry entry in output)
{
entry.CompressionMethod = CompressionMethod.Deflated;
}

Console.WriteLine("Compressing...");

output.CommitUpdate();

Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"Creating release done, {result.GetPercent() * 100:F3}% completed.");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Detailed results were saved to " + detailsPath);

copyDir.Delete(true);
}
}
}
Expand Down

0 comments on commit 8b6bf32

Please sign in to comment.