@svelstack/translator 0.9.4 → 0.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +32 -4
  2. package/package.json +3 -2
package/dist/index.js CHANGED
@@ -310,11 +310,21 @@ var Translator = class {
310
310
  * @type {Record<string, Record<string, string>> | undefined}
311
311
  */
312
312
  translations = void 0;
313
+ /**
314
+ * @private
315
+ * @type {Record<string, Record<string, string>> | undefined}
316
+ */
317
+ fallbackTranslations = void 0;
313
318
  /**
314
319
  * @private
315
320
  * @type {Promise<any> | undefined}
316
321
  */
317
322
  _promise = void 0;
323
+ /**
324
+ * @private
325
+ * @type {Promise<any> | undefined}
326
+ */
327
+ _fallbackPromise = void 0;
318
328
  /**
319
329
  * @private
320
330
  * @type {string}
@@ -351,6 +361,9 @@ var Translator = class {
351
361
  ]);
352
362
  }
353
363
  this.load(this._language);
364
+ if (this._language !== this.options.fallbackLanguage) {
365
+ this.loadFallback();
366
+ }
354
367
  }
355
368
  /**
356
369
  * Changes the current language and reloads translations.
@@ -362,6 +375,7 @@ var Translator = class {
362
375
  if (this._language !== val) {
363
376
  await this.load(val);
364
377
  this._language = val;
378
+ this.changed();
365
379
  }
366
380
  }
367
381
  /**
@@ -376,7 +390,7 @@ var Translator = class {
376
390
  * @returns {Promise<void>} Resolves when loading is complete.
377
391
  */
378
392
  async wait() {
379
- await this._promise;
393
+ await Promise.all([this._promise, this._fallbackPromise]);
380
394
  }
381
395
  /**
382
396
  * Translates a key within a given domain using optional parameters.
@@ -386,11 +400,11 @@ var Translator = class {
386
400
  * @returns {string} The translated string, or a fallback if not found.
387
401
  */
388
402
  trans(domain, key, parameters) {
389
- var _a;
403
+ var _a, _b, _c;
390
404
  if (this.translations === void 0) {
391
405
  return "";
392
406
  }
393
- const translation = (_a = this.translations[domain]) == null ? void 0 : _a[key];
407
+ const translation = ((_a = this.translations[domain]) == null ? void 0 : _a[key]) ?? ((_c = (_b = this.fallbackTranslations) == null ? void 0 : _b[domain]) == null ? void 0 : _c[key]);
394
408
  if (translation === void 0) {
395
409
  return `${domain}.${key}`;
396
410
  }
@@ -420,7 +434,21 @@ var Translator = class {
420
434
  } else {
421
435
  this.translations = dictionary;
422
436
  }
423
- this.changed();
437
+ }
438
+ /**
439
+ * Loads fallback translations.
440
+ * @private
441
+ * @returns {Promise<void>} Resolves when the fallback translations are loaded.
442
+ */
443
+ async loadFallback() {
444
+ const fallbackDictionary = this.options.dictionaries[this.options.fallbackLanguage];
445
+ if (typeof fallbackDictionary === "function") {
446
+ const promise = this._fallbackPromise = fallbackDictionary();
447
+ this.fallbackTranslations = await promise;
448
+ this._fallbackPromise = void 0;
449
+ } else {
450
+ this.fallbackTranslations = fallbackDictionary;
451
+ }
424
452
  }
425
453
  /**
426
454
  * Determines the appropriate language to use.
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@svelstack/translator",
3
- "version": "0.9.4",
3
+ "version": "0.9.6",
4
4
  "scripts": {
5
5
  "build": "tsup && npm run prepack",
6
6
  "prepack": "publint",
7
7
  "check": "tsc --noEmit",
8
- "test": "vitest"
8
+ "test": "vitest run",
9
+ "test:watch": "vitest"
9
10
  },
10
11
  "type": "module",
11
12
  "main": "./dist/index.js",