@rushstack/webpack5-localization-plugin 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/LICENSE +24 -0
- package/README.md +209 -0
- package/dist/tsdoc-metadata.json +11 -0
- package/dist/webpack5-localization-plugin.d.ts +274 -0
- package/lib/AssetProcessor.d.ts +26 -0
- package/lib/AssetProcessor.d.ts.map +1 -0
- package/lib/AssetProcessor.js +243 -0
- package/lib/AssetProcessor.js.map +1 -0
- package/lib/LocalizationPlugin.d.ts +79 -0
- package/lib/LocalizationPlugin.d.ts.map +1 -0
- package/lib/LocalizationPlugin.js +586 -0
- package/lib/LocalizationPlugin.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +8 -0
- package/lib/index.js.map +1 -0
- package/lib/interfaces.d.ts +173 -0
- package/lib/interfaces.d.ts.map +1 -0
- package/lib/interfaces.js +5 -0
- package/lib/interfaces.js.map +1 -0
- package/lib/loaders/IResxLoaderOptions.d.ts +12 -0
- package/lib/loaders/IResxLoaderOptions.d.ts.map +1 -0
- package/lib/loaders/IResxLoaderOptions.js +5 -0
- package/lib/loaders/IResxLoaderOptions.js.map +1 -0
- package/lib/loaders/LoaderFactory.d.ts +6 -0
- package/lib/loaders/LoaderFactory.d.ts.map +1 -0
- package/lib/loaders/LoaderFactory.js +28 -0
- package/lib/loaders/LoaderFactory.js.map +1 -0
- package/lib/loaders/default-locale-loader.d.ts +8 -0
- package/lib/loaders/default-locale-loader.d.ts.map +1 -0
- package/lib/loaders/default-locale-loader.js +26 -0
- package/lib/loaders/default-locale-loader.js.map +1 -0
- package/lib/loaders/loc-loader.d.ts +15 -0
- package/lib/loaders/loc-loader.d.ts.map +1 -0
- package/lib/loaders/loc-loader.js +23 -0
- package/lib/loaders/loc-loader.js.map +1 -0
- package/lib/loaders/locjson-loader.d.ts +5 -0
- package/lib/loaders/locjson-loader.d.ts.map +1 -0
- package/lib/loaders/locjson-loader.js +14 -0
- package/lib/loaders/locjson-loader.js.map +1 -0
- package/lib/loaders/resjson-loader.d.ts +5 -0
- package/lib/loaders/resjson-loader.d.ts.map +1 -0
- package/lib/loaders/resjson-loader.js +14 -0
- package/lib/loaders/resjson-loader.js.map +1 -0
- package/lib/loaders/resx-loader.d.ts +5 -0
- package/lib/loaders/resx-loader.d.ts.map +1 -0
- package/lib/loaders/resx-loader.js +21 -0
- package/lib/loaders/resx-loader.js.map +1 -0
- package/lib/utilities/Constants.d.ts +12 -0
- package/lib/utilities/Constants.d.ts.map +1 -0
- package/lib/utilities/Constants.js +17 -0
- package/lib/utilities/Constants.js.map +1 -0
- package/lib/utilities/EntityMarker.d.ts +9 -0
- package/lib/utilities/EntityMarker.d.ts.map +1 -0
- package/lib/utilities/EntityMarker.js +21 -0
- package/lib/utilities/EntityMarker.js.map +1 -0
- package/lib/utilities/LoaderTerminalProvider.d.ts +6 -0
- package/lib/utilities/LoaderTerminalProvider.d.ts.map +1 -0
- package/lib/utilities/LoaderTerminalProvider.js +28 -0
- package/lib/utilities/LoaderTerminalProvider.js.map +1 -0
- package/lib/webpackInterfaces.d.ts +13 -0
- package/lib/webpackInterfaces.d.ts.map +1 -0
- package/lib/webpackInterfaces.js +5 -0
- package/lib/webpackInterfaces.js.map +1 -0
- package/package.json +35 -0
package/LICENSE
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
@rushstack/webpack5-localization-plugin
|
2
|
+
|
3
|
+
Copyright (c) Microsoft Corporation. All rights reserved.
|
4
|
+
|
5
|
+
MIT License
|
6
|
+
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
8
|
+
a copy of this software and associated documentation files (the
|
9
|
+
"Software"), to deal in the Software without restriction, including
|
10
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
11
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
12
|
+
permit persons to whom the Software is furnished to do so, subject to
|
13
|
+
the following conditions:
|
14
|
+
|
15
|
+
The above copyright notice and this permission notice shall be
|
16
|
+
included in all copies or substantial portions of the Software.
|
17
|
+
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
19
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
20
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
21
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
22
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
23
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
24
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
@@ -0,0 +1,209 @@
|
|
1
|
+
# @rushstack/webpack5-localization-plugin
|
2
|
+
|
3
|
+
## Installation
|
4
|
+
|
5
|
+
`npm install @rushstack/webpack5-localization-plugin --save-dev`
|
6
|
+
|
7
|
+
## Overview
|
8
|
+
|
9
|
+
This Webpack plugin produces bundles that have multiple locales' variants of strings embedded. It also
|
10
|
+
has out-of-box support for RESX files in addition to JSON strings files (with the extensions `.loc.json` or `.resjson`).
|
11
|
+
|
12
|
+
The loaders can also be chained with other loaders that convert the content to one of the known formats.
|
13
|
+
|
14
|
+
# Plugin
|
15
|
+
|
16
|
+
To use the plugin, add it to the `plugins` array of your Webpack config, and specify one or more loaders. For example:
|
17
|
+
|
18
|
+
```JavaScript
|
19
|
+
import { LocalizationPlugin } from '@rushstack/webpack5-localization-plugin';
|
20
|
+
|
21
|
+
{
|
22
|
+
plugins: [
|
23
|
+
new LocalizationPlugin( /* options */ )
|
24
|
+
],
|
25
|
+
module: {
|
26
|
+
rules: [{
|
27
|
+
test: /\.resjson$/,
|
28
|
+
use: {
|
29
|
+
// All loaders are available in `@rushstack/webpack5-localization-plugin/lib/loaders/`
|
30
|
+
// Loaders for specific formats: `resjson-loader`, `locjson-loader`, `resx-loader`
|
31
|
+
// Loader that switches on file extension: `loc-loader`
|
32
|
+
// Loader that switches on file extension and skips localization: `default-locale-loader`
|
33
|
+
loader: require.resolve('@rushstack/webpack5-localization-plugin/lib/loaders/resjson-loader')
|
34
|
+
},
|
35
|
+
// Can be one of `javascript/esm`, `javascript/dynamic`, or `json`
|
36
|
+
// `javascript/esm` will produce the smallest bundle sizes, while `json` will produce faster code for large string tables
|
37
|
+
type: 'javascript/esm',
|
38
|
+
sideEffects: false
|
39
|
+
}]
|
40
|
+
}
|
41
|
+
}
|
42
|
+
```
|
43
|
+
|
44
|
+
***A note about the dev server:*** When Webpack is being run by the Webpack dev server, this plugin pipes
|
45
|
+
the strings in the loc files in the source (the `.loc.json` and the `.resx` files) to the output without
|
46
|
+
any translations.
|
47
|
+
|
48
|
+
## Options
|
49
|
+
|
50
|
+
### `localizedData = { }`
|
51
|
+
|
52
|
+
#### `localizedData.defaultLocale = { }`
|
53
|
+
|
54
|
+
This option has a required property (`localeName`), to specify the name of the locale used in the
|
55
|
+
`.resx` and `.loc.json` files in the source.
|
56
|
+
|
57
|
+
##### `localizedData.defaultLocale.fillMissingTranslationStrings = true | false`
|
58
|
+
|
59
|
+
If this option is set to `true`, strings that are missing from `localizedData.translatedStrings` will be
|
60
|
+
provided by the default locale (the strings in the `.resx` and `.loc.json` files in the source). If
|
61
|
+
this option is unset or set to `false`, an error will be emitted if a string is missing from
|
62
|
+
`localizedData.translatedStrings`.
|
63
|
+
|
64
|
+
#### `localizedData.translatedStrings = { }`
|
65
|
+
|
66
|
+
This option is used to specify the localization data to be used in the build. This object has the following
|
67
|
+
structure:
|
68
|
+
|
69
|
+
- Locale name
|
70
|
+
- Compilation context-relative or absolute localization file path
|
71
|
+
- Translated strings
|
72
|
+
|
73
|
+
For example:
|
74
|
+
|
75
|
+
```JavaScript
|
76
|
+
translatedStrings: {
|
77
|
+
"en-us": {
|
78
|
+
"./src/strings1.loc.json": {
|
79
|
+
"string1": "the first string"
|
80
|
+
}
|
81
|
+
},
|
82
|
+
"es-es": {
|
83
|
+
"./src/strings1.loc.json": {
|
84
|
+
"string1": "la primera cadena"
|
85
|
+
}
|
86
|
+
}
|
87
|
+
}
|
88
|
+
```
|
89
|
+
|
90
|
+
Alternatively, instead of directly specifying the translations, a path to a translated resource file can be
|
91
|
+
specified. For example:
|
92
|
+
|
93
|
+
```JavaScript
|
94
|
+
translatedStrings: {
|
95
|
+
"en-us": {
|
96
|
+
"./src/strings1.loc.json": "./localization/en-us/strings1.loc.json"
|
97
|
+
},
|
98
|
+
"es-es": {
|
99
|
+
"./src/strings1.loc.json": "./localization/es-es/strings1.loc.json"
|
100
|
+
}
|
101
|
+
}
|
102
|
+
```
|
103
|
+
|
104
|
+
#### `localizedData.resolveMissingTranslatedStrings = (locales: string[], filePath: string, context: LoaderContext<{}>) => { ... }`
|
105
|
+
|
106
|
+
This optional option can be used to resolve translated data that is missing from data that is provided
|
107
|
+
in the `localizedData.translatedStrings` option. Set this option with a function expecting two parameters:
|
108
|
+
the first, an array of locale names, and second, a fully-qualified path to the localized file in source. The
|
109
|
+
function should synchronously or asynchronously (as a promise) return an object (or map) with locale names as keys and localized
|
110
|
+
data as values. The localized data value should be one of:
|
111
|
+
|
112
|
+
- a string: The absolute path to the translated data in `.resx`, `.loc.json`, or `.resjson` format
|
113
|
+
- an object: An object containing the translated data
|
114
|
+
- a map: A map containing the translated data
|
115
|
+
|
116
|
+
Note that these values are the same as the values that can be specified for translations for a localized
|
117
|
+
resource in `localizedData.translatedStrings`.
|
118
|
+
|
119
|
+
If the function returns data that is missing locales or individual strings, the plugin will fall back to the
|
120
|
+
default locale if `localizedData.defaultLocale.fillMissingTranslationStrings` is set to `true`. If
|
121
|
+
`localizedData.defaultLocale.fillMissingTranslationStrings` is set to `false`, an error will result.
|
122
|
+
|
123
|
+
#### `localizedData.passthroughLocale = { }`
|
124
|
+
|
125
|
+
This option is used to specify how and if a passthrough locale should be generated. A passthrough locale
|
126
|
+
is a generated locale in which each string's value is its name. This is useful for debugging and for identifying
|
127
|
+
cases where a locale is missing.
|
128
|
+
|
129
|
+
This option takes two optional properties:
|
130
|
+
|
131
|
+
##### `localizedData.passthroughLocale.usePassthroughLocale = true | false`
|
132
|
+
|
133
|
+
If `passthroughLocale.usePassthroughLocale` is set to `true`, a passthrough locale will be included in the output.
|
134
|
+
By default, the passthrough locale's name is "passthrough."
|
135
|
+
|
136
|
+
##### `localizedData.passthroughLocale.passthroughLocaleName = '...'`
|
137
|
+
|
138
|
+
If `passthroughLocale.usePassthroughLocale` is set to `true`, the "passthrough" locale name can be overridden
|
139
|
+
by setting a value on `passthroughLocale.passthroughLocaleName`.
|
140
|
+
|
141
|
+
#### `localizedData.pseudolocales = { }`
|
142
|
+
|
143
|
+
This option allows pseudolocales to be generated from the strings in the default locale. This option takes
|
144
|
+
an option with pseudolocales as keys and options for the
|
145
|
+
[pseudolocale package](https://www.npmjs.com/package/pseudolocale) as values.
|
146
|
+
|
147
|
+
### `noStringsLocaleName = '...'`
|
148
|
+
|
149
|
+
The value to replace the `[locale]` token with for chunks without localized strings. Defaults to "none"
|
150
|
+
|
151
|
+
### `runtimeLocaleExpression = '...'`
|
152
|
+
|
153
|
+
A chunk of raw ECMAScript to inject into the webpack runtime to resolve the current locale at execution time. Allows
|
154
|
+
multiple locales to share the same runtime chunk if it does not directly contain localized strings.
|
155
|
+
|
156
|
+
### `localizationStats = { }`
|
157
|
+
|
158
|
+
#### `localizationStats.dropPath = '...'`
|
159
|
+
|
160
|
+
This option is used to designate a path at which a JSON file describing the localized assets produced should be
|
161
|
+
written. If this property is omitted, the stats file won't be written.
|
162
|
+
|
163
|
+
The file has the following format:
|
164
|
+
|
165
|
+
```JSON
|
166
|
+
{
|
167
|
+
"entrypoints": {
|
168
|
+
"<BUNDLE NAME>": {
|
169
|
+
"localizedAssets": {
|
170
|
+
"<LOCALE NAME>": "<ASSET NAME>",
|
171
|
+
"<LOCALE NAME>": "<ASSET NAME>"
|
172
|
+
}
|
173
|
+
},
|
174
|
+
"<BUNDLE NAME>": {
|
175
|
+
"localizedAssets": {
|
176
|
+
"<LOCALE NAME>": "<ASSET NAME>",
|
177
|
+
"<LOCALE NAME>": "<ASSET NAME>"
|
178
|
+
}
|
179
|
+
}
|
180
|
+
},
|
181
|
+
"namedChunkGroups": {
|
182
|
+
"<CHUNK NAME>": {
|
183
|
+
"localizedAssets": {
|
184
|
+
"<LOCALE NAME>": "<ASSET NAME>",
|
185
|
+
"<LOCALE NAME>": "<ASSET NAME>"
|
186
|
+
}
|
187
|
+
},
|
188
|
+
"<CHUNK NAME>": {
|
189
|
+
"localizedAssets": {
|
190
|
+
"<LOCALE NAME>": "<ASSET NAME>",
|
191
|
+
"<LOCALE NAME>": "<ASSET NAME>"
|
192
|
+
}
|
193
|
+
}
|
194
|
+
}
|
195
|
+
}
|
196
|
+
|
197
|
+
```
|
198
|
+
|
199
|
+
#### `localizationStats.callback = (stats) => { ... }`
|
200
|
+
|
201
|
+
This option is used to specify a callback to be called with the stats data that would be dropped at
|
202
|
+
[`localizationStats.dropPath`](#localizationStats.DropPath--) after compilation completes.
|
203
|
+
|
204
|
+
## Links
|
205
|
+
|
206
|
+
- [CHANGELOG.md](https://github.com/microsoft/rushstack/blob/main/webpack/localization-plugin/CHANGELOG.md) - Find
|
207
|
+
out what's new in the latest version
|
208
|
+
|
209
|
+
`@rushstack/webpack5-localization-plugin` is part of the [Rush Stack](https://rushstack.io/) family of projects.
|
@@ -0,0 +1,11 @@
|
|
1
|
+
// This file is read by tools that parse documentation comments conforming to the TSDoc standard.
|
2
|
+
// It should be published with your NPM package. It should not be tracked by Git.
|
3
|
+
{
|
4
|
+
"tsdocVersion": "0.12",
|
5
|
+
"toolPackages": [
|
6
|
+
{
|
7
|
+
"packageName": "@microsoft/api-extractor",
|
8
|
+
"packageVersion": "7.25.2"
|
9
|
+
}
|
10
|
+
]
|
11
|
+
}
|
@@ -0,0 +1,274 @@
|
|
1
|
+
import type { Chunk } from 'webpack';
|
2
|
+
import type { Compiler } from 'webpack';
|
3
|
+
import { ILocalizationFile } from '@rushstack/localization-utilities';
|
4
|
+
import type { IPseudolocaleOptions } from '@rushstack/localization-utilities';
|
5
|
+
import type { LoaderContext } from 'webpack';
|
6
|
+
import type { WebpackPluginInstance } from 'webpack';
|
7
|
+
|
8
|
+
/**
|
9
|
+
* @public
|
10
|
+
*/
|
11
|
+
export declare interface IDefaultLocaleOptions {
|
12
|
+
/**
|
13
|
+
* This required property specifies the name of the locale used in the
|
14
|
+
* `.resx`, `.loc.json`, and `.resjson` files in the source
|
15
|
+
*/
|
16
|
+
localeName: string;
|
17
|
+
/**
|
18
|
+
* If this option is set to `true`, strings that are missing from
|
19
|
+
* `localizedData.translatedStrings` will be provided by the default locale
|
20
|
+
*/
|
21
|
+
fillMissingTranslationStrings?: boolean;
|
22
|
+
}
|
23
|
+
|
24
|
+
/**
|
25
|
+
* @public
|
26
|
+
*/
|
27
|
+
export declare interface ILocaleData {
|
28
|
+
[locFilePath: string]: ILocaleFileData;
|
29
|
+
}
|
30
|
+
|
31
|
+
/**
|
32
|
+
* @public
|
33
|
+
*/
|
34
|
+
export declare interface ILocaleElementMap {
|
35
|
+
[locale: string]: string;
|
36
|
+
}
|
37
|
+
|
38
|
+
/**
|
39
|
+
* @public
|
40
|
+
* Accepted formats:
|
41
|
+
* - A string containing the path to the translations in .resjson format (keys mapped directly to values)
|
42
|
+
* - An object mapping keys directly to values
|
43
|
+
* - A map mapping keys directly to values
|
44
|
+
*/
|
45
|
+
export declare type ILocaleFileData = string | ILocaleFileObject | ReadonlyMap<string, string>;
|
46
|
+
|
47
|
+
/**
|
48
|
+
* @public
|
49
|
+
*/
|
50
|
+
export declare interface ILocaleFileObject {
|
51
|
+
[stringName: string]: string;
|
52
|
+
}
|
53
|
+
|
54
|
+
/**
|
55
|
+
* The options for localization.
|
56
|
+
*
|
57
|
+
* @public
|
58
|
+
*/
|
59
|
+
export declare interface ILocalizationPluginOptions {
|
60
|
+
/**
|
61
|
+
* Localization data.
|
62
|
+
*/
|
63
|
+
localizedData: ILocalizedData;
|
64
|
+
/**
|
65
|
+
* This option is used to specify `.resx`, `.resx.json`, and `.loc.json` files that should not be processed by
|
66
|
+
* this plugin.
|
67
|
+
*/
|
68
|
+
globsToIgnore?: string[];
|
69
|
+
/**
|
70
|
+
* The value to replace the [locale] token with for chunks without localized strings. Defaults to "none"
|
71
|
+
*/
|
72
|
+
noStringsLocaleName?: string;
|
73
|
+
/**
|
74
|
+
* A chunk of javascript to use to get the current locale at runtime. If specified, allows the runtime chunk
|
75
|
+
* to be non-localized even if it has async localized chunks, as long as it does not directly contain strings.
|
76
|
+
*/
|
77
|
+
runtimeLocaleExpression?: string;
|
78
|
+
/**
|
79
|
+
* Options for how localization stats data should be produced.
|
80
|
+
*/
|
81
|
+
localizationStats?: ILocalizationStatsOptions;
|
82
|
+
}
|
83
|
+
|
84
|
+
/**
|
85
|
+
* @public
|
86
|
+
*/
|
87
|
+
export declare interface ILocalizationStats {
|
88
|
+
entrypoints: {
|
89
|
+
[name: string]: ILocalizationStatsEntrypoint;
|
90
|
+
};
|
91
|
+
namedChunkGroups: {
|
92
|
+
[name: string]: ILocalizationStatsChunkGroup;
|
93
|
+
};
|
94
|
+
}
|
95
|
+
|
96
|
+
/**
|
97
|
+
* @public
|
98
|
+
*/
|
99
|
+
export declare interface ILocalizationStatsChunkGroup {
|
100
|
+
localizedAssets: ILocaleElementMap;
|
101
|
+
}
|
102
|
+
|
103
|
+
/**
|
104
|
+
* @public
|
105
|
+
*/
|
106
|
+
export declare interface ILocalizationStatsEntrypoint {
|
107
|
+
localizedAssets: ILocaleElementMap;
|
108
|
+
}
|
109
|
+
|
110
|
+
/**
|
111
|
+
* Options for how localization stats data should be produced.
|
112
|
+
*
|
113
|
+
* @public
|
114
|
+
*/
|
115
|
+
export declare interface ILocalizationStatsOptions {
|
116
|
+
/**
|
117
|
+
* This option is used to designate a path at which a JSON file describing the localized
|
118
|
+
* assets produced should be written.
|
119
|
+
*/
|
120
|
+
dropPath?: string;
|
121
|
+
/**
|
122
|
+
* This option is used to specify a callback to be called with the stats data that would be
|
123
|
+
* dropped at `localizationStats.dropPath` after compilation completes.
|
124
|
+
*/
|
125
|
+
callback?: (stats: ILocalizationStats) => void;
|
126
|
+
}
|
127
|
+
|
128
|
+
/**
|
129
|
+
* @public
|
130
|
+
*/
|
131
|
+
export declare interface ILocalizedData {
|
132
|
+
/**
|
133
|
+
* Options for the locale used in the source localized data files.
|
134
|
+
*/
|
135
|
+
defaultLocale: IDefaultLocaleOptions;
|
136
|
+
/**
|
137
|
+
* Use this parameter to specify the translated data.
|
138
|
+
*/
|
139
|
+
translatedStrings: ILocalizedStrings;
|
140
|
+
/**
|
141
|
+
* Use this parameter to specify a function used to load translations missing from
|
142
|
+
* the {@link ILocalizedData.translatedStrings} parameter.
|
143
|
+
*/
|
144
|
+
resolveMissingTranslatedStrings?: (locales: string[], localizedFileKey: string, loaderContext: LoaderContext<{}>) => Promise<IResolvedMissingTranslations> | IResolvedMissingTranslations;
|
145
|
+
/**
|
146
|
+
* Options around including a passthrough locale.
|
147
|
+
*/
|
148
|
+
passthroughLocale?: IPassthroughLocaleOptions;
|
149
|
+
/**
|
150
|
+
* Options for pseudo-localization.
|
151
|
+
*/
|
152
|
+
pseudolocales?: IPseudolocalesOptions;
|
153
|
+
}
|
154
|
+
|
155
|
+
/**
|
156
|
+
* @public
|
157
|
+
*/
|
158
|
+
export declare interface ILocalizedStrings {
|
159
|
+
[locale: string]: ILocaleData;
|
160
|
+
}
|
161
|
+
|
162
|
+
/**
|
163
|
+
* @public
|
164
|
+
*/
|
165
|
+
export declare interface ILocalizedWebpackChunk extends Chunk {
|
166
|
+
localizedFiles?: {
|
167
|
+
[locale: string]: string;
|
168
|
+
};
|
169
|
+
}
|
170
|
+
|
171
|
+
/**
|
172
|
+
* Options for the passthrough locale.
|
173
|
+
*
|
174
|
+
* @public
|
175
|
+
*/
|
176
|
+
export declare interface IPassthroughLocaleOptions {
|
177
|
+
/**
|
178
|
+
* If this is set to `true`, a passthrough locale will be included in the output
|
179
|
+
*/
|
180
|
+
usePassthroughLocale?: boolean;
|
181
|
+
/**
|
182
|
+
* If {@link IPassthroughLocaleOptions.usePassthroughLocale} is set, use this name for the passthrough locale.
|
183
|
+
* Defaults to "passthrough"
|
184
|
+
*/
|
185
|
+
passthroughLocaleName?: string;
|
186
|
+
}
|
187
|
+
|
188
|
+
/**
|
189
|
+
* Options for generated pseudolocales.
|
190
|
+
*
|
191
|
+
* @public
|
192
|
+
*/
|
193
|
+
export declare interface IPseudolocalesOptions {
|
194
|
+
[pseudoLocaleName: string]: IPseudolocaleOptions;
|
195
|
+
}
|
196
|
+
|
197
|
+
/**
|
198
|
+
* @public
|
199
|
+
*/
|
200
|
+
export declare type IResolvedMissingTranslations = ReadonlyMap<string, ILocaleFileData>;
|
201
|
+
|
202
|
+
/**
|
203
|
+
* @public
|
204
|
+
*/
|
205
|
+
export declare interface _IStringPlaceholder {
|
206
|
+
/**
|
207
|
+
* The literal string that will be injected for later replacement.
|
208
|
+
*/
|
209
|
+
value: string;
|
210
|
+
/**
|
211
|
+
* The identifier for this particular placeholder, for lookup.
|
212
|
+
*/
|
213
|
+
suffix: string;
|
214
|
+
/**
|
215
|
+
* The values of this string in each output locale.
|
216
|
+
*/
|
217
|
+
valuesByLocale: Map<string, string>;
|
218
|
+
/**
|
219
|
+
* The key used to identify the source file containing the string.
|
220
|
+
*/
|
221
|
+
locFilePath: string;
|
222
|
+
/**
|
223
|
+
* The identifier of the string within its original source file.
|
224
|
+
*/
|
225
|
+
stringName: string;
|
226
|
+
}
|
227
|
+
|
228
|
+
/**
|
229
|
+
* This plugin facilitates localization in webpack.
|
230
|
+
*
|
231
|
+
* @public
|
232
|
+
*/
|
233
|
+
export declare class LocalizationPlugin implements WebpackPluginInstance {
|
234
|
+
private readonly _stringKeys;
|
235
|
+
private readonly _options;
|
236
|
+
private readonly _resolvedTranslatedStringsFromOptions;
|
237
|
+
private _stringPlaceholderCounter;
|
238
|
+
private readonly _stringPlaceholderMap;
|
239
|
+
private _passthroughLocaleName;
|
240
|
+
private _defaultLocale;
|
241
|
+
private _noStringsLocaleName;
|
242
|
+
private _fillMissingTranslationStrings;
|
243
|
+
private readonly _pseudolocalizers;
|
244
|
+
/**
|
245
|
+
* The outermost map's keys are the locale names.
|
246
|
+
* The middle map's keys are the resolved, file names.
|
247
|
+
* The innermost map's keys are the string identifiers and its values are the string values.
|
248
|
+
*/
|
249
|
+
private _resolvedLocalizedStrings;
|
250
|
+
constructor(options: ILocalizationPluginOptions);
|
251
|
+
/**
|
252
|
+
* Apply this plugin to the specified webpack compiler.
|
253
|
+
*/
|
254
|
+
apply(compiler: Compiler): void;
|
255
|
+
/**
|
256
|
+
* @public
|
257
|
+
*
|
258
|
+
* @returns An object mapping the string keys to placeholders
|
259
|
+
*/
|
260
|
+
addDefaultLocFileAsync(context: LoaderContext<{}>, localizedFileKey: string, localizedResourceData: ILocalizationFile): Promise<Record<string, string>>;
|
261
|
+
/**
|
262
|
+
* @public
|
263
|
+
*/
|
264
|
+
getPlaceholder(localizedFileKey: string, stringName: string): _IStringPlaceholder | undefined;
|
265
|
+
/**
|
266
|
+
* @internal
|
267
|
+
*/
|
268
|
+
getDataForSerialNumber(serialNumber: string): _IStringPlaceholder | undefined;
|
269
|
+
private _addLocFileAndGetPlaceholders;
|
270
|
+
private _addTranslations;
|
271
|
+
private _initializeAndValidateOptions;
|
272
|
+
}
|
273
|
+
|
274
|
+
export { }
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import type { Asset, Chunk, Compilation, sources } from 'webpack';
|
2
|
+
import type { LocalizationPlugin } from './LocalizationPlugin';
|
3
|
+
export interface IProcessAssetOptionsBase {
|
4
|
+
plugin: LocalizationPlugin;
|
5
|
+
compilation: Compilation;
|
6
|
+
chunk: Chunk;
|
7
|
+
asset: Asset;
|
8
|
+
}
|
9
|
+
export interface IProcessNonLocalizedAssetOptions extends IProcessAssetOptionsBase {
|
10
|
+
fileName: string;
|
11
|
+
noStringsLocaleName: string;
|
12
|
+
}
|
13
|
+
export interface IProcessLocalizedAssetOptions extends IProcessAssetOptionsBase {
|
14
|
+
locales: Set<string>;
|
15
|
+
fillMissingTranslationStrings: boolean;
|
16
|
+
defaultLocale: string;
|
17
|
+
filenameTemplate: Parameters<typeof Compilation.prototype.getAssetPath>[0];
|
18
|
+
}
|
19
|
+
export interface IProcessAssetResult {
|
20
|
+
filename: string;
|
21
|
+
asset: sources.Source;
|
22
|
+
}
|
23
|
+
export declare const PLACEHOLDER_REGEX: RegExp;
|
24
|
+
export declare function processLocalizedAsset(options: IProcessLocalizedAssetOptions): Record<string, string>;
|
25
|
+
export declare function processNonLocalizedAsset(options: IProcessNonLocalizedAssetOptions): void;
|
26
|
+
//# sourceMappingURL=AssetProcessor.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"AssetProcessor.d.ts","sourceRoot":"","sources":["../src/AssetProcessor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAa,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAG7E,OAAO,KAAK,EAAE,kBAAkB,EAAsB,MAAM,sBAAsB,CAAC;AAoCnF,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,gCAAiC,SAAQ,wBAAwB;IAChF,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,6BAA8B,SAAQ,wBAAwB;IAC7E,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,6BAA6B,EAAE,OAAO,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,iBAAiB,EAAE,MAG/B,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,6BAA6B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmEpG;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,gCAAgC,GAAG,IAAI,CAqCxF"}
|