@vocab/core 1.4.0 → 1.5.0

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.
package/README.md CHANGED
@@ -506,6 +506,38 @@ Tags on keys in other languages will be ignored.
506
506
  [tags]: https://support.phrase.com/hc/en-us/articles/5822598372252-Tags-Strings-
507
507
  [configuration]: #Configuration
508
508
 
509
+ #### Global key
510
+
511
+ `vocab push` and `vocab pull` can support global keys mapping. When you want certain translations to use a specific/custom key in Phrase, add the `globalKey` to the structure.
512
+
513
+ ```jsonc
514
+ // translations.json
515
+ {
516
+ "Hello": {
517
+ "message": "Hello",
518
+ "globalKey": "hello"
519
+ },
520
+ "Goodbye": {
521
+ "message": "Goodbye",
522
+ "globalKey": "app.goodbye.label"
523
+ }
524
+ }
525
+ ```
526
+
527
+ In the above example,
528
+
529
+ - `vocab push` will push the `hello` and `app.goodbye.label` keys to Phrase.
530
+ - `vocab pull` will pull translations from Phrase and map them to the `hello` and `app.goodbye.label` keys.
531
+
532
+ ##### Error on no translation for global key
533
+
534
+ By default, `vocab pull` will not error if a translation is missing in Phrase for a translation with a global key.
535
+ If you want to throw an error in this situation, pass the `--error-on-no-global-key-translation` flag:
536
+
537
+ ```sh
538
+ vocab pull --error-on-no-global-key-translation
539
+ ```
540
+
509
541
  ## Troubleshooting
510
542
 
511
543
  ### Problem: Passed locale is being ignored or using en-US instead
@@ -99,6 +99,7 @@ export interface TranslationData {
99
99
  message: TranslationMessage;
100
100
  description?: string;
101
101
  tags?: Tags;
102
+ globalKey?: string;
102
103
  }
103
104
  export type TranslationsByKey<Key extends TranslationKey = string> = Record<Key, TranslationData>;
104
105
  export type TranslationFileContents = TranslationsByKey & {
@@ -433,6 +433,13 @@ async function loadAllTranslations({
433
433
  throw new Error(`Duplicate keys found. Key with namespace ${loadedTranslation.namespace} and key ${key} was found multiple times.`);
434
434
  }
435
435
  keys.add(uniqueKey);
436
+ const globalKey = loadedTranslation.languages[config.devLanguage][key].globalKey;
437
+ if (globalKey) {
438
+ if (keys.has(globalKey)) {
439
+ throw new Error(`Duplicate keys found. Key with global key ${globalKey} and key ${key} was found multiple times`);
440
+ }
441
+ keys.add(globalKey);
442
+ }
436
443
  }
437
444
  }
438
445
  return result;
@@ -433,6 +433,13 @@ async function loadAllTranslations({
433
433
  throw new Error(`Duplicate keys found. Key with namespace ${loadedTranslation.namespace} and key ${key} was found multiple times.`);
434
434
  }
435
435
  keys.add(uniqueKey);
436
+ const globalKey = loadedTranslation.languages[config.devLanguage][key].globalKey;
437
+ if (globalKey) {
438
+ if (keys.has(globalKey)) {
439
+ throw new Error(`Duplicate keys found. Key with global key ${globalKey} and key ${key} was found multiple times`);
440
+ }
441
+ keys.add(globalKey);
442
+ }
436
443
  }
437
444
  }
438
445
  return result;
@@ -417,6 +417,13 @@ async function loadAllTranslations({
417
417
  throw new Error(`Duplicate keys found. Key with namespace ${loadedTranslation.namespace} and key ${key} was found multiple times.`);
418
418
  }
419
419
  keys.add(uniqueKey);
420
+ const globalKey = loadedTranslation.languages[config.devLanguage][key].globalKey;
421
+ if (globalKey) {
422
+ if (keys.has(globalKey)) {
423
+ throw new Error(`Duplicate keys found. Key with global key ${globalKey} and key ${key} was found multiple times`);
424
+ }
425
+ keys.add(globalKey);
426
+ }
420
427
  }
421
428
  }
422
429
  return result;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vocab/core",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "main": "dist/vocab-core.cjs.js",
5
5
  "module": "dist/vocab-core.esm.js",
6
6
  "exports": {