@@ -30,6 +30,7 @@ public class Internationalization
30
30
private readonly List < string > _languageDirectories = [ ] ;
31
31
private readonly List < ResourceDictionary > _oldResources = [ ] ;
32
32
private static string SystemLanguageCode ;
33
+ private readonly SemaphoreSlim _langChangeLock = new ( 1 , 1 ) ;
33
34
34
35
public Internationalization ( Settings settings )
35
36
{
@@ -185,20 +186,29 @@ private static Language GetLanguageByLanguageCode(string languageCode)
185
186
186
187
private async Task ChangeLanguageAsync ( Language language , bool updateMetadata = true )
187
188
{
188
- // Remove old language files and load language
189
- RemoveOldLanguageFiles ( ) ;
190
- if ( language != AvailableLanguages . English )
189
+ await _langChangeLock . WaitAsync ( ) ;
190
+
191
+ try
191
192
{
192
- LoadLanguage ( language ) ;
193
- }
193
+ // Remove old language files and load language
194
+ RemoveOldLanguageFiles ( ) ;
195
+ if ( language != AvailableLanguages . English )
196
+ {
197
+ LoadLanguage ( language ) ;
198
+ }
194
199
195
- // Change culture info
196
- ChangeCultureInfo ( language . LanguageCode ) ;
200
+ // Change culture info
201
+ ChangeCultureInfo ( language . LanguageCode ) ;
197
202
198
- if ( updateMetadata )
203
+ if ( updateMetadata )
204
+ {
205
+ // Raise event for plugins after culture is set
206
+ await Task . Run ( UpdatePluginMetadataTranslations ) ;
207
+ }
208
+ }
209
+ finally
199
210
{
200
- // Raise event for plugins after culture is set
201
- await Task . Run ( UpdatePluginMetadataTranslations ) ;
211
+ _langChangeLock . Release ( ) ;
202
212
}
203
213
}
204
214
0 commit comments