@@ -67,9 +67,9 @@ private static string GetSystemLanguageCodeAtStartup()
6767 return DefaultLanguageCode ;
6868 }
6969
70- internal void AddPluginLanguageDirectories ( IEnumerable < PluginPair > plugins )
70+ private void AddPluginLanguageDirectories ( )
7171 {
72- foreach ( var plugin in plugins )
72+ foreach ( var plugin in PluginManager . GetPluginsForInterface < IPluginI18n > ( ) )
7373 {
7474 var location = Assembly . GetAssembly ( plugin . Plugin . GetType ( ) ) . Location ;
7575 var dir = Path . GetDirectoryName ( location ) ;
@@ -96,6 +96,32 @@ private void LoadDefaultLanguage()
9696 _oldResources . Clear ( ) ;
9797 }
9898
99+ /// <summary>
100+ /// Initialize language. Will change app language and plugin language based on settings.
101+ /// </summary>
102+ public async Task InitializeLanguageAsync ( )
103+ {
104+ // Get actual language
105+ var languageCode = _settings . Language ;
106+ if ( languageCode == Constant . SystemLanguageCode )
107+ {
108+ languageCode = SystemLanguageCode ;
109+ }
110+
111+ // Get language by language code and change language
112+ var language = GetLanguageByLanguageCode ( languageCode ) ;
113+
114+ // Add plugin language directories first so that we can load language files from plugins
115+ AddPluginLanguageDirectories ( ) ;
116+
117+ // Change language
118+ await ChangeLanguageAsync ( language ) ;
119+ }
120+
121+ /// <summary>
122+ /// Change language during runtime. Will change app language and plugin language & save settings.
123+ /// </summary>
124+ /// <param name="languageCode"></param>
99125 public void ChangeLanguage ( string languageCode )
100126 {
101127 languageCode = languageCode . NonNull ( ) ;
@@ -110,44 +136,45 @@ public void ChangeLanguage(string languageCode)
110136
111137 // Get language by language code and change language
112138 var language = GetLanguageByLanguageCode ( languageCode ) ;
113- ChangeLanguage ( language , isSystem ) ;
114- }
115139
116- private Language GetLanguageByLanguageCode ( string languageCode )
117- {
118- var lowercase = languageCode . ToLower ( ) ;
119- var language = AvailableLanguages . GetAvailableLanguages ( ) . FirstOrDefault ( o => o . LanguageCode . ToLower ( ) == lowercase ) ;
120- if ( language == null )
121- {
122- Log . Error ( $ "|Internationalization.GetLanguageByLanguageCode|Language code can't be found <{ languageCode } >") ;
123- return AvailableLanguages . English ;
124- }
125- else
126- {
127- return language ;
128- }
140+ // Change language
141+ _ = ChangeLanguageAsync ( language ) ;
142+
143+ // Save settings
144+ _settings . Language = isSystem ? Constant . SystemLanguageCode : language . LanguageCode ;
129145 }
130146
131- private void ChangeLanguage ( Language language , bool isSystem )
147+ private async Task ChangeLanguageAsync ( Language language )
132148 {
133- language = language . NonNull ( ) ;
134-
149+ // Remove old language files and load language
135150 RemoveOldLanguageFiles ( ) ;
136151 if ( language != AvailableLanguages . English )
137152 {
138153 LoadLanguage ( language ) ;
139154 }
155+
140156 // Culture of main thread
141157 // Use CreateSpecificCulture to preserve possible user-override settings in Windows, if Flow's language culture is the same as Windows's
142158 CultureInfo . CurrentCulture = CultureInfo . CreateSpecificCulture ( language . LanguageCode ) ;
143159 CultureInfo . CurrentUICulture = CultureInfo . CurrentCulture ;
144160
145- // Raise event after culture is set
146- _settings . Language = isSystem ? Constant . SystemLanguageCode : language . LanguageCode ;
147- _ = Task . Run ( ( ) =>
161+ // Raise event for plugins after culture is set
162+ await Task . Run ( UpdatePluginMetadataTranslations ) ;
163+ }
164+
165+ private static Language GetLanguageByLanguageCode ( string languageCode )
166+ {
167+ var lowercase = languageCode . ToLower ( ) ;
168+ var language = AvailableLanguages . GetAvailableLanguages ( ) . FirstOrDefault ( o => o . LanguageCode . ToLower ( ) == lowercase ) ;
169+ if ( language == null )
170+ {
171+ Log . Error ( $ "|Internationalization.GetLanguageByLanguageCode|Language code can't be found <{ languageCode } >") ;
172+ return AvailableLanguages . English ;
173+ }
174+ else
148175 {
149- UpdatePluginMetadataTranslations ( ) ;
150- } ) ;
176+ return language ;
177+ }
151178 }
152179
153180 public bool PromptShouldUsePinyin ( string languageCodeToSet )
0 commit comments