@@ -12,6 +12,9 @@ namespace PolyMod.Managers;
1212/// </summary>
1313public static class Loc
1414{
15+ public record TermInfo ( string term , string localizedString ) ;
16+ internal static Dictionary < int , string > languagesToAdd = new ( ) ;
17+
1518 /// <summary>
1619 /// Patches the tribe selection popup to correctly display descriptions for custom skins.
1720 /// </summary>
@@ -112,6 +115,62 @@ public static void BuildAndLoadLocalization(Dictionary<string, Dictionary<string
112115 }
113116 }
114117
118+ [ HarmonyPrefix ]
119+ [ HarmonyPatch ( typeof ( SettingsScreen ) , nameof ( SettingsScreen . LanguageChangedCallback ) ) ]
120+ public static bool LanguageChangedCallback ( SettingsScreen __instance , int index )
121+ {
122+ Console . Write ( "LanguageChangedCallback" ) ;
123+ Console . Write ( index ) ;
124+ Il2CppSystem . Nullable < int > il2cppNullable = __instance . languageSelector . GetIdForIndex ( index ) ;
125+ Console . Write ( il2cppNullable . HasValue ) ;
126+ if ( ! il2cppNullable . HasValue )
127+ {
128+ var allLanguages = LocalizationManager . GetAllLanguages ( ) ;
129+ string languageName = allLanguages [ index ] ;
130+ string languageCode = LocalizationManager . GetLanguageCode ( languageName ) ;
131+ Console . Write ( languageCode ) ;
132+ SettingsUtils . Language = languageCode ;
133+ LocalizationManager . CurrentLanguage = languageName ;
134+ UINavigationManager . Select ( __instance . languageSelector . GetCurrentSelectable ( ) ) ;
135+ }
136+ else
137+ {
138+ Console . Write ( il2cppNullable . Value ) ;
139+ }
140+ return il2cppNullable . HasValue ;
141+ }
142+ public static void BuildAndLoadCustomLanguage ( string name , Dictionary < string , string > terms )
143+ {
144+ LanguageSourceData source = LocalizationManager . Sources [ 0 ] ;
145+ int languageIndex = source . GetLanguageIndex ( name ) ;
146+ string languageName = terms [ "language" ] ;
147+ if ( languageIndex == - 1 )
148+ {
149+ source . AddLanguage ( terms [ "language" ] , name ) ;
150+ languageIndex = source . GetLanguageIndex ( languageName ) ;
151+ languagesToAdd [ languageIndex ] = terms [ "language" ] ;
152+ Console . Write ( $ "{ name } language added.") ;
153+ }
154+
155+ foreach ( var kvp in terms )
156+ {
157+ TermData term = source . GetTermData ( kvp . Key ) ;
158+ if ( term == null )
159+ {
160+ source . AddTerm ( kvp . Key ) ;
161+ term = source . GetTermData ( kvp . Key ) ;
162+ }
163+
164+ term . Languages [ languageIndex ] = kvp . Value ;
165+ }
166+
167+ LocalizationManager . UpdateSources ( ) ;
168+
169+ // LocalizationManager.CurrentLanguage = name;
170+
171+ Console . Write ( $ "{ name } strings added and language activated!") ;
172+ }
173+
115174 /// <summary>
116175 /// Initializes the Loc manager by patching the necessary methods.
117176 /// </summary>
0 commit comments