@@ -30,6 +30,7 @@ public class Internationalization
3030 private readonly List < string > _languageDirectories = [ ] ;
3131 private readonly List < ResourceDictionary > _oldResources = [ ] ;
3232 private static string SystemLanguageCode ;
33+ private readonly SemaphoreSlim _langChangeLock = new ( 1 , 1 ) ;
3334
3435 public Internationalization ( Settings settings )
3536 {
@@ -185,20 +186,29 @@ private static Language GetLanguageByLanguageCode(string languageCode)
185186
186187 private async Task ChangeLanguageAsync ( Language language , bool updateMetadata = true )
187188 {
188- // Remove old language files and load language
189- RemoveOldLanguageFiles ( ) ;
190- if ( language != AvailableLanguages . English )
189+ await _langChangeLock . WaitAsync ( ) ;
190+
191+ try
191192 {
192- LoadLanguage ( language ) ;
193- }
193+ // Remove old language files and load language
194+ RemoveOldLanguageFiles ( ) ;
195+ if ( language != AvailableLanguages . English )
196+ {
197+ LoadLanguage ( language ) ;
198+ }
194199
195- // Change culture info
196- ChangeCultureInfo ( language . LanguageCode ) ;
200+ // Change culture info
201+ ChangeCultureInfo ( language . LanguageCode ) ;
197202
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
199210 {
200- // Raise event for plugins after culture is set
201- await Task . Run ( UpdatePluginMetadataTranslations ) ;
211+ _langChangeLock . Release ( ) ;
202212 }
203213 }
204214
0 commit comments