Skip to content

Commit f0aec2e

Browse files
committed
Fix #1
Fix #2 Up Version Number
1 parent cc736c0 commit f0aec2e

File tree

3 files changed

+99
-29
lines changed

3 files changed

+99
-29
lines changed

Consts/LanguageStrings.cs

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.IO;
55
using System.Linq;
66
using System.Reflection;
7+
using Language;
78
using UnityEngine;
89
using UnityEngine.Analytics;
910
using Logger = Modding.Logger;
@@ -12,14 +13,17 @@ namespace LanguageSupport.Consts
1213
{
1314
public class LanguageStrings
1415
{
15-
private readonly Dictionary<string, Dictionary<string, Dictionary<string, string>>> jsonDict = new Dictionary<string, Dictionary<string, Dictionary<string, string>>>();
16-
private readonly Dictionary<int, string> numberToName = new Dictionary<int, string>();
16+
public Dictionary<string, Dictionary<string, Dictionary<string, string>>> jsonDict { get; private set; }
17+
public Dictionary<int, string> numberToName { get; private set; }
1718
private readonly string FOLDER = "LanguageSupport";
1819
private readonly string DIR;
1920

2021
public LanguageStrings()
2122
{
22-
int i = 256;
23+
jsonDict = new Dictionary<string, Dictionary<string, Dictionary<string, string>>>();
24+
numberToName = new Dictionary<int, string>();
25+
26+
int i = 0;
2327
switch (SystemInfo.operatingSystemFamily)
2428
{
2529
case OperatingSystemFamily.MacOSX:
@@ -46,8 +50,18 @@ public LanguageStrings()
4650

4751
using (StreamReader sr = fileInfo.OpenText())
4852
{
49-
jsonDict.Add(i.ToString(), JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(sr.ReadToEnd()));
50-
numberToName.Add(i, basename);
53+
LanguageCode index;
54+
try
55+
{
56+
index = (LanguageCode)Enum.Parse(typeof(LanguageCode), basename, true);
57+
}
58+
catch (Exception e)
59+
{
60+
index = (LanguageCode) 256 + i;
61+
i++;
62+
numberToName.Add((int)index, basename);
63+
}
64+
jsonDict.Add(((int)index).ToString(), JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(sr.ReadToEnd()));
5165
}
5266
}
5367
}
@@ -65,16 +79,6 @@ public string Get(string key, string sheet)
6579
}
6680
}
6781

68-
public List<KeyValuePair<int, string>> GetLanguages()
69-
{
70-
var pairList = new List<KeyValuePair<int, string>>();
71-
foreach (var pair in numberToName)
72-
{
73-
pairList.Add(pair);
74-
}
75-
return pairList.OrderBy(x => x.Key).ToList();
76-
}
77-
7882
public bool ContainsKey(string key, string sheet)
7983
{
8084
try

LanguageSupport.cs

Lines changed: 78 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
using System.Security.Cryptography;
77
using System.Text;
88
using GlobalEnums;
9+
using Language;
910
using LanguageSupport.Consts;
1011
using Modding;
11-
using On.UnityEngine.UI;
1212
using UnityEngine;
1313

1414
namespace LanguageSupport
@@ -39,6 +39,8 @@ public LanguageSupport() : base("Language Support")
3939
LangStrings = new LanguageStrings();
4040

4141
InitCallbacks();
42+
43+
InitLanguage();
4244
}
4345

4446
public override void Initialize()
@@ -59,24 +61,88 @@ private void InitCallbacks()
5961
// Hooks
6062
ModHooks.Instance.LanguageGetHook += OnLanguageGetHook;
6163
On.UnityEngine.UI.MenuLanguageSetting.RefreshAvailableLanguages += OnMenuLanguageSettingRefreshAvailableLanguages;
64+
On.Language.Language.HasLanguageFile += OnLanguageHasLanguageFile;
65+
On.Language.Language.LoadAvailableLanguages += OnLanguageLoadAvailableLanguages;
66+
On.LocalizationSettings.GetLanguageEnum += OnLocalizationSettingsGetLanguageEnum;
6267
}
6368

64-
private void OnMenuLanguageSettingRefreshAvailableLanguages(MenuLanguageSetting.orig_RefreshAvailableLanguages orig, UnityEngine.UI.MenuLanguageSetting self)
69+
private void InitLanguage()
70+
{
71+
typeof(Language.Language).GetMethod("LoadAvailableLanguages", BindingFlags.NonPublic | BindingFlags.Static).Invoke(null, null);
72+
Language.Language.LoadLanguage();
73+
}
74+
75+
private void OnMenuLanguageSettingRefreshAvailableLanguages(On.UnityEngine.UI.MenuLanguageSetting.orig_RefreshAvailableLanguages orig, UnityEngine.UI.MenuLanguageSetting self)
6576
{
6677
orig(self);
67-
Log(1);
6878
List<SupportedLanguages> supLang = new List<SupportedLanguages>((SupportedLanguages[]) self.GetType().GetField("langs", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(self));
69-
Log(2);
70-
var langNames = LangStrings.GetLanguages();
71-
Log(3);
72-
for (int i = 256; i < 256 + langNames.Count; i++)
79+
foreach (var pair in LangStrings.jsonDict)
7380
{
74-
Log(4);
75-
supLang.Add((SupportedLanguages) i);
81+
try
82+
{
83+
SupportedLanguages t = (SupportedLanguages) Enum.Parse(typeof(LanguageCode), pair.Key, true);
84+
supLang.Add(t);
85+
}
86+
catch (Exception e)
87+
{
88+
supLang.Add((SupportedLanguages) LangStrings.numberToName.First(x => x.Value == pair.Key).Key);
89+
}
7690
}
77-
Log(5);
7891
self.GetType().GetField("langs", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(self, supLang.ToArray());
79-
Log(6);
92+
}
93+
94+
private bool OnLanguageHasLanguageFile(On.Language.Language.orig_HasLanguageFile orig, string lang, string sheetTitle)
95+
{
96+
var ret = orig(lang, sheetTitle);
97+
if (!ret)
98+
{
99+
foreach (var pair in LangStrings.jsonDict)
100+
{
101+
if (lang == pair.Key)
102+
{
103+
ret = true;
104+
}
105+
}
106+
}
107+
return ret;
108+
}
109+
110+
private void OnLanguageLoadAvailableLanguages(On.Language.Language.orig_LoadAvailableLanguages orig)
111+
{
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)
116+
{
117+
langs.Add(pair.Key);
118+
}
119+
Log("Discovered Languages:");
120+
foreach (var s in langs)
121+
{
122+
Log($"Language: \"{s}\"");
123+
}
124+
125+
typeof(Language.Language).GetField("availableLanguages", BindingFlags.Static | BindingFlags.NonPublic).SetValue(null, langs);
126+
}
127+
128+
private LanguageCode OnLocalizationSettingsGetLanguageEnum(On.LocalizationSettings.orig_GetLanguageEnum orig, string langCode)
129+
{
130+
try
131+
{
132+
Enum.Parse(typeof(LanguageCode), langCode, true);
133+
return orig(langCode);
134+
}
135+
catch (Exception e)
136+
{
137+
foreach (var pair in LangStrings.numberToName)
138+
{
139+
if (langCode == pair.Key.ToString())
140+
{
141+
return (LanguageCode) pair.Key;
142+
}
143+
}
144+
}
145+
return LanguageCode.EN;
80146
}
81147

82148
#region Get/Set Hooks
@@ -85,7 +151,7 @@ private string OnLanguageGetHook(string key, string sheet)
85151
{
86152
if (sheet == "MainMenu")
87153
{
88-
foreach (var pair in LangStrings.GetLanguages())
154+
foreach (var pair in LangStrings.numberToName)
89155
{
90156
if (key == $"LANG_{pair.Key}")
91157
{

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.0.0.0")]
36-
[assembly: AssemblyFileVersion("1.0.0.0")]
35+
[assembly: AssemblyVersion("1.1.0.0")]
36+
[assembly: AssemblyFileVersion("1.1.0.0")]

0 commit comments

Comments
 (0)