Skip to content

Commit 5b28e64

Browse files
committed
Change translation files from json to native xml
Remove LanguageStrings Add CustomKnight style loading of files Add auto dump of english translations Update ReadMe Up version number
1 parent f0aec2e commit 5b28e64

File tree

5 files changed

+136
-196
lines changed

5 files changed

+136
-196
lines changed

Consts/LanguageStrings.cs

Lines changed: 0 additions & 118 deletions
This file was deleted.

LanguageSupport.cs

Lines changed: 105 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
using System.Text;
88
using GlobalEnums;
99
using Language;
10-
using LanguageSupport.Consts;
1110
using Modding;
11+
using On.UnityEngine.UI;
1212
using UnityEngine;
1313

1414
namespace LanguageSupport
@@ -17,7 +17,8 @@ class LanguageSupport : Mod
1717
{
1818
internal static LanguageSupport Instance;
1919

20-
public LanguageStrings LangStrings { get; private set; }
20+
private readonly string FOLDER = "LanguageSupport";
21+
private readonly string DIR;
2122

2223
public override string GetVersion()
2324
{
@@ -36,18 +37,30 @@ public LanguageSupport() : base("Language Support")
3637
{
3738
Instance = this;
3839

39-
LangStrings = new LanguageStrings();
40-
41-
InitCallbacks();
42-
43-
InitLanguage();
40+
switch (SystemInfo.operatingSystemFamily)
41+
{
42+
case OperatingSystemFamily.MacOSX:
43+
DIR = Path.GetFullPath(Application.dataPath + "/Resources/Data/Managed/Mods/" + FOLDER);
44+
break;
45+
default:
46+
DIR = Path.GetFullPath(Application.dataPath + "/Managed/Mods/" + FOLDER);
47+
break;
48+
}
49+
if (!Directory.Exists(DIR))
50+
{
51+
Directory.CreateDirectory(DIR);
52+
}
4453
}
4554

4655
public override void Initialize()
4756
{
4857
Log("Initializing");
4958
Instance = this;
5059

60+
InitCallbacks();
61+
62+
InitLanguage();
63+
5164
foreach (var t in GameObject.FindObjectsOfType<UnityEngine.UI.MenuLanguageSetting>())
5265
{
5366
t.RefreshControls();
@@ -59,114 +72,132 @@ public override void Initialize()
5972
private void InitCallbacks()
6073
{
6174
// Hooks
62-
ModHooks.Instance.LanguageGetHook += OnLanguageGetHook;
63-
On.UnityEngine.UI.MenuLanguageSetting.RefreshAvailableLanguages += OnMenuLanguageSettingRefreshAvailableLanguages;
6475
On.Language.Language.HasLanguageFile += OnLanguageHasLanguageFile;
65-
On.Language.Language.LoadAvailableLanguages += OnLanguageLoadAvailableLanguages;
66-
On.LocalizationSettings.GetLanguageEnum += OnLocalizationSettingsGetLanguageEnum;
76+
On.Language.Language.GetLanguageFileContents += OnLanguageGetLanguageFileContents;
77+
On.UnityEngine.UI.MenuLanguageSetting.RefreshAvailableLanguages += OnMenuLanguageSettingRefreshAvailableLanguages;
6778
}
6879

6980
private void InitLanguage()
7081
{
71-
typeof(Language.Language).GetMethod("LoadAvailableLanguages", BindingFlags.NonPublic | BindingFlags.Static).Invoke(null, null);
72-
Language.Language.LoadLanguage();
73-
}
82+
#region Dump English Files
7483

75-
private void OnMenuLanguageSettingRefreshAvailableLanguages(On.UnityEngine.UI.MenuLanguageSetting.orig_RefreshAvailableLanguages orig, UnityEngine.UI.MenuLanguageSetting self)
76-
{
77-
orig(self);
78-
List<SupportedLanguages> supLang = new List<SupportedLanguages>((SupportedLanguages[]) self.GetType().GetField("langs", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(self));
79-
foreach (var pair in LangStrings.jsonDict)
84+
if (!Directory.Exists($"{DIR}/EN"))
8085
{
81-
try
82-
{
83-
SupportedLanguages t = (SupportedLanguages) Enum.Parse(typeof(LanguageCode), pair.Key, true);
84-
supLang.Add(t);
85-
}
86-
catch (Exception e)
86+
Directory.CreateDirectory($"{DIR}/EN");
87+
}
88+
string[] sheets = new string[]
89+
{
90+
"Achievements",
91+
"Backer Messages",
92+
"Banker",
93+
"Charm Slug",
94+
"Cornifer",
95+
"CP2",
96+
"CP3",
97+
"Credits List",
98+
"Dream Witch",
99+
"Dreamers",
100+
"Elderbug",
101+
"Enemy Dreams",
102+
"General",
103+
"Ghosts",
104+
"Hornet",
105+
"Hunter",
106+
"Iselda",
107+
"Jiji",
108+
"Journal",
109+
"Lore Tablets",
110+
"MainMenu",
111+
"Map Zones",
112+
"Minor NPC",
113+
"Nailmasters",
114+
"Nailsmith",
115+
"Prices",
116+
"Prompts",
117+
"Quirrel",
118+
"Relic Dealer",
119+
"Shaman",
120+
"Sly",
121+
"Stag",
122+
"StagMenu",
123+
"Titles",
124+
"UI",
125+
"Zote"
126+
};
127+
foreach (var sheet in sheets)
128+
{
129+
if (!File.Exists($"{DIR}/EN/{sheet}.txt"))
87130
{
88-
supLang.Add((SupportedLanguages) LangStrings.numberToName.First(x => x.Value == pair.Key).Key);
131+
string t = ((TextAsset)Resources.Load($"Languages/EN_{sheet}", typeof(TextAsset))).text;
132+
using (StreamWriter outputFile = new StreamWriter($"{DIR}/EN/{sheet}.txt"))
133+
{
134+
outputFile.Write(t);
135+
}
89136
}
90137
}
91-
self.GetType().GetField("langs", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(self, supLang.ToArray());
138+
139+
#endregion
140+
141+
typeof(Language.Language).GetMethod("LoadAvailableLanguages", BindingFlags.NonPublic | BindingFlags.Static).Invoke(null, null);
142+
Language.Language.LoadLanguage();
92143
}
93144

94145
private bool OnLanguageHasLanguageFile(On.Language.Language.orig_HasLanguageFile orig, string lang, string sheetTitle)
95146
{
96147
var ret = orig(lang, sheetTitle);
97148
if (!ret)
98149
{
99-
foreach (var pair in LangStrings.jsonDict)
150+
if (File.Exists($"{DIR}/{lang}/{sheetTitle}.txt"))
100151
{
101-
if (lang == pair.Key)
102-
{
103-
ret = true;
104-
}
152+
ret = true;
105153
}
106154
}
107155
return ret;
108156
}
109157

110-
private void OnLanguageLoadAvailableLanguages(On.Language.Language.orig_LoadAvailableLanguages orig)
158+
private string OnLanguageGetLanguageFileContents(On.Language.Language.orig_GetLanguageFileContents orig, string sheetTitle)
111159
{
112-
orig();
113-
List<string> langs = (List<string>) typeof(Language.Language).GetField("availableLanguages", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null);
114-
115-
foreach (var pair in LangStrings.jsonDict)
160+
string ret = orig(sheetTitle);
161+
if (ret == string.Empty)
116162
{
117-
langs.Add(pair.Key);
118-
}
119-
Log("Discovered Languages:");
120-
foreach (var s in langs)
121-
{
122-
Log($"Language: \"{s}\"");
163+
if (File.Exists($"{DIR}/{Language.Language.CurrentLanguage()}/{sheetTitle}.txt"))
164+
{
165+
return File.ReadAllText($"{DIR}/{Language.Language.CurrentLanguage()}/{sheetTitle}.txt");
166+
}
123167
}
124-
125-
typeof(Language.Language).GetField("availableLanguages", BindingFlags.Static | BindingFlags.NonPublic).SetValue(null, langs);
168+
return ret;
126169
}
127170

128-
private LanguageCode OnLocalizationSettingsGetLanguageEnum(On.LocalizationSettings.orig_GetLanguageEnum orig, string langCode)
171+
private void OnMenuLanguageSettingRefreshAvailableLanguages(On.UnityEngine.UI.MenuLanguageSetting.orig_RefreshAvailableLanguages orig, UnityEngine.UI.MenuLanguageSetting self)
129172
{
130-
try
173+
orig(self);
174+
SupportedLanguages[] langs;
175+
if (GameManager.instance.gameConfig.hideLanguageOption)
131176
{
132-
Enum.Parse(typeof(LanguageCode), langCode, true);
133-
return orig(langCode);
177+
langs = (Enum.GetValues(typeof(TestingLanguages)) as SupportedLanguages[]);
134178
}
135-
catch (Exception e)
179+
else
136180
{
137-
foreach (var pair in LangStrings.numberToName)
138-
{
139-
if (langCode == pair.Key.ToString())
140-
{
141-
return (LanguageCode) pair.Key;
142-
}
143-
}
181+
langs = (Enum.GetValues(typeof(SupportedLanguages)) as SupportedLanguages[]);
144182
}
145-
return LanguageCode.EN;
146-
}
147183

148-
#region Get/Set Hooks
184+
List<SupportedLanguages> finalLangs = new List<SupportedLanguages>((SupportedLanguages[]) self.GetType().GetField("langs", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(self));
149185

150-
private string OnLanguageGetHook(string key, string sheet)
151-
{
152-
if (sheet == "MainMenu")
186+
foreach (var l in langs)
153187
{
154-
foreach (var pair in LangStrings.numberToName)
188+
if (File.Exists($"{DIR}/{l}/General.txt"))
155189
{
156-
if (key == $"LANG_{pair.Key}")
157-
{
158-
return pair.Value;
159-
}
190+
finalLangs.Add(l);
160191
}
161192
}
162-
if (LangStrings.ContainsKey(key, sheet))
193+
194+
self.GetType().GetField("langs", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(self, finalLangs.ToArray());
195+
196+
self.optionList = new string[finalLangs.Count];
197+
for (int i = 0; i < finalLangs.Count; i++)
163198
{
164-
return LangStrings.Get(key, sheet);
199+
self.optionList[i] = finalLangs[i].ToString();
165200
}
166-
return Language.Language.GetInternal(key, sheet);
167201
}
168-
169-
#endregion Get/Set Hooks
170-
171202
}
172203
}

LanguageSupport.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,6 @@
204204
</Reference>
205205
</ItemGroup>
206206
<ItemGroup>
207-
<Compile Include="Consts\LanguageStrings.cs" />
208207
<Compile Include="LanguageSupport.cs" />
209208
<Compile Include="Properties\AssemblyInfo.cs" />
210209
</ItemGroup>

Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@
3232
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
3333
// indem Sie "*" wie unten gezeigt eingeben:
3434
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly: AssemblyVersion("1.1.0.0")]
36-
[assembly: AssemblyFileVersion("1.1.0.0")]
35+
[assembly: AssemblyVersion("2.0.0.0")]
36+
[assembly: AssemblyFileVersion("2.0.0.0")]

0 commit comments

Comments
 (0)