mirror of
https://github.com/All-Of-Us-Mods/MiraAPI.git
synced 2026-10-19 15:51:48 +00:00
Fix xml loading
This commit is contained in:
1 parent
47582897a8
commit
5b006ab7d3
1 file changed
+30
-11
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Xml.Linq;
|
||||
using System.Xml;
|
||||
using UnityEngine;
|
||||
|
||||
namespace MiraAPI.Translation;
|
||||
@@ -180,12 +180,18 @@ public static class MiraLocaleManager
|
||||
private static void LoadInternalStrings(Assembly assembly, string modGuid, string dir)
|
||||
{
|
||||
Directory.CreateDirectory(dir);
|
||||
|
||||
if (!Locale.ContainsKey(modGuid))
|
||||
{
|
||||
Locale[modGuid] = [];
|
||||
}
|
||||
|
||||
var resourcePrefix = $"{assembly.GetName().Name}.Resources.Locale.";
|
||||
|
||||
foreach (var locale in LangList)
|
||||
{
|
||||
using var resourceStream =
|
||||
assembly.GetManifestResourceStream(resourcePrefix + locale.Value);
|
||||
assembly.GetManifestResourceStream(resourcePrefix + locale.Value + ".xml");
|
||||
if (resourceStream == null)
|
||||
{
|
||||
// Silently skipped
|
||||
@@ -202,7 +208,7 @@ public static class MiraLocaleManager
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Error($"Failed to load translation {resourcePrefix}.{locale.Value}: {e.Message}");
|
||||
Error($"Failed to load translation {resourcePrefix}{locale.Value}: {e.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -233,17 +239,23 @@ public static class MiraLocaleManager
|
||||
}
|
||||
}
|
||||
|
||||
private static Dictionary<string, string> ParseXmlFile(string filePath)
|
||||
private static Dictionary<string, string> ParseXmlFile(string xmlContent)
|
||||
{
|
||||
var dict = new Dictionary<string, string>();
|
||||
var doc = XDocument.Load(filePath);
|
||||
|
||||
if (doc.Root == null) return dict;
|
||||
|
||||
foreach (var element in doc.Root.Elements("string"))
|
||||
XmlDocument xmlDoc = new();
|
||||
try
|
||||
{
|
||||
var name = element.Attribute("name")?.Value;
|
||||
var value = element.Value;
|
||||
xmlDoc.LoadXml(xmlContent);
|
||||
XmlNodeList? stringNodes = xmlDoc.SelectNodes("/resources/string");
|
||||
|
||||
if (stringNodes != null)
|
||||
{
|
||||
foreach (XmlNode node in stringNodes)
|
||||
{
|
||||
if (node.Attributes?["name"] != null)
|
||||
{
|
||||
string name = node.Attributes["name"]!.Value;
|
||||
string value = node.InnerText;
|
||||
|
||||
if (string.IsNullOrEmpty(name)) continue;
|
||||
|
||||
@@ -261,6 +273,13 @@ public static class MiraLocaleManager
|
||||
|
||||
dict[name] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (XmlException ex)
|
||||
{
|
||||
Error($"XML parsing error: {ex.Message}");
|
||||
}
|
||||
|
||||
return dict;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user