@@ -67,9 +67,9 @@ private static string GetSystemLanguageCodeAtStartup()
67
67
return DefaultLanguageCode ;
68
68
}
69
69
70
- internal void AddPluginLanguageDirectories ( IEnumerable < PluginPair > plugins )
70
+ private void AddPluginLanguageDirectories ( )
71
71
{
72
- foreach ( var plugin in plugins )
72
+ foreach ( var plugin in PluginManager . GetPluginsForInterface < IPluginI18n > ( ) )
73
73
{
74
74
var location = Assembly . GetAssembly ( plugin . Plugin . GetType ( ) ) . Location ;
75
75
var dir = Path . GetDirectoryName ( location ) ;
@@ -96,6 +96,32 @@ private void LoadDefaultLanguage()
96
96
_oldResources . Clear ( ) ;
97
97
}
98
98
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>
99
125
public void ChangeLanguage ( string languageCode )
100
126
{
101
127
languageCode = languageCode . NonNull ( ) ;
@@ -110,7 +136,12 @@ public void ChangeLanguage(string languageCode)
110
136
111
137
// Get language by language code and change language
112
138
var language = GetLanguageByLanguageCode ( languageCode ) ;
113
- ChangeLanguage ( language , isSystem ) ;
139
+
140
+ // Change language
141
+ _ = ChangeLanguageAsync ( language ) ;
142
+
143
+ // Save settings
144
+ _settings . Language = isSystem ? Constant . SystemLanguageCode : language . LanguageCode ;
114
145
}
115
146
116
147
private Language GetLanguageByLanguageCode ( string languageCode )
@@ -128,26 +159,22 @@ private Language GetLanguageByLanguageCode(string languageCode)
128
159
}
129
160
}
130
161
131
- private void ChangeLanguage ( Language language , bool isSystem )
162
+ private async Task ChangeLanguageAsync ( Language language )
132
163
{
133
- language = language . NonNull ( ) ;
134
-
164
+ // Remove old language files and load language
135
165
RemoveOldLanguageFiles ( ) ;
136
166
if ( language != AvailableLanguages . English )
137
167
{
138
168
LoadLanguage ( language ) ;
139
169
}
170
+
140
171
// Culture of main thread
141
172
// Use CreateSpecificCulture to preserve possible user-override settings in Windows, if Flow's language culture is the same as Windows's
142
173
CultureInfo . CurrentCulture = CultureInfo . CreateSpecificCulture ( language . LanguageCode ) ;
143
174
CultureInfo . CurrentUICulture = CultureInfo . CurrentCulture ;
144
175
145
- // Raise event after culture is set
146
- _settings . Language = isSystem ? Constant . SystemLanguageCode : language . LanguageCode ;
147
- _ = Task . Run ( ( ) =>
148
- {
149
- UpdatePluginMetadataTranslations ( ) ;
150
- } ) ;
176
+ // Raise event for plugins after culture is set
177
+ await Task . Run ( UpdatePluginMetadataTranslations ) ;
151
178
}
152
179
153
180
public bool PromptShouldUsePinyin ( string languageCodeToSet )
0 commit comments