@sapphire/plugin-i18next 2.5.1 → 2.5.2
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/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
# [@sapphire/plugin-i18next@2.5.2](https://github.com/sapphiredev/plugins/compare/@sapphire/plugin-i18next@2.5.1...@sapphire/plugin-i18next@2.5.2) - (2022-05-18)
|
|
6
|
+
|
|
7
|
+
## 🏠 Refactor
|
|
8
|
+
|
|
9
|
+
- **i18next:** Improve language discovery (#291) ([ece5a46](https://github.com/sapphiredev/plugins/commit/ece5a467d212da318558898f251a2dd6a821e0ac))
|
|
10
|
+
|
|
5
11
|
# [@sapphire/plugin-i18next@2.5.1](https://github.com/sapphiredev/plugins/compare/@sapphire/plugin-i18next@2.5.0...@sapphire/plugin-i18next@2.5.1) - (2022-05-15)
|
|
6
12
|
|
|
7
13
|
## 🏃 Performance
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import { Awaitable, NonNullObject } from '@sapphire/utilities';
|
|
2
3
|
import { Backend } from '@skyra/i18next-backend';
|
|
3
4
|
import { StringMap, TFunction, TFunctionKeys, TFunctionResult, TOptions } from 'i18next';
|
|
5
|
+
import type { PathLike } from 'node:fs';
|
|
4
6
|
import type { InternationalizationContext, InternationalizationOptions } from './types';
|
|
5
7
|
/**
|
|
6
8
|
* A generalized class for handling `i18next` JSON files and their discovery.
|
|
@@ -28,18 +30,18 @@ export declare class InternationalizationHandler {
|
|
|
28
30
|
*/
|
|
29
31
|
readonly options: InternationalizationOptions;
|
|
30
32
|
/**
|
|
31
|
-
* The director passed to
|
|
33
|
+
* The director passed to `@skyra/i18next-backend`.
|
|
32
34
|
* Also used in {@link InternationalizationHandler.walkLanguageDirectory}.
|
|
33
35
|
* @since 1.2.0
|
|
34
36
|
*/
|
|
35
37
|
readonly languagesDirectory: string;
|
|
36
38
|
/**
|
|
37
|
-
* The backend options for
|
|
39
|
+
* The backend options for `@skyra/i18next-backend` used by `i18next`.
|
|
38
40
|
* @since 1.0.0
|
|
39
41
|
*/
|
|
40
42
|
protected readonly backendOptions: Backend.Options;
|
|
41
43
|
/**
|
|
42
|
-
* @param options The options that `i18next`,
|
|
44
|
+
* @param options The options that `i18next`, `@skyra/i18next-backend`, and {@link InternationalizationHandler} should use.
|
|
43
45
|
* @since 1.0.0
|
|
44
46
|
* @constructor
|
|
45
47
|
*/
|
|
@@ -104,16 +106,20 @@ export declare class InternationalizationHandler {
|
|
|
104
106
|
*/
|
|
105
107
|
format<TResult extends TFunctionResult = string, TKeys extends TFunctionKeys = string, TInterpolationMap extends NonNullObject = StringMap>(locale: string, key: TKeys | TKeys[], options?: TOptions<TInterpolationMap>): TResult;
|
|
106
108
|
/**
|
|
107
|
-
* @
|
|
108
|
-
* @
|
|
109
|
-
* @param namespaces The currently known namespaces.
|
|
110
|
-
* @param current The directory currently being traversed.
|
|
111
|
-
* @since 1.0.0
|
|
109
|
+
* @param directory The directory that should be walked.
|
|
110
|
+
* @since 3.0.0
|
|
112
111
|
*/
|
|
113
|
-
|
|
112
|
+
walkRootDirectory(directory: PathLike): Promise<{
|
|
114
113
|
namespaces: string[];
|
|
115
114
|
languages: string[];
|
|
116
115
|
}>;
|
|
117
116
|
reloadResources(): Promise<void>;
|
|
117
|
+
/**
|
|
118
|
+
* @description Skips any files that don't end with `.json`.
|
|
119
|
+
* @param directory The directory that should be walked.
|
|
120
|
+
* @param ns The current namespace.
|
|
121
|
+
* @since 3.0.0
|
|
122
|
+
*/
|
|
123
|
+
private walkLocaleDirectory;
|
|
118
124
|
}
|
|
119
125
|
//# sourceMappingURL=InternationalizationHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InternationalizationHandler.d.ts","sourceRoot":"","sources":["../../src/lib/InternationalizationHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAc,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAkB,MAAM,wBAAwB,CAAC;AACjE,OAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"InternationalizationHandler.d.ts","sourceRoot":"","sources":["../../src/lib/InternationalizationHandler.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAc,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAkB,MAAM,wBAAwB,CAAC;AACjE,OAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAClG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,KAAK,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAExF;;;GAGG;AACH,qBAAa,2BAA2B;IACvC;;;OAGG;IACI,eAAe,UAAS;IAE/B;;;OAGG;IACI,UAAU,cAAqB;IAEtC;;;OAGG;IACH,SAAgB,SAAS,yBAAgC;IAEzD;;;OAGG;IACH,SAAgB,OAAO,EAAE,2BAA2B,CAAC;IAErD;;;;OAIG;IACH,SAAgB,kBAAkB,EAAE,MAAM,CAAC;IAE3C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC;IAEnD;;;;OAIG;gBACgB,OAAO,CAAC,EAAE,2BAA2B;IAoBxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACI,aAAa,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,CAAc;IAEtG;;;OAGG;IACU,IAAI;IAoCjB;;;;OAIG;IACI,IAAI,CAAC,MAAM,EAAE,MAAM;IAQ1B;;;;;;;;OAQG;IACI,MAAM,CACZ,OAAO,SAAS,eAAe,GAAG,MAAM,EACxC,KAAK,SAAS,aAAa,GAAG,MAAM,EACpC,iBAAiB,SAAS,aAAa,GAAG,SAAS,EAClD,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,OAAO;IAavF;;;OAGG;IACU,iBAAiB,CAAC,SAAS,EAAE,QAAQ;;;;IAoBrC,eAAe;IAmB5B;;;;;OAKG;YACY,mBAAmB;CAUlC"}
|
|
@@ -15,7 +15,7 @@ const node_path_1 = require("node:path");
|
|
|
15
15
|
*/
|
|
16
16
|
class InternationalizationHandler {
|
|
17
17
|
/**
|
|
18
|
-
* @param options The options that `i18next`,
|
|
18
|
+
* @param options The options that `i18next`, `@skyra/i18next-backend`, and {@link InternationalizationHandler} should use.
|
|
19
19
|
* @since 1.0.0
|
|
20
20
|
* @constructor
|
|
21
21
|
*/
|
|
@@ -61,7 +61,7 @@ class InternationalizationHandler {
|
|
|
61
61
|
value: void 0
|
|
62
62
|
});
|
|
63
63
|
/**
|
|
64
|
-
* The director passed to
|
|
64
|
+
* The director passed to `@skyra/i18next-backend`.
|
|
65
65
|
* Also used in {@link InternationalizationHandler.walkLanguageDirectory}.
|
|
66
66
|
* @since 1.2.0
|
|
67
67
|
*/
|
|
@@ -72,7 +72,7 @@ class InternationalizationHandler {
|
|
|
72
72
|
value: void 0
|
|
73
73
|
});
|
|
74
74
|
/**
|
|
75
|
-
* The backend options for
|
|
75
|
+
* The backend options for `@skyra/i18next-backend` used by `i18next`.
|
|
76
76
|
* @since 1.0.0
|
|
77
77
|
*/
|
|
78
78
|
Object.defineProperty(this, "backendOptions", {
|
|
@@ -144,7 +144,7 @@ class InternationalizationHandler {
|
|
|
144
144
|
* @since 1.0.0
|
|
145
145
|
*/
|
|
146
146
|
async init() {
|
|
147
|
-
const { namespaces, languages } = await this.
|
|
147
|
+
const { namespaces, languages } = await this.walkRootDirectory(this.languagesDirectory);
|
|
148
148
|
const userOptions = (0, utilities_1.isFunction)(this.options.i18next) ? this.options.i18next(namespaces, languages) : this.options.i18next;
|
|
149
149
|
const ignoreJSONStructure = userOptions?.ignoreJSONStructure ?? false;
|
|
150
150
|
const skipOnVariables = userOptions?.interpolation?.skipOnVariables ?? false;
|
|
@@ -209,37 +209,31 @@ class InternationalizationHandler {
|
|
|
209
209
|
return language(key, { ...missingHandlers, ...options });
|
|
210
210
|
}
|
|
211
211
|
/**
|
|
212
|
-
* @
|
|
213
|
-
* @
|
|
214
|
-
* @param namespaces The currently known namespaces.
|
|
215
|
-
* @param current The directory currently being traversed.
|
|
216
|
-
* @since 1.0.0
|
|
212
|
+
* @param directory The directory that should be walked.
|
|
213
|
+
* @since 3.0.0
|
|
217
214
|
*/
|
|
218
|
-
async
|
|
219
|
-
const
|
|
220
|
-
const
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}
|
|
231
|
-
else if (entry.name.endsWith('.json')) {
|
|
232
|
-
namespaces.push(`${current}${fn.substr(0, fn.length - 5)}`);
|
|
215
|
+
async walkRootDirectory(directory) {
|
|
216
|
+
const languages = new Set();
|
|
217
|
+
const namespaces = new Set();
|
|
218
|
+
const dir = await (0, promises_1.opendir)(directory);
|
|
219
|
+
for await (const entry of dir) {
|
|
220
|
+
// If the entry is not a directory, skip:
|
|
221
|
+
if (!entry.isDirectory())
|
|
222
|
+
continue;
|
|
223
|
+
// Load the directory:
|
|
224
|
+
languages.add(entry.name);
|
|
225
|
+
for await (const namespace of this.walkLocaleDirectory((0, node_path_1.join)(dir.path, entry.name), '')) {
|
|
226
|
+
namespaces.add(namespace);
|
|
233
227
|
}
|
|
234
228
|
}
|
|
235
|
-
return { namespaces: [...
|
|
229
|
+
return { namespaces: [...namespaces], languages: [...languages] };
|
|
236
230
|
}
|
|
237
231
|
async reloadResources() {
|
|
238
232
|
const result = await (0, framework_1.fromAsync)(async () => {
|
|
239
233
|
let languages = this.options.hmr?.languages;
|
|
240
234
|
let namespaces = this.options.hmr?.namespaces;
|
|
241
235
|
if (!languages || !namespaces) {
|
|
242
|
-
const languageDirectoryResult = await this.
|
|
236
|
+
const languageDirectoryResult = await this.walkRootDirectory(this.languagesDirectory);
|
|
243
237
|
languages ?? (languages = languageDirectoryResult.languages);
|
|
244
238
|
namespaces ?? (namespaces = languageDirectoryResult.namespaces);
|
|
245
239
|
}
|
|
@@ -250,6 +244,23 @@ class InternationalizationHandler {
|
|
|
250
244
|
pieces_1.container.logger.error('[i18next-Plugin]: Failed to reload language resources.', result.error);
|
|
251
245
|
}
|
|
252
246
|
}
|
|
247
|
+
/**
|
|
248
|
+
* @description Skips any files that don't end with `.json`.
|
|
249
|
+
* @param directory The directory that should be walked.
|
|
250
|
+
* @param ns The current namespace.
|
|
251
|
+
* @since 3.0.0
|
|
252
|
+
*/
|
|
253
|
+
async *walkLocaleDirectory(directory, ns) {
|
|
254
|
+
const dir = await (0, promises_1.opendir)(directory);
|
|
255
|
+
for await (const entry of dir) {
|
|
256
|
+
if (entry.isDirectory()) {
|
|
257
|
+
yield* this.walkLocaleDirectory((0, node_path_1.join)(dir.path, entry.name), `${ns}${entry.name}/`);
|
|
258
|
+
}
|
|
259
|
+
else if (entry.isFile() && entry.name.endsWith('.json')) {
|
|
260
|
+
yield `${ns}${entry.name.slice(0, -5)}`;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
253
264
|
}
|
|
254
265
|
exports.InternationalizationHandler = InternationalizationHandler;
|
|
255
266
|
//# sourceMappingURL=InternationalizationHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InternationalizationHandler.js","sourceRoot":"","sources":["../../src/lib/InternationalizationHandler.ts"],"names":[],"mappings":";;;;AAAA,mDAAuD;AACvD,6CAA0D;AAC1D,mDAA2E;AAC3E,4DAAiE;AACjE,8DAAkG;
|
|
1
|
+
{"version":3,"file":"InternationalizationHandler.js","sourceRoot":"","sources":["../../src/lib/InternationalizationHandler.ts"],"names":[],"mappings":"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"}
|