66using System . Security . Cryptography ;
77using System . Text ;
88using GlobalEnums ;
9+ using Language ;
910using LanguageSupport . Consts ;
1011using Modding ;
11- using On . UnityEngine . UI ;
1212using UnityEngine ;
1313
1414namespace 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 {
0 commit comments