@o3r/transloco 0.0.0 → 14.4.0-rc.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/LICENSE +26 -0
- package/README.md +64 -0
- package/builders/helpers/localization-generator.d.ts +126 -0
- package/builders/helpers/localization-generator.d.ts.map +1 -0
- package/builders/helpers/localization-generator.js +303 -0
- package/builders/helpers/localization-generator.js.map +1 -0
- package/builders/i18n/index.d.ts +7 -0
- package/builders/i18n/index.d.ts.map +1 -0
- package/builders/i18n/index.js +39 -0
- package/builders/i18n/index.js.map +1 -0
- package/builders/i18n/schema.d.ts +30 -0
- package/builders/i18n/schema.d.ts.map +1 -0
- package/builders/i18n/schema.js +3 -0
- package/builders/i18n/schema.js.map +1 -0
- package/builders/i18n/schema.json +35 -0
- package/builders/localization/index.d.ts +23 -0
- package/builders/localization/index.d.ts.map +1 -0
- package/builders/localization/index.js +416 -0
- package/builders/localization/index.js.map +1 -0
- package/builders/localization/schema.d.ts +29 -0
- package/builders/localization/schema.d.ts.map +1 -0
- package/builders/localization/schema.js +3 -0
- package/builders/localization/schema.js.map +1 -0
- package/builders/localization/schema.json +78 -0
- package/builders/localization-extractor/index.d.ts +8 -0
- package/builders/localization-extractor/index.d.ts.map +1 -0
- package/builders/localization-extractor/index.js +181 -0
- package/builders/localization-extractor/index.js.map +1 -0
- package/builders/localization-extractor/schema.d.ts +25 -0
- package/builders/localization-extractor/schema.d.ts.map +1 -0
- package/builders/localization-extractor/schema.js +3 -0
- package/builders/localization-extractor/schema.js.map +1 -0
- package/builders/localization-extractor/schema.json +62 -0
- package/builders/localization-extractor/validations.d.ts +17 -0
- package/builders/localization-extractor/validations.d.ts.map +1 -0
- package/builders/localization-extractor/validations.js +54 -0
- package/builders/localization-extractor/validations.js.map +1 -0
- package/builders/metadata-check/helpers/index.d.ts +2 -0
- package/builders/metadata-check/helpers/index.d.ts.map +1 -0
- package/builders/metadata-check/helpers/index.js +5 -0
- package/builders/metadata-check/helpers/index.js.map +1 -0
- package/builders/metadata-check/helpers/localization-metadata-comparison-helper.d.ts +14 -0
- package/builders/metadata-check/helpers/localization-metadata-comparison-helper.d.ts.map +1 -0
- package/builders/metadata-check/helpers/localization-metadata-comparison-helper.js +34 -0
- package/builders/metadata-check/helpers/localization-metadata-comparison-helper.js.map +1 -0
- package/builders/metadata-check/index.d.ts +7 -0
- package/builders/metadata-check/index.d.ts.map +1 -0
- package/builders/metadata-check/index.js +12 -0
- package/builders/metadata-check/index.js.map +1 -0
- package/builders/metadata-check/schema.d.ts +5 -0
- package/builders/metadata-check/schema.d.ts.map +1 -0
- package/builders/metadata-check/schema.js +3 -0
- package/builders/metadata-check/schema.js.map +1 -0
- package/builders/metadata-check/schema.json +46 -0
- package/builders/package.json +3 -0
- package/builders.json +25 -0
- package/collection.json +29 -0
- package/fesm2022/o3r-transloco-rules-engine.mjs +57 -0
- package/fesm2022/o3r-transloco-rules-engine.mjs.map +1 -0
- package/fesm2022/o3r-transloco.mjs +1177 -0
- package/fesm2022/o3r-transloco.mjs.map +1 -0
- package/package.json +190 -2
- package/rules-engine/package.json +4 -0
- package/schemas/localization.metadata.schema.json +84 -0
- package/schemas/localization.schema.json +116 -0
- package/schemas/rules-engine.localization-action.schema.json +26 -0
- package/schematics/add-localization-key/index.d.ts +13 -0
- package/schematics/add-localization-key/index.d.ts.map +1 -0
- package/schematics/add-localization-key/index.js +227 -0
- package/schematics/add-localization-key/index.js.map +1 -0
- package/schematics/add-localization-key/schema.d.ts +20 -0
- package/schematics/add-localization-key/schema.d.ts.map +1 -0
- package/schematics/add-localization-key/schema.js +3 -0
- package/schematics/add-localization-key/schema.js.map +1 -0
- package/schematics/add-localization-key/schema.json +49 -0
- package/schematics/cms-adapter/index.d.ts +8 -0
- package/schematics/cms-adapter/index.d.ts.map +1 -0
- package/schematics/cms-adapter/index.js +81 -0
- package/schematics/cms-adapter/index.js.map +1 -0
- package/schematics/localization-base/index.d.ts +14 -0
- package/schematics/localization-base/index.d.ts.map +1 -0
- package/schematics/localization-base/index.js +359 -0
- package/schematics/localization-base/index.js.map +1 -0
- package/schematics/localization-base/templates/src/assets/locales/__empty__.gitkeep +0 -0
- package/schematics/localization-to-component/index.d.ts +13 -0
- package/schematics/localization-to-component/index.d.ts.map +1 -0
- package/schematics/localization-to-component/index.js +264 -0
- package/schematics/localization-to-component/index.js.map +1 -0
- package/schematics/localization-to-component/schema.d.ts +12 -0
- package/schematics/localization-to-component/schema.d.ts.map +1 -0
- package/schematics/localization-to-component/schema.js +3 -0
- package/schematics/localization-to-component/schema.js.map +1 -0
- package/schematics/localization-to-component/schema.json +31 -0
- package/schematics/localization-to-component/templates/__name__-localization.json +3 -0
- package/schematics/localization-to-component/templates/__name__-translation.ts.template +5 -0
- package/schematics/migration-localization-to-transloco/index.d.ts +8 -0
- package/schematics/migration-localization-to-transloco/index.d.ts.map +1 -0
- package/schematics/migration-localization-to-transloco/index.js +194 -0
- package/schematics/migration-localization-to-transloco/index.js.map +1 -0
- package/schematics/migration-localization-to-transloco/schema.d.ts +15 -0
- package/schematics/migration-localization-to-transloco/schema.d.ts.map +1 -0
- package/schematics/migration-localization-to-transloco/schema.js +3 -0
- package/schematics/migration-localization-to-transloco/schema.js.map +1 -0
- package/schematics/migration-localization-to-transloco/schema.json +30 -0
- package/schematics/ng-add/helpers/devtools-registration.d.ts +8 -0
- package/schematics/ng-add/helpers/devtools-registration.d.ts.map +1 -0
- package/schematics/ng-add/helpers/devtools-registration.js +37 -0
- package/schematics/ng-add/helpers/devtools-registration.js.map +1 -0
- package/schematics/ng-add/index.d.ts +8 -0
- package/schematics/ng-add/index.d.ts.map +1 -0
- package/schematics/ng-add/index.js +62 -0
- package/schematics/ng-add/index.js.map +1 -0
- package/schematics/ng-add/schema.d.ts +11 -0
- package/schematics/ng-add/schema.d.ts.map +1 -0
- package/schematics/ng-add/schema.js +3 -0
- package/schematics/ng-add/schema.js.map +1 -0
- package/schematics/ng-add/schema.json +38 -0
- package/schematics/package.json +3 -0
- package/types/o3r-transloco-rules-engine.d.ts +40 -0
- package/types/o3r-transloco-rules-engine.d.ts.map +1 -0
- package/types/o3r-transloco.d.ts +804 -0
- package/types/o3r-transloco.d.ts.map +1 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
Copyright Amadeus SAS
|
|
2
|
+
|
|
3
|
+
Redistribution and use in source and binary forms, with or without modification,
|
|
4
|
+
are permitted provided that the following conditions are met:
|
|
5
|
+
|
|
6
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
7
|
+
list of conditions and the following disclaimer.
|
|
8
|
+
|
|
9
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
10
|
+
this list of conditions and the following disclaimer in the documentation and/or
|
|
11
|
+
other materials provided with the distribution.
|
|
12
|
+
|
|
13
|
+
3. Neither the name of the copyright holder nor the names of its contributors
|
|
14
|
+
may be used to endorse or promote products derived from this software without
|
|
15
|
+
specific prior written permission.
|
|
16
|
+
|
|
17
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
18
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
19
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
20
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
21
|
+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
22
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
23
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
24
|
+
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
25
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
26
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
package/README.md
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<h1 align="center">Otter Transloco</h1>
|
|
2
|
+
<p align="center">
|
|
3
|
+
<img src="https://raw.githubusercontent.com/AmadeusITGroup/otter/main/assets/logo/otter.png" alt="Super cute Otter!" width="40%"/>
|
|
4
|
+
</p>
|
|
5
|
+
|
|
6
|
+
> [!WARNING]
|
|
7
|
+
> [Experimental](https://github.com/AmadeusITGroup/otter/blob/main/README.md#experimental)
|
|
8
|
+
> This package is the successor to `@o3r/localization` (which is based on ngx-translate).
|
|
9
|
+
> In Otter v16, this package will be renamed to `@o3r/localization`, and ngx-translate will no longer be supported.
|
|
10
|
+
|
|
11
|
+
This package is an [Otter Framework Module](https://github.com/AmadeusITGroup/otter/tree/main/docs/core/MODULE.md).
|
|
12
|
+
<br />
|
|
13
|
+
<br />
|
|
14
|
+
|
|
15
|
+
## Description
|
|
16
|
+
|
|
17
|
+
[](https://www.npmjs.com/package/@o3r/transloco)
|
|
18
|
+
[](https://www.npmjs.com/package/@o3r/transloco)
|
|
19
|
+
|
|
20
|
+
This localization module is built on top of [JSVerse Transloco](https://github.com/jsverse/transloco).
|
|
21
|
+
It provides the same features as `@o3r/localization` (which is based on ngx-translate):
|
|
22
|
+
|
|
23
|
+
* Multiple [locales](https://github.com/angular/angular/tree/master/packages/common/locales) support, switchable at runtime.
|
|
24
|
+
* RTL (right-to-left) text direction support
|
|
25
|
+
* Translations loader using a specific endpoint or defaulting to local translation bundles
|
|
26
|
+
* Fallback language and intelligent fallback support
|
|
27
|
+
* Translation of resource keys from templates (`*.html`) and from typescript (`*.ts`)
|
|
28
|
+
* Support for resource keys with parameters
|
|
29
|
+
* Custom `LocalizationConfiguration`
|
|
30
|
+
* Ability to toggle translations on and off for debugging (and additional debug tools)
|
|
31
|
+
|
|
32
|
+
## How to install
|
|
33
|
+
|
|
34
|
+
```shell
|
|
35
|
+
ng add @o3r/transloco
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
> [!WARNING]
|
|
39
|
+
> This module requires [@o3r/core](https://www.npmjs.com/package/@o3r/core) to be installed.
|
|
40
|
+
|
|
41
|
+
## Generators
|
|
42
|
+
|
|
43
|
+
Otter framework provides a set of code generators based on [Angular schematics](https://angular.io/guide/schematics).
|
|
44
|
+
|
|
45
|
+
| Schematics | Description | How to use |
|
|
46
|
+
|-------------------------------------|---------------------------------------------------------|--------------------------------------------|
|
|
47
|
+
| add | Include Otter transloco module in a library/application | `ng add @o3r/transloco` |
|
|
48
|
+
| localization-to-component | Add localization architecture to an Otter component | `ng g localization-to-component` |
|
|
49
|
+
| localization-key-to-component | Add a localization key to an Otter component | `ng g localization-key-to-component` |
|
|
50
|
+
| migration-localization-to-transloco | Migrate from @o3r/localization to @o3r/transloco | `ng g migration-localization-to-transloco` |
|
|
51
|
+
|
|
52
|
+
## Migrating from @o3r/localization
|
|
53
|
+
|
|
54
|
+
If you're upgrading from `@o3r/localization` (ngx-translate), use the migration schematic:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
ng g @o3r/transloco:migration-localization-to-transloco
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
For detailed migration instructions, including manual steps required after running the schematic, see the [Migration Guide](../../../docs/transloco/localization-to-transloco.md).
|
|
61
|
+
|
|
62
|
+
## More details
|
|
63
|
+
|
|
64
|
+
Find more information in the [documentation](https://github.com/AmadeusITGroup/otter/blob/main/docs/transloco/TRANSLOCO.md).
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { logging } from '@angular-devkit/core';
|
|
2
|
+
import type { LocalizationExtractorBuilderSchema } from '../localization-extractor/schema';
|
|
3
|
+
import type { JSONLocalization, LocalizationMetadata } from '@o3r/transloco';
|
|
4
|
+
/** Map of Localization Metadata base on localization key */
|
|
5
|
+
export interface LocalizationMetadataAsMap {
|
|
6
|
+
[key: string]: JSONLocalization;
|
|
7
|
+
}
|
|
8
|
+
/** Localization structure */
|
|
9
|
+
export interface LocalizationJsonValue {
|
|
10
|
+
/** Localization Description */
|
|
11
|
+
description: string;
|
|
12
|
+
/** Determine if the item can have multiple extensions */
|
|
13
|
+
dictionary?: boolean;
|
|
14
|
+
/** Determine if the value has to be overridden */
|
|
15
|
+
referenceData?: boolean;
|
|
16
|
+
/** Localization default value */
|
|
17
|
+
defaultValue?: string;
|
|
18
|
+
/** Tags used for filtering/categorizing */
|
|
19
|
+
tags?: string[];
|
|
20
|
+
/** Reference to other localization */
|
|
21
|
+
$ref?: string;
|
|
22
|
+
}
|
|
23
|
+
/** Localization file structure */
|
|
24
|
+
export interface LocalizationJsonFile {
|
|
25
|
+
[key: string]: LocalizationJsonValue;
|
|
26
|
+
}
|
|
27
|
+
/** Localization file mapping */
|
|
28
|
+
export interface LocalizationFileMap {
|
|
29
|
+
[file: string]: {
|
|
30
|
+
data: LocalizationJsonFile;
|
|
31
|
+
isDependency: boolean;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/** Metadata file mapping */
|
|
35
|
+
export interface LibraryMetadataMap {
|
|
36
|
+
[libraryMetadataFile: string]: LocalizationMetadata;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Localization extractor
|
|
40
|
+
*/
|
|
41
|
+
export declare class LocalizationExtractor {
|
|
42
|
+
private readonly options?;
|
|
43
|
+
/** TsConfig of the file to base on */
|
|
44
|
+
private readonly tsconfigPath;
|
|
45
|
+
private readonly logger;
|
|
46
|
+
constructor(tsconfigPath: string, logger: logging.LoggerApi, options?: Partial<LocalizationExtractorBuilderSchema> | undefined);
|
|
47
|
+
/** Get the list of file from tsconfig.json */
|
|
48
|
+
private getFilesFromTsConfig;
|
|
49
|
+
/**
|
|
50
|
+
* Return the class node if the class is an angular element
|
|
51
|
+
* @param source Ts file source
|
|
52
|
+
*/
|
|
53
|
+
private getAngularClassNode;
|
|
54
|
+
/**
|
|
55
|
+
* Get the list of referenced translation files
|
|
56
|
+
* @param localizationFileContent JSON content of a location file
|
|
57
|
+
* @param localizationFilePath Path of the localization file
|
|
58
|
+
*/
|
|
59
|
+
private getReferencedFiles;
|
|
60
|
+
/**
|
|
61
|
+
* Read a localization file
|
|
62
|
+
* @param locFile Path to the localization file
|
|
63
|
+
*/
|
|
64
|
+
private readLocalizationFile;
|
|
65
|
+
/**
|
|
66
|
+
* Read a metadata file
|
|
67
|
+
* @param metadataFile Path to the metadata file
|
|
68
|
+
*/
|
|
69
|
+
private readMetadataFile;
|
|
70
|
+
/**
|
|
71
|
+
* Generate a metadata item from a localization item
|
|
72
|
+
* @param loc Localization item
|
|
73
|
+
* @param key Key of the localization
|
|
74
|
+
*/
|
|
75
|
+
private generateMetadataItemFromLocalization;
|
|
76
|
+
/**
|
|
77
|
+
* Compares two JSONLocalization object by their keys and returns the result of the string comparison
|
|
78
|
+
* @param a JSONLocalization
|
|
79
|
+
* @param b JSONLocalization
|
|
80
|
+
*/
|
|
81
|
+
private compareKeys;
|
|
82
|
+
/** Get the list of patterns from tsconfig.json */
|
|
83
|
+
getPatternsFromTsConfig(): {
|
|
84
|
+
include: string[];
|
|
85
|
+
exclude: string[];
|
|
86
|
+
cwd: string;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Generate the localization mapping for a list of files
|
|
90
|
+
* @param localizationFiles Localization files to load
|
|
91
|
+
* @param alreadyLoadedFiles List of localization files already loadded
|
|
92
|
+
* @param isDependency Determine if the list of files are dependencies of others
|
|
93
|
+
*/
|
|
94
|
+
getLocalizationMap(localizationFiles: string[], alreadyLoadedFiles?: string[], isDependency?: boolean): Promise<LocalizationFileMap>;
|
|
95
|
+
/**
|
|
96
|
+
* Extract the localization mapping from a tsconfig file
|
|
97
|
+
* @param extraLocalizationFiles Additional translations to add
|
|
98
|
+
*/
|
|
99
|
+
extractLocalizationFromTsConfig(extraLocalizationFiles?: string[]): Promise<LocalizationFileMap>;
|
|
100
|
+
/**
|
|
101
|
+
* Retrieve metadata from libraries
|
|
102
|
+
* @param libraries Libraries on which the project depend
|
|
103
|
+
*/
|
|
104
|
+
getMetadataFromLibraries(libraries: string[]): Promise<LibraryMetadataMap>;
|
|
105
|
+
/**
|
|
106
|
+
* Retrieve metadata from metadata files
|
|
107
|
+
* @param metadataFiles Metadata files
|
|
108
|
+
*/
|
|
109
|
+
getMetadataFromFiles(metadataFiles: string[]): Promise<LibraryMetadataMap>;
|
|
110
|
+
/**
|
|
111
|
+
* Generate metadata from localization and library metadata mappings
|
|
112
|
+
* @param localizationMap Map of localization files
|
|
113
|
+
* @param options Option of generation
|
|
114
|
+
* @param options.ignoreDuplicateKeys
|
|
115
|
+
* @param options.libraryMetadata
|
|
116
|
+
* @param options.outputFile
|
|
117
|
+
* @param options.sortKeys
|
|
118
|
+
*/
|
|
119
|
+
generateMetadata(localizationMap: LocalizationFileMap, options: {
|
|
120
|
+
ignoreDuplicateKeys: boolean;
|
|
121
|
+
libraryMetadata: LibraryMetadataMap;
|
|
122
|
+
outputFile: string;
|
|
123
|
+
sortKeys: boolean;
|
|
124
|
+
}): LocalizationMetadata;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=localization-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localization-generator.d.ts","sourceRoot":"","sources":["../../../builders/helpers/localization-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,EACR,MAAM,sBAAsB,CAAC;AAY9B,OAAO,KAAK,EACV,kCAAkC,EACnC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AAQxB,4DAA4D;AAC5D,MAAM,WAAW,yBAAyB;IACxC,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAAC;CACjC;AAED,6BAA6B;AAC7B,MAAM,WAAW,qBAAqB;IACpC,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kDAAkD;IAClD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,kCAAkC;AAClC,MAAM,WAAW,oBAAoB;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CAAC;CACtC;AAMD,gCAAgC;AAChC,MAAM,WAAW,mBAAmB;IAClC,CAAC,IAAI,EAAE,MAAM,GAAG;QACd,IAAI,EAAE,oBAAoB,CAAC;QAC3B,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;CACH;AAED,4BAA4B;AAC5B,MAAM,WAAW,kBAAkB;IACjC,CAAC,mBAAmB,EAAE,MAAM,GAAG,oBAAoB,CAAC;CACrD;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAM6B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IALtF,sCAAsC;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;gBAE/B,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,EAAmB,OAAO,CAAC,EAAE,OAAO,CAAC,kCAAkC,CAAC,YAAA;IAKnI,8CAA8C;IAC9C,OAAO,CAAC,oBAAoB;IAK5B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;;OAGG;YACW,oBAAoB;IAQlC;;;OAGG;YACW,gBAAgB;IAI9B;;;;OAIG;IACH,OAAO,CAAC,oCAAoC;IA6B5C;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAYnB,kDAAkD;IAC3C,uBAAuB;;;;;IAiB9B;;;;;OAKG;IACU,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,EAAE,EAAE,kBAAkB,GAAE,MAAM,EAAO,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA2BnJ;;;OAGG;IACU,+BAA+B,CAAC,sBAAsB,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgCjH;;;OAGG;IACU,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE;IAQzD;;;OAGG;IACU,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE;IASzD;;;;;;;;OAQG;IACI,gBAAgB,CAAC,eAAe,EAAE,mBAAmB,EAAE,OAAO,EAAE;QACrE,mBAAmB,EAAE,OAAO,CAAC;QAC7B,eAAe,EAAE,kBAAkB,CAAC;QACpC,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,OAAO,CAAC;KACnB,GAAG,oBAAoB;CA4DzB"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LocalizationExtractor = void 0;
|
|
4
|
+
const fs = require("node:fs");
|
|
5
|
+
const path = require("node:path");
|
|
6
|
+
const extractors_1 = require("@o3r/extractors");
|
|
7
|
+
const schematics_1 = require("@o3r/schematics");
|
|
8
|
+
const globby_1 = require("globby");
|
|
9
|
+
const ts = require("typescript");
|
|
10
|
+
/** List of Angular decorator to look for */
|
|
11
|
+
const ANGULAR_ANNOTATION = ['Component', 'Injectable', 'Pipe'];
|
|
12
|
+
/** Regular expression to match Angular decorators */
|
|
13
|
+
const ANGULAR_DECORATOR_REGEXP = new RegExp('^@' + ANGULAR_ANNOTATION.map((e) => `(${e})`).join('|'));
|
|
14
|
+
/**
|
|
15
|
+
* Localization extractor
|
|
16
|
+
*/
|
|
17
|
+
class LocalizationExtractor {
|
|
18
|
+
constructor(tsconfigPath, logger, options) {
|
|
19
|
+
this.options = options;
|
|
20
|
+
this.tsconfigPath = tsconfigPath;
|
|
21
|
+
this.logger = logger;
|
|
22
|
+
}
|
|
23
|
+
/** Get the list of file from tsconfig.json */
|
|
24
|
+
getFilesFromTsConfig() {
|
|
25
|
+
const { include, exclude, cwd } = this.getPatternsFromTsConfig();
|
|
26
|
+
return (0, globby_1.sync)(include, { ignore: exclude, cwd });
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Return the class node if the class is an angular element
|
|
30
|
+
* @param source Ts file source
|
|
31
|
+
*/
|
|
32
|
+
getAngularClassNode(source) {
|
|
33
|
+
const angularItems = [];
|
|
34
|
+
source.forEachChild((item) => {
|
|
35
|
+
if (!ts.isClassDeclaration(item)) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
let isAngularItem = false;
|
|
39
|
+
item.forEachChild((classItem) => {
|
|
40
|
+
if (isAngularItem || !ts.isDecorator(classItem)) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const text = classItem.getText(source);
|
|
44
|
+
if (!ANGULAR_DECORATOR_REGEXP.test(text)) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
isAngularItem = true;
|
|
48
|
+
});
|
|
49
|
+
if (isAngularItem) {
|
|
50
|
+
angularItems.push(item);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
return angularItems.length > 0 ? angularItems : undefined;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get the list of referenced translation files
|
|
57
|
+
* @param localizationFileContent JSON content of a location file
|
|
58
|
+
* @param localizationFilePath Path of the localization file
|
|
59
|
+
*/
|
|
60
|
+
getReferencedFiles(localizationFileContent, localizationFilePath) {
|
|
61
|
+
const folder = localizationFilePath ? path.dirname(localizationFilePath) : undefined;
|
|
62
|
+
const referencedFiles = Object.keys(localizationFileContent)
|
|
63
|
+
.filter((key) => !!localizationFileContent[key].$ref)
|
|
64
|
+
.map((key) => ({ key, ref: localizationFileContent[key].$ref.split('#/')[0] }))
|
|
65
|
+
.filter(({ key, ref }) => {
|
|
66
|
+
const res = !!ref;
|
|
67
|
+
if (!res) {
|
|
68
|
+
this.logger.error(`The reference (${ref}) of the key ${key} is invalid, it will be ignored`);
|
|
69
|
+
}
|
|
70
|
+
return res;
|
|
71
|
+
})
|
|
72
|
+
.map(({ ref }) => {
|
|
73
|
+
if (!ref.startsWith('.')) {
|
|
74
|
+
if (this.options?.libraries?.length && this.options.libraries.every((lib) => !ref.startsWith(lib))) {
|
|
75
|
+
try {
|
|
76
|
+
return require.resolve(ref);
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
this.logger.debug(`Could not resolve reference ${ref}, treating as local file: ${err}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
return folder ? path.resolve(folder, ref) : ref;
|
|
85
|
+
})
|
|
86
|
+
.filter((ref) => !!ref);
|
|
87
|
+
return referencedFiles.length > 0 ? referencedFiles : undefined;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Read a localization file
|
|
91
|
+
* @param locFile Path to the localization file
|
|
92
|
+
*/
|
|
93
|
+
async readLocalizationFile(locFile) {
|
|
94
|
+
const content = JSON.parse(await fs.promises.readFile(locFile, { encoding: 'utf8' }));
|
|
95
|
+
if (content.$schema) {
|
|
96
|
+
delete content.$schema;
|
|
97
|
+
}
|
|
98
|
+
return content;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Read a metadata file
|
|
102
|
+
* @param metadataFile Path to the metadata file
|
|
103
|
+
*/
|
|
104
|
+
async readMetadataFile(metadataFile) {
|
|
105
|
+
return JSON.parse(await fs.promises.readFile(metadataFile, { encoding: 'utf8' }));
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Generate a metadata item from a localization item
|
|
109
|
+
* @param loc Localization item
|
|
110
|
+
* @param key Key of the localization
|
|
111
|
+
*/
|
|
112
|
+
generateMetadataItemFromLocalization(loc, key) {
|
|
113
|
+
const res = {
|
|
114
|
+
description: loc.description,
|
|
115
|
+
dictionary: !!loc.dictionary,
|
|
116
|
+
referenceData: !!loc.referenceData,
|
|
117
|
+
key
|
|
118
|
+
};
|
|
119
|
+
if (loc.defaultValue || loc.defaultValue === '') {
|
|
120
|
+
res.value = loc.defaultValue;
|
|
121
|
+
}
|
|
122
|
+
if (loc.tags) {
|
|
123
|
+
res.tags = loc.tags;
|
|
124
|
+
}
|
|
125
|
+
if (loc.$ref) {
|
|
126
|
+
const [refPath, refKey] = loc.$ref.split('#/', 2);
|
|
127
|
+
res.ref = refPath.startsWith('.') || this.options?.libraries?.some((lib) => refPath.startsWith(lib)) ? refKey : loc.$ref;
|
|
128
|
+
}
|
|
129
|
+
if (typeof loc.defaultValue === 'undefined' && typeof loc.$ref === 'undefined' && !loc.dictionary) {
|
|
130
|
+
this.logger.error(`${key} has no default value or $ref defined`);
|
|
131
|
+
throw new schematics_1.O3rCliError(`${key} has no default value or $ref defined`);
|
|
132
|
+
}
|
|
133
|
+
return res;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Compares two JSONLocalization object by their keys and returns the result of the string comparison
|
|
137
|
+
* @param a JSONLocalization
|
|
138
|
+
* @param b JSONLocalization
|
|
139
|
+
*/
|
|
140
|
+
compareKeys(a, b) {
|
|
141
|
+
const keyA = a.key.toUpperCase();
|
|
142
|
+
const keyB = b.key.toUpperCase();
|
|
143
|
+
if (keyA < keyB) {
|
|
144
|
+
return -1;
|
|
145
|
+
}
|
|
146
|
+
if (keyA > keyB) {
|
|
147
|
+
return 1;
|
|
148
|
+
}
|
|
149
|
+
return 0;
|
|
150
|
+
}
|
|
151
|
+
/** Get the list of patterns from tsconfig.json */
|
|
152
|
+
getPatternsFromTsConfig() {
|
|
153
|
+
const tsconfigResult = ts.readConfigFile(this.tsconfigPath, (p) => ts.sys.readFile(p));
|
|
154
|
+
if (tsconfigResult.error) {
|
|
155
|
+
const stringError = typeof tsconfigResult.error.messageText === 'string'
|
|
156
|
+
? tsconfigResult.error.messageText
|
|
157
|
+
: tsconfigResult.error.messageText.messageText;
|
|
158
|
+
this.logger.error(stringError);
|
|
159
|
+
throw new schematics_1.O3rCliError(stringError);
|
|
160
|
+
}
|
|
161
|
+
const include = [...(tsconfigResult.config.files || []), ...(tsconfigResult.config.include || [])];
|
|
162
|
+
const exclude = tsconfigResult.config.exclude || [];
|
|
163
|
+
const cwd = path.resolve(path.dirname(this.tsconfigPath), tsconfigResult.config.rootDir || '.');
|
|
164
|
+
return { include, exclude, cwd };
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Generate the localization mapping for a list of files
|
|
168
|
+
* @param localizationFiles Localization files to load
|
|
169
|
+
* @param alreadyLoadedFiles List of localization files already loadded
|
|
170
|
+
* @param isDependency Determine if the list of files are dependencies of others
|
|
171
|
+
*/
|
|
172
|
+
async getLocalizationMap(localizationFiles, alreadyLoadedFiles = [], isDependency = false) {
|
|
173
|
+
const mapLocalization = {};
|
|
174
|
+
for (const file of localizationFiles) {
|
|
175
|
+
mapLocalization[file] = {
|
|
176
|
+
data: await this.readLocalizationFile(file),
|
|
177
|
+
isDependency
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
const references = localizationFiles
|
|
181
|
+
.map((file) => this.getReferencedFiles(mapLocalization[file].data, file))
|
|
182
|
+
.filter((refs) => !!refs)
|
|
183
|
+
.reduce((acc, refs) => {
|
|
184
|
+
acc.push(...refs.filter((ref) => !localizationFiles.includes(ref) && !alreadyLoadedFiles.includes(ref)));
|
|
185
|
+
return acc;
|
|
186
|
+
}, []);
|
|
187
|
+
if (references.length > 0) {
|
|
188
|
+
return {
|
|
189
|
+
...mapLocalization,
|
|
190
|
+
...await this.getLocalizationMap(references, [...localizationFiles, ...alreadyLoadedFiles], true)
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
return mapLocalization;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Extract the localization mapping from a tsconfig file
|
|
197
|
+
* @param extraLocalizationFiles Additional translations to add
|
|
198
|
+
*/
|
|
199
|
+
async extractLocalizationFromTsConfig(extraLocalizationFiles = []) {
|
|
200
|
+
const files = this.getFilesFromTsConfig();
|
|
201
|
+
const tsFiles = files
|
|
202
|
+
.filter((file) => /\.ts$/.test(file))
|
|
203
|
+
.map((file) => path.join(path.dirname(this.tsconfigPath), file));
|
|
204
|
+
const program = ts.createProgram(tsFiles, {});
|
|
205
|
+
const localizationFiles = tsFiles
|
|
206
|
+
.map((file) => ({ file, source: program.getSourceFile(file) }))
|
|
207
|
+
.map(({ file, source }) => ({ file, classes: source && this.getAngularClassNode(source), source }))
|
|
208
|
+
.filter(({ classes }) => !!classes)
|
|
209
|
+
.map(({ file, classes }) => classes
|
|
210
|
+
.map((classItem) => (0, extractors_1.getLocalizationFileFromAngularElement)(classItem))
|
|
211
|
+
.filter((locFiles) => !!locFiles)
|
|
212
|
+
.reduce((acc, locFiles) => {
|
|
213
|
+
acc.push(...locFiles.filter((f) => !acc.includes(f)));
|
|
214
|
+
return acc;
|
|
215
|
+
}, [])
|
|
216
|
+
.map((locFile) => path.resolve(path.dirname(file), locFile)))
|
|
217
|
+
.reduce((acc, locFiles) => {
|
|
218
|
+
acc.push(...locFiles.filter((f) => !acc.includes(f)));
|
|
219
|
+
return acc;
|
|
220
|
+
}, []);
|
|
221
|
+
localizationFiles.push(...extraLocalizationFiles.filter((file) => !localizationFiles.includes(file)));
|
|
222
|
+
this.logger.debug(`Found ${localizationFiles.length} localization file(s) to process`);
|
|
223
|
+
return this.getLocalizationMap(localizationFiles);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Retrieve metadata from libraries
|
|
227
|
+
* @param libraries Libraries on which the project depend
|
|
228
|
+
*/
|
|
229
|
+
async getMetadataFromLibraries(libraries) {
|
|
230
|
+
const metadataFiles = libraries
|
|
231
|
+
.map((lib) => (0, extractors_1.getLibraryCmsMetadata)(lib).localizationFilePath)
|
|
232
|
+
.filter((localizationFilePath) => !!localizationFilePath);
|
|
233
|
+
return this.getMetadataFromFiles(metadataFiles);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Retrieve metadata from metadata files
|
|
237
|
+
* @param metadataFiles Metadata files
|
|
238
|
+
*/
|
|
239
|
+
async getMetadataFromFiles(metadataFiles) {
|
|
240
|
+
const metadataMap = {};
|
|
241
|
+
for (const file of metadataFiles) {
|
|
242
|
+
metadataMap[file] = await this.readMetadataFile(file);
|
|
243
|
+
}
|
|
244
|
+
return metadataMap;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Generate metadata from localization and library metadata mappings
|
|
248
|
+
* @param localizationMap Map of localization files
|
|
249
|
+
* @param options Option of generation
|
|
250
|
+
* @param options.ignoreDuplicateKeys
|
|
251
|
+
* @param options.libraryMetadata
|
|
252
|
+
* @param options.outputFile
|
|
253
|
+
* @param options.sortKeys
|
|
254
|
+
*/
|
|
255
|
+
generateMetadata(localizationMap, options) {
|
|
256
|
+
const metadata = {};
|
|
257
|
+
let hasDuplicateKey = false;
|
|
258
|
+
const addMetadata = (data, origin, libraries = []) => {
|
|
259
|
+
if (metadata[data.key]) {
|
|
260
|
+
hasDuplicateKey = true;
|
|
261
|
+
if (options.ignoreDuplicateKeys) {
|
|
262
|
+
this.logger.warn(`The key ${data.key} from ${origin} will override the previous value (${metadata[data.key].value || 'ref ' + metadata[data.key].ref} -> ${data.value || 'ref ' + data.ref})`);
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
this.logger.error(`The key ${data.key} from ${origin} try to override the previous value (${metadata[data.key].value || 'ref ' + metadata[data.key].ref} -> ${data.value || 'ref ' + data.ref})`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
metadata[data.key] = data.ref && data.ref.includes('#/') && libraries.some((lib) => data.ref.startsWith(lib))
|
|
269
|
+
? {
|
|
270
|
+
...data,
|
|
271
|
+
ref: data.ref.split('#/')[1]
|
|
272
|
+
}
|
|
273
|
+
: data;
|
|
274
|
+
};
|
|
275
|
+
Object.keys(options.libraryMetadata)
|
|
276
|
+
.forEach((lib) => options.libraryMetadata[lib].forEach((dataLoc) => addMetadata(dataLoc, lib, this.options?.libraries)));
|
|
277
|
+
Object.keys(localizationMap)
|
|
278
|
+
.forEach((locFile) => Object.keys(localizationMap[locFile].data)
|
|
279
|
+
.forEach((locKey) => addMetadata(this.generateMetadataItemFromLocalization(localizationMap[locFile].data[locKey], locKey), locFile)));
|
|
280
|
+
if (hasDuplicateKey && !options.ignoreDuplicateKeys) {
|
|
281
|
+
throw new schematics_1.O3rCliError('Duplicate key');
|
|
282
|
+
}
|
|
283
|
+
const localizationMetadata = Object.values(metadata);
|
|
284
|
+
let hasUnknownRef = false;
|
|
285
|
+
localizationMetadata.forEach((data) => {
|
|
286
|
+
if (data.ref && !data.ref.includes('#/')) {
|
|
287
|
+
if (!metadata[data.ref]) {
|
|
288
|
+
hasUnknownRef = true;
|
|
289
|
+
this.logger.error(`The key ${data.ref} is unknown but referenced by ${data.key}.`);
|
|
290
|
+
}
|
|
291
|
+
else if (typeof data.description === 'undefined') {
|
|
292
|
+
data.description = metadata[data.ref].description;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
if (hasUnknownRef) {
|
|
297
|
+
throw new schematics_1.O3rCliError('Unknown referenced key');
|
|
298
|
+
}
|
|
299
|
+
return options.sortKeys ? localizationMetadata.toSorted((a, b) => this.compareKeys(a, b)) : localizationMetadata;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
exports.LocalizationExtractor = LocalizationExtractor;
|
|
303
|
+
//# sourceMappingURL=localization-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localization-generator.js","sourceRoot":"","sources":["../../../builders/helpers/localization-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { I18nBuilderSchema } from './schema';
|
|
2
|
+
/**
|
|
3
|
+
* Builder to generate i18n files from localization JSON files
|
|
4
|
+
*/
|
|
5
|
+
declare const _default: import("@angular-devkit/architect").Builder<I18nBuilderSchema & import("@angular-devkit/core").JsonObject>;
|
|
6
|
+
export default _default;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../builders/i18n/index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB;;GAEG;;AACH,wBAsCI"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const fs = require("node:fs");
|
|
4
|
+
const path = require("node:path");
|
|
5
|
+
const architect_1 = require("@angular-devkit/architect");
|
|
6
|
+
const extractors_1 = require("@o3r/extractors");
|
|
7
|
+
const globby_1 = require("globby");
|
|
8
|
+
/**
|
|
9
|
+
* Builder to generate i18n files from localization JSON files
|
|
10
|
+
*/
|
|
11
|
+
exports.default = (0, architect_1.createBuilder)((0, extractors_1.createBuilderWithMetricsIfInstalled)((options, context) => {
|
|
12
|
+
const posixWorkspaceRoot = context.workspaceRoot.split(path.sep).join(path.posix.sep);
|
|
13
|
+
options.localizationConfigs.forEach((config) => {
|
|
14
|
+
const fileNames = (0, globby_1.sync)(config.localizationFiles.map((files) => path.posix.join(posixWorkspaceRoot, files)));
|
|
15
|
+
fileNames.forEach((filePath) => {
|
|
16
|
+
const localizationJson = JSON.parse(fs.readFileSync(filePath, { encoding: 'utf8' }));
|
|
17
|
+
const newContent = JSON.stringify(Object.entries(localizationJson)
|
|
18
|
+
.filter(([, value]) => !value.dictionary && !value.$ref && value.defaultValue !== undefined)
|
|
19
|
+
.toSorted((a, b) => a[0] < b[0] ? -1 : 1)
|
|
20
|
+
.reduce((acc, [key, { defaultValue }]) => {
|
|
21
|
+
acc[key] = defaultValue;
|
|
22
|
+
return acc;
|
|
23
|
+
}, {}), null, 2);
|
|
24
|
+
const dir = path.dirname(filePath);
|
|
25
|
+
const i18nPath = path.join(dir, config.i18nFolderPath);
|
|
26
|
+
if (!fs.existsSync(i18nPath)) {
|
|
27
|
+
fs.mkdirSync(i18nPath, {
|
|
28
|
+
recursive: true
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const defaultLanguageFile = path.join(i18nPath, options.defaultLanguageFile);
|
|
32
|
+
fs.writeFileSync(defaultLanguageFile, newContent + '\n');
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
success: true
|
|
37
|
+
};
|
|
38
|
+
}));
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../builders/i18n/index.ts"],"names":[],"mappings":";;AAAA,8BAA8B;AAC9B,kCAAkC;AAClC,yDAImC;AACnC,gDAEyB;AACzB,mCAEgB;AAKhB;;GAEG;AACH,kBAAe,IAAA,yBAAa,EAAC,IAAA,gDAAmC,EAAoB,CAAC,OAA0B,EAAE,OAAuB,EAAiB,EAAE;IACzJ,MAAM,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtF,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,IAAA,aAAU,EAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAE1H,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC7B,MAAM,gBAAgB,GAAwB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAE1G,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAC/B,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;iBAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC;iBAC3F,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxC,MAAM,CAAC,CAAC,GAA8B,EAAE,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;gBAClE,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;gBACxB,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAAE,CAAC,EACR,IAAI,EACJ,CAAC,CACF,CAAC;YAEF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;YAEvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE;oBACrB,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAC7E,EAAE,CAAC,aAAa,CAAC,mBAAmB,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { JsonObject } from '@angular-devkit/core';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration for localization files
|
|
4
|
+
*/
|
|
5
|
+
export interface LocalizationConfig extends JsonObject {
|
|
6
|
+
/**
|
|
7
|
+
* Glob to define how to find localization json files
|
|
8
|
+
*/
|
|
9
|
+
localizationFiles: string[];
|
|
10
|
+
/**
|
|
11
|
+
* Folder path for the i18n folder relative to the localization json file
|
|
12
|
+
* @default 'i18n'
|
|
13
|
+
*/
|
|
14
|
+
i18nFolderPath: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Schema for the i18n builder
|
|
18
|
+
*/
|
|
19
|
+
export interface I18nBuilderSchema extends JsonObject {
|
|
20
|
+
/**
|
|
21
|
+
* List of LocalizationConfig
|
|
22
|
+
*/
|
|
23
|
+
localizationConfigs: LocalizationConfig[];
|
|
24
|
+
/**
|
|
25
|
+
* Name of the file for the default language
|
|
26
|
+
* @default 'en-GB.json'
|
|
27
|
+
*/
|
|
28
|
+
defaultLanguageFile: string;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../builders/i18n/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACX,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD;;OAEG;IACH,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAE5B;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD;;OAEG;IACH,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAE1C;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../builders/i18n/schema.ts"],"names":[],"mappings":""}
|