@@ -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,44 +136,45 @@ 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 ) ;
114
- }
115
139
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 ;
129
145
}
130
146
131
- private void ChangeLanguage ( Language language , bool isSystem )
147
+ private async Task ChangeLanguageAsync ( Language language )
132
148
{
133
- language = language . NonNull ( ) ;
134
-
149
+ // Remove old language files and load language
135
150
RemoveOldLanguageFiles ( ) ;
136
151
if ( language != AvailableLanguages . English )
137
152
{
138
153
LoadLanguage ( language ) ;
139
154
}
155
+
140
156
// Culture of main thread
141
157
// Use CreateSpecificCulture to preserve possible user-override settings in Windows, if Flow's language culture is the same as Windows's
142
158
CultureInfo . CurrentCulture = CultureInfo . CreateSpecificCulture ( language . LanguageCode ) ;
143
159
CultureInfo . CurrentUICulture = CultureInfo . CurrentCulture ;
144
160
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
148
175
{
149
- UpdatePluginMetadataTranslations ( ) ;
150
- } ) ;
176
+ return language ;
177
+ }
151
178
}
152
179
153
180
public bool PromptShouldUsePinyin ( string languageCodeToSet )
0 commit comments