|
|
@@ -2,6 +2,7 @@ |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.IO; |
|
|
|
using System.Linq; |
|
|
|
using System.Reflection; |
|
|
|
using GamecraftModdingAPI; |
|
|
|
using GamecraftModdingAPI.App; |
|
|
|
using GamecraftModdingAPI.Commands; |
|
|
@@ -18,6 +19,7 @@ namespace Localization |
|
|
|
{ |
|
|
|
private readonly DirectoryInfo _pluginFolder = new DirectoryInfo(Path.Combine("Plugins", "Localization")); |
|
|
|
private Dictionary<string, string> _origStrings; |
|
|
|
private readonly string[] _embeddedLanguages = Assembly.GetExecutingAssembly().GetManifestResourceNames(); |
|
|
|
|
|
|
|
public override void OnApplicationStart() |
|
|
|
{ |
|
|
@@ -60,30 +62,29 @@ namespace Localization |
|
|
|
.Action(() => |
|
|
|
{ |
|
|
|
Logging.CommandLog(new[] {"en"}.Concat(_pluginFolder.EnumerateFiles() |
|
|
|
.Where(file => file.Extension == ".json" && file.Name.Length < 8) |
|
|
|
.Select(file => file.Name.Replace(file.Extension, ""))).Distinct() |
|
|
|
.Aggregate((a, b) => a + ", " + b)); |
|
|
|
.Where(file => file.Extension == ".json" |
|
|
|
&& (file.Name.Length < 8 || file.Name.Contains("-"))) |
|
|
|
.Select(file => file.Name.Replace(file.Extension, ""))) |
|
|
|
.Concat(_embeddedLanguages) |
|
|
|
.Select(lang => lang.Replace("Localization.", "").Replace(".json", "")) |
|
|
|
.Distinct().Aggregate((a, b) => a + ", " + b)); |
|
|
|
}).Build(); |
|
|
|
CommandBuilder.Builder("DumpLangStrings", "Dumps the current strings. Set language to en-us first.") |
|
|
|
CommandBuilder.Builder("DumpLangStrings", "Dumps the current strings. Set language to en first.") |
|
|
|
.Action(() => |
|
|
|
{ |
|
|
|
File.WriteAllText(Path.Combine(_pluginFolder.FullName, "dumped.json"), |
|
|
|
JsonConvert.SerializeObject(_origStrings, Formatting.Indented)); |
|
|
|
}).Build(); |
|
|
|
|
|
|
|
if (!settings.ContainsKey("autoload") || (bool) settings["autoload"]) |
|
|
|
if (!settings.ContainsKey("autoload")) |
|
|
|
{ |
|
|
|
settings["autoload"] = true; |
|
|
|
using (var stream = new JsonTextWriter(new StreamWriter(File.OpenWrite(settingsPath)))) |
|
|
|
settings.WriteTo(stream); |
|
|
|
Client.EnterMenu += TryLoadSteamLanguageMenuEnterEvent; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
settings["autoload"] = false; |
|
|
|
using (var stream = new JsonTextWriter(new StreamWriter(File.OpenWrite(settingsPath)))) |
|
|
|
settings.WriteTo(stream); |
|
|
|
} |
|
|
|
|
|
|
|
if ((bool) settings["autoload"]) |
|
|
|
Client.EnterMenu += TryLoadSteamLanguageMenuEnterEvent; |
|
|
|
} |
|
|
|
|
|
|
|
public override void OnApplicationQuit() |
|
|
@@ -98,21 +99,42 @@ namespace Localization |
|
|
|
string langPath = Path.Combine(_pluginFolder.FullName, lang + ".json"); |
|
|
|
if (!File.Exists(langPath)) |
|
|
|
{ |
|
|
|
if (lang == "en") |
|
|
|
if (_embeddedLanguages.Contains("Localization." + lang + ".json")) |
|
|
|
langPath = null; |
|
|
|
else |
|
|
|
{ |
|
|
|
AccessTools.Method(typeof(LocalizationService), "Init").Invoke(null, new object[0]); |
|
|
|
_origStrings = null; //Reset as the object changed |
|
|
|
LoadOriginalStrings(); |
|
|
|
Logging.CommandLog("Strings reset to default. (" + _origStrings.Count + " strings in total)"); |
|
|
|
if (lang == "en") |
|
|
|
{ |
|
|
|
AccessTools.Method(typeof(LocalizationService), "Init").Invoke(null, new object[0]); |
|
|
|
_origStrings = null; //Reset as the object changed |
|
|
|
LoadOriginalStrings(); |
|
|
|
Logging.CommandLog("Strings reset to default. (" + _origStrings.Count + " strings in total)"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
Logging.CommandLogError("Could not find json file!"); |
|
|
|
return; |
|
|
|
} |
|
|
|
Logging.CommandLogError("Could not find json file!"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
var strings = JsonConvert.DeserializeObject<Dictionary<string, string>>(File.ReadAllText(langPath)); |
|
|
|
foreach (var kv in strings) |
|
|
|
string jsonText = langPath != null ? File.ReadAllText(langPath) : null; |
|
|
|
if (jsonText == null) |
|
|
|
{ |
|
|
|
var stream = Assembly.GetExecutingAssembly() |
|
|
|
.GetManifestResourceStream("Localization." + lang + ".json"); |
|
|
|
if (stream != null) |
|
|
|
using (var st = new StreamReader(stream)) |
|
|
|
jsonText = st.ReadToEnd(); |
|
|
|
else |
|
|
|
{ |
|
|
|
Logging.CommandLogError("Failed to load embedded translation for " + lang); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var strings = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonText); |
|
|
|
foreach (var kv in strings) |
|
|
|
{ |
|
|
|
if (!_origStrings.Remove(kv.Key)) |
|
|
|
Logging.CommandLogWarning(kv.Key + " wasn't in the original file."); |
|
|
|
_origStrings.Add(kv.Key, kv.Value); |
|
|
|