@@ -128,6 +128,9 @@ export class I18n {
128
128
// Stores messages for the currently active language
129
129
private activeMessages : object = reactive ( { } )
130
130
131
+ // Stores the abort controller for the load promises.
132
+ private abortController : AbortController ;
133
+
131
134
/**
132
135
* Creates a new instance of the I18n class, applying default options
133
136
*/
@@ -177,15 +180,28 @@ export class I18n {
177
180
/**
178
181
* Loads the language file.
179
182
*/
180
- async loadLanguageAsync ( lang : string , dashLangTry = false ) : Promise < string | void > {
183
+ loadLanguageAsync ( lang : string , dashLangTry = false , ignoreAbort = false ) : Promise < string | void > {
184
+ if ( ! ignoreAbort ) {
185
+ this . abortController ?. abort ( ) ;
186
+ this . abortController = new AbortController ( ) ;
187
+ }
188
+
181
189
const loadedLang : LanguageInterface = I18n . loaded . find ( ( row ) => row . lang === lang )
182
190
183
191
if ( loadedLang ) {
184
192
return Promise . resolve ( this . setLanguage ( loadedLang ) )
185
193
}
186
194
187
- const { default : messages } = await this . resolveLangAsync ( this . options . resolve , lang )
188
- return this . applyLanguage ( lang , messages , dashLangTry , this . loadLanguageAsync )
195
+ return new Promise ( ( resolve , reject ) => {
196
+ this . abortController . signal . addEventListener ( 'abort' , ( ) => {
197
+ resolve ( ) ;
198
+ } ) ;
199
+
200
+ this . resolveLangAsync ( this . options . resolve , lang ) . then ( ( { default : messages } ) => {
201
+ resolve ( this . applyLanguage ( lang , messages , dashLangTry , this . loadLanguageAsync ) ) ;
202
+ } ) ;
203
+ } ) ;
204
+
189
205
}
190
206
191
207
/**
@@ -253,12 +269,13 @@ export class I18n {
253
269
return callable . call (
254
270
this ,
255
271
lang . replace ( / [ - _ ] / g, ( char ) => ( char === '-' ? '_' : '-' ) ) ,
272
+ true ,
256
273
true
257
274
)
258
275
}
259
276
260
277
if ( lang !== this . options . fallbackLang ) {
261
- return callable . call ( this , this . options . fallbackLang )
278
+ return callable . call ( this , this . options . fallbackLang , false , true )
262
279
}
263
280
}
264
281
0 commit comments