@commandkit/i18n 0.1.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 +5 -0
- package/README.md +22 -0
- package/dist/constants.d.ts +3 -0
- package/dist/constants.js +7 -0
- package/dist/hooks.d.ts +7 -0
- package/dist/hooks.js +17 -0
- package/dist/i18n.d.ts +59 -0
- package/dist/i18n.js +189 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +20 -0
- package/dist/types.d.ts +10 -0
- package/dist/types.js +4 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +58 -0
- package/package.json +39 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
Copyright 2025 Avraj Sahota
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so.
|
|
4
|
+
|
|
5
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# `@commandkit/i18n`
|
|
2
|
+
|
|
3
|
+
A commandkit plugin for i18next integration.
|
|
4
|
+
|
|
5
|
+
# Installation
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
$ npm i @commandkit/i18n
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
# Usage
|
|
12
|
+
|
|
13
|
+
Add the following to your commandkit config:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { defineConfig } from "commandkit"
|
|
17
|
+
import { i18n } from "@commandkit/i18n"
|
|
18
|
+
|
|
19
|
+
export default defineConfig({
|
|
20
|
+
plugins: [i18n()]
|
|
21
|
+
})
|
|
22
|
+
```
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.COMMAND_METADATA_KEY = exports.DISCORD_LOCALES = void 0;
|
|
4
|
+
const discord_js_1 = require("discord.js");
|
|
5
|
+
exports.DISCORD_LOCALES = new Set(Object.values(discord_js_1.Locale).filter((locale) => !/^\d+/.test(locale)));
|
|
6
|
+
exports.COMMAND_METADATA_KEY = '$command';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBb0M7QUFFdkIsUUFBQSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQUMsbUJBQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQy9ELENBQUM7QUFFVyxRQUFBLG9CQUFvQixHQUFHLFVBQVUsQ0FBQyJ9
|
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Locale } from 'discord.js';
|
|
2
|
+
import type { CommandLocalizationContext } from './i18n';
|
|
3
|
+
/**
|
|
4
|
+
* Gets the localization context.
|
|
5
|
+
* @param locale The locale to use. Defaults to the detected locale or the default locale.
|
|
6
|
+
*/
|
|
7
|
+
export declare function locale(locale?: Locale): CommandLocalizationContext;
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.locale = locale;
|
|
4
|
+
const commandkit_1 = require("commandkit");
|
|
5
|
+
/**
|
|
6
|
+
* Gets the localization context.
|
|
7
|
+
* @param locale The locale to use. Defaults to the detected locale or the default locale.
|
|
8
|
+
*/
|
|
9
|
+
function locale(locale) {
|
|
10
|
+
const env = (0, commandkit_1.useEnvironment)();
|
|
11
|
+
const context = env.context;
|
|
12
|
+
if (!context) {
|
|
13
|
+
throw new Error('No localization context found');
|
|
14
|
+
}
|
|
15
|
+
return context.locale(locale);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaG9va3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSx3QkFTQztBQWZELDJDQUE0QztBQUU1Qzs7O0dBR0c7QUFDSCxTQUFnQixNQUFNLENBQUMsTUFBZTtJQUNwQyxNQUFNLEdBQUcsR0FBRyxJQUFBLDJCQUFjLEdBQUUsQ0FBQztJQUM3QixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBRTVCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLENBQUMifQ==
|
package/dist/i18n.d.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { NewableModule, Module, Newable, i18n, InitOptions } from 'i18next';
|
|
2
|
+
import { CommandKitPluginRuntime, RuntimePlugin, CommandKitEnvironment, CommandSource, PreparedAppCommandExecution, CommandBuilderLike, PreRegisterCommandsEvent, CommandKitHMREvent } from 'commandkit';
|
|
3
|
+
import { Locale } from 'discord.js';
|
|
4
|
+
export type Awaitable<T> = Promise<T> | T;
|
|
5
|
+
export type LocalizationModule = NewableModule<Module> | Module | Newable<Module>;
|
|
6
|
+
export type DynamicLocalizationModule = () => Awaitable<LocalizationModule>;
|
|
7
|
+
export interface LocalizationPluginOptions {
|
|
8
|
+
/**
|
|
9
|
+
* The i18next plugins to use. The plugins are loaded in the order they are
|
|
10
|
+
* specified.
|
|
11
|
+
*/
|
|
12
|
+
plugins?: Array<LocalizationModule | DynamicLocalizationModule>;
|
|
13
|
+
/**
|
|
14
|
+
* The i18next initialization options.
|
|
15
|
+
* @see https://www.i18next.com/overview/configuration-options
|
|
16
|
+
*/
|
|
17
|
+
i18nOptions?: InitOptions;
|
|
18
|
+
}
|
|
19
|
+
export interface CommandLocalizationContext {
|
|
20
|
+
/**
|
|
21
|
+
* The i18next instance.
|
|
22
|
+
*/
|
|
23
|
+
i18n: i18n;
|
|
24
|
+
/**
|
|
25
|
+
* The localization function bound to the current command.
|
|
26
|
+
* @param key The key to translate.
|
|
27
|
+
* @param options The options to pass to the translation function.
|
|
28
|
+
*/
|
|
29
|
+
t: (key: string, options?: Record<string, unknown>) => string;
|
|
30
|
+
/**
|
|
31
|
+
* The locale to use for the command.
|
|
32
|
+
*/
|
|
33
|
+
locale: Locale;
|
|
34
|
+
}
|
|
35
|
+
declare module 'commandkit' {
|
|
36
|
+
interface LocalizationContext extends CommandLocalizationContext {
|
|
37
|
+
}
|
|
38
|
+
interface Context {
|
|
39
|
+
/**
|
|
40
|
+
* Returns the localization context for the current command.
|
|
41
|
+
* @param locale The locale to use. Defaults to the detected locale or the default locale.
|
|
42
|
+
*/
|
|
43
|
+
locale: (locale?: Locale) => LocalizationContext;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export declare class I18nPlugin extends RuntimePlugin<LocalizationPluginOptions> {
|
|
47
|
+
readonly name = "I18nPlugin";
|
|
48
|
+
private i18n;
|
|
49
|
+
private metadata;
|
|
50
|
+
activate(ctx: CommandKitPluginRuntime): Promise<void>;
|
|
51
|
+
private getLoadPath;
|
|
52
|
+
private scanLocaleDirectory;
|
|
53
|
+
performHMR(ctx: CommandKitPluginRuntime, event: CommandKitHMREvent): Promise<void>;
|
|
54
|
+
private loadMetadata;
|
|
55
|
+
private getBackendOptions;
|
|
56
|
+
executeCommand(ctx: CommandKitPluginRuntime, env: CommandKitEnvironment, source: CommandSource, command: PreparedAppCommandExecution): Promise<boolean>;
|
|
57
|
+
prepareCommand(ctx: CommandKitPluginRuntime, command: CommandBuilderLike): Promise<CommandBuilderLike | null>;
|
|
58
|
+
onBeforeRegisterCommands(ctx: CommandKitPluginRuntime, event: PreRegisterCommandsEvent): Promise<void>;
|
|
59
|
+
}
|
package/dist/i18n.js
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.I18nPlugin = void 0;
|
|
7
|
+
const i18next_1 = __importDefault(require("i18next"));
|
|
8
|
+
const commandkit_1 = require("commandkit");
|
|
9
|
+
const i18next_fs_backend_1 = __importDefault(require("i18next-fs-backend"));
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
const fs_1 = require("fs");
|
|
12
|
+
const constants_1 = require("./constants");
|
|
13
|
+
const utils_1 = require("./utils");
|
|
14
|
+
const promises_1 = require("fs/promises");
|
|
15
|
+
commandkit_1.Context.prototype.locale = function (locale) {
|
|
16
|
+
const env = this.config.environment || (0, commandkit_1.useEnvironment)();
|
|
17
|
+
const detectedLocale = locale || this.getLocale();
|
|
18
|
+
const i18n = env.variables.get('i18n:plugin:instance');
|
|
19
|
+
if (!i18n) {
|
|
20
|
+
throw new Error('I18n plugin not found in context environment variables');
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
t: i18n.getFixedT(detectedLocale, this.getCommandIdentifier()),
|
|
24
|
+
locale: detectedLocale,
|
|
25
|
+
i18n,
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
class I18nPlugin extends commandkit_1.RuntimePlugin {
|
|
29
|
+
constructor() {
|
|
30
|
+
super(...arguments);
|
|
31
|
+
this.name = 'I18nPlugin';
|
|
32
|
+
this.metadata = new Map();
|
|
33
|
+
}
|
|
34
|
+
async activate(ctx) {
|
|
35
|
+
this.i18n = i18next_1.default;
|
|
36
|
+
this.i18n.use(i18next_fs_backend_1.default);
|
|
37
|
+
if (this.options.plugins?.length) {
|
|
38
|
+
for (const plugin of this.options.plugins) {
|
|
39
|
+
if (typeof plugin === 'function') {
|
|
40
|
+
const module = await plugin();
|
|
41
|
+
this.i18n.use(module);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.i18n.use(plugin);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Setup better debugging
|
|
49
|
+
const debug = this.options.i18nOptions?.debug || false;
|
|
50
|
+
const { namespaces, languages } = await this.scanLocaleDirectory();
|
|
51
|
+
await this.i18n.init({
|
|
52
|
+
initAsync: false,
|
|
53
|
+
fallbackLng: 'en-US',
|
|
54
|
+
debug,
|
|
55
|
+
ns: namespaces,
|
|
56
|
+
preload: languages,
|
|
57
|
+
load: 'all',
|
|
58
|
+
interpolation: {
|
|
59
|
+
escapeValue: false,
|
|
60
|
+
skipOnVariables: false,
|
|
61
|
+
},
|
|
62
|
+
...this.options.i18nOptions,
|
|
63
|
+
backend: this.getBackendOptions(),
|
|
64
|
+
});
|
|
65
|
+
// Check if we have any languages available
|
|
66
|
+
if (this.i18n.languages.length === 0) {
|
|
67
|
+
commandkit_1.Logger.warn('I18nPlugin: No languages loaded. Using default language only.');
|
|
68
|
+
}
|
|
69
|
+
// Set the default locale for command execution
|
|
70
|
+
ctx.commandkit.config.defaultLocale = (this.i18n.language ||
|
|
71
|
+
'en-US');
|
|
72
|
+
commandkit_1.Logger.info('I18nPlugin has been activated');
|
|
73
|
+
}
|
|
74
|
+
getLoadPath() {
|
|
75
|
+
return (0, path_1.join)((0, commandkit_1.getCurrentDirectory)(), '/app/locales/{{lng}}/{{ns}}.json');
|
|
76
|
+
}
|
|
77
|
+
async scanLocaleDirectory() {
|
|
78
|
+
const endPattern = /{{lng}}(\/|\\){{ns}}.json$/;
|
|
79
|
+
const localesPath = this.getLoadPath();
|
|
80
|
+
const scanDirTarget = localesPath.replace(endPattern, '');
|
|
81
|
+
if (!(0, fs_1.existsSync)(scanDirTarget)) {
|
|
82
|
+
commandkit_1.Logger.warn(`I18nPlugin: No locales directory found at ${scanDirTarget}. Skipping scan.`);
|
|
83
|
+
return { namespaces: [], languages: [] };
|
|
84
|
+
}
|
|
85
|
+
const namespaces = new Set();
|
|
86
|
+
const languages = new Set();
|
|
87
|
+
const files = await (0, promises_1.readdir)(scanDirTarget, { withFileTypes: true });
|
|
88
|
+
for (const file of files) {
|
|
89
|
+
const isValidLocale = constants_1.DISCORD_LOCALES.has(file.name);
|
|
90
|
+
if (file.isDirectory()) {
|
|
91
|
+
if (!isValidLocale) {
|
|
92
|
+
commandkit_1.Logger.warn(`I18nPlugin: Invalid locale directory ${file.name}`);
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
languages.add(file.name);
|
|
96
|
+
const files = await (0, promises_1.readdir)((0, path_1.join)(scanDirTarget, file.name), {
|
|
97
|
+
withFileTypes: true,
|
|
98
|
+
});
|
|
99
|
+
for (const file of files) {
|
|
100
|
+
if (file.isFile()) {
|
|
101
|
+
const ext = (0, path_1.extname)(file.name);
|
|
102
|
+
if (!/\.json$/.test(ext))
|
|
103
|
+
continue;
|
|
104
|
+
const name = (0, path_1.basename)(file.name, ext);
|
|
105
|
+
namespaces.add(name);
|
|
106
|
+
const locale = (0, path_1.basename)(file.parentPath);
|
|
107
|
+
await this.loadMetadata((0, path_1.join)(file.parentPath, file.name), locale, name);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else if (file.isFile()) {
|
|
112
|
+
const ext = (0, path_1.extname)(file.name);
|
|
113
|
+
if (!/\.json$/.test(ext))
|
|
114
|
+
continue;
|
|
115
|
+
const name = (0, path_1.basename)(file.name, ext);
|
|
116
|
+
namespaces.add(name);
|
|
117
|
+
const locale = (0, path_1.basename)(file.parentPath);
|
|
118
|
+
await this.loadMetadata((0, path_1.join)(file.parentPath, file.name), locale, name);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
namespaces: Array.from(namespaces),
|
|
123
|
+
languages: Array.from(languages),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
async performHMR(ctx, event) {
|
|
127
|
+
const targetLocation = event.path;
|
|
128
|
+
const localeDir = (0, path_1.join)(process.cwd(), '/src/app/locales');
|
|
129
|
+
if (!targetLocation.startsWith(localeDir))
|
|
130
|
+
return;
|
|
131
|
+
event.accept();
|
|
132
|
+
event.preventDefault();
|
|
133
|
+
const { languages, namespaces } = await this.scanLocaleDirectory();
|
|
134
|
+
await this.i18n.reloadResources(languages, namespaces);
|
|
135
|
+
await ctx.commandkit.reloadCommands();
|
|
136
|
+
}
|
|
137
|
+
async loadMetadata(filePath, locale, name) {
|
|
138
|
+
try {
|
|
139
|
+
const translationResource = JSON.parse(await (0, promises_1.readFile)(filePath, {
|
|
140
|
+
encoding: 'utf8',
|
|
141
|
+
}));
|
|
142
|
+
const translation = translationResource.default || translationResource;
|
|
143
|
+
if (!translation)
|
|
144
|
+
return;
|
|
145
|
+
const metadata = translation[constants_1.COMMAND_METADATA_KEY];
|
|
146
|
+
if (metadata) {
|
|
147
|
+
this.metadata.set(`${locale}:${name}`, metadata);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch { }
|
|
151
|
+
}
|
|
152
|
+
getBackendOptions() {
|
|
153
|
+
const loadPath = this.getLoadPath();
|
|
154
|
+
return {
|
|
155
|
+
loadPath: function (lng, namespace) {
|
|
156
|
+
const path = loadPath
|
|
157
|
+
.replace(/{{lng}}/g, lng)
|
|
158
|
+
.replace(/{{ns}}/g, namespace);
|
|
159
|
+
return path;
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
async executeCommand(ctx, env, source, command) {
|
|
164
|
+
env.variables.set('i18n:plugin:instance', this.i18n);
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
async prepareCommand(ctx, command) {
|
|
168
|
+
const data = 'toJSON' in command ? command.toJSON() : command;
|
|
169
|
+
for (const locale of constants_1.DISCORD_LOCALES) {
|
|
170
|
+
try {
|
|
171
|
+
const translation = this.metadata.get(`${locale}:${data.name}`);
|
|
172
|
+
if (!translation)
|
|
173
|
+
continue;
|
|
174
|
+
(0, utils_1.applyTranslations)(data, locale, translation);
|
|
175
|
+
}
|
|
176
|
+
catch (e) {
|
|
177
|
+
console.log(e);
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return data;
|
|
182
|
+
}
|
|
183
|
+
async onBeforeRegisterCommands(ctx, event) {
|
|
184
|
+
event.preventDefault();
|
|
185
|
+
(0, fs_1.writeFileSync)(`./.commandkit/cmd.json`, JSON.stringify(event.commands, null, 2));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
exports.I18nPlugin = I18nPlugin;
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pMThuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHNEQUE4QjtBQVE5QiwyQ0Fhb0I7QUFDcEIsNEVBQTJDO0FBQzNDLCtCQUErQztBQUcvQywyQkFBK0M7QUFFL0MsMkNBQW9FO0FBQ3BFLG1DQUE0QztBQUM1QywwQ0FBZ0Q7QUFxRGhELG9CQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFVLE1BQWU7SUFDeEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksSUFBQSwyQkFBYyxHQUFFLENBQUM7SUFDeEQsTUFBTSxjQUFjLEdBQVcsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMxRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBUyxDQUFDO0lBRS9ELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsT0FBTztRQUNMLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5RCxNQUFNLEVBQUUsY0FBYztRQUN0QixJQUFJO0tBQ2dDLENBQUM7QUFDekMsQ0FBQyxDQUFDO0FBRUYsTUFBYSxVQUFXLFNBQVEsMEJBQXdDO0lBQXhFOztRQUNrQixTQUFJLEdBQUcsWUFBWSxDQUFDO1FBRTVCLGFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBc0MsQ0FBQztJQW1PbkUsQ0FBQztJQWpPUSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQTRCO1FBQ2hELElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQU8sQ0FBQztRQUVwQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyw0QkFBUyxDQUFD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
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.i18n = i18n;
|
|
4
|
+
const i18n_1 = require("./i18n");
|
|
5
|
+
function i18n(options) {
|
|
6
|
+
const opt = {
|
|
7
|
+
...options,
|
|
8
|
+
i18nOptions: {
|
|
9
|
+
defaultNS: 'default',
|
|
10
|
+
fallbackLng: 'en-US',
|
|
11
|
+
load: 'currentOnly',
|
|
12
|
+
saveMissing: false,
|
|
13
|
+
partialBundledLanguages: true,
|
|
14
|
+
...options?.i18nOptions,
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
const localization = new i18n_1.I18nPlugin(opt);
|
|
18
|
+
return localization;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxvQkFnQkM7QUFsQkQsaUNBQStEO0FBRS9ELFNBQWdCLElBQUksQ0FBQyxPQUFtQztJQUN0RCxNQUFNLEdBQUcsR0FBRztRQUNWLEdBQUcsT0FBTztRQUNWLFdBQVcsRUFBRTtZQUNYLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFdBQVcsRUFBRSxPQUFPO1lBQ3BCLElBQUksRUFBRSxhQUFhO1lBQ25CLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLHVCQUF1QixFQUFFLElBQUk7WUFDN0IsR0FBRyxPQUFPLEVBQUUsV0FBVztTQUN4QjtLQUMyQixDQUFDO0lBRS9CLE1BQU0sWUFBWSxHQUFHLElBQUksaUJBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV6QyxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDIn0=
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { COMMAND_METADATA_KEY } from './constants';
|
|
2
|
+
export interface CommandTranslationMetadata {
|
|
3
|
+
name?: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
options?: (Record<'name' | 'description', string> | Record<string, Record<'name' | 'description', string>>)[];
|
|
6
|
+
}
|
|
7
|
+
export interface CommandTranslation {
|
|
8
|
+
[COMMAND_METADATA_KEY]: CommandTranslationMetadata;
|
|
9
|
+
translations: Record<string, any>;
|
|
10
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const constants_1 = require("./constants");
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBbUQifQ==
|
package/dist/utils.d.ts
ADDED
package/dist/utils.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyTranslations = applyTranslations;
|
|
4
|
+
function applyTranslations(command, locale, translation) {
|
|
5
|
+
const json = 'toJSON' in command ? command.toJSON() : command;
|
|
6
|
+
const { name, description, options } = translation;
|
|
7
|
+
if (name) {
|
|
8
|
+
json.name ?? (json.name = name);
|
|
9
|
+
json.name_localizations ?? (json.name_localizations = {});
|
|
10
|
+
json.name_localizations[locale] = name;
|
|
11
|
+
}
|
|
12
|
+
if (description) {
|
|
13
|
+
json.description ?? (json.description = description);
|
|
14
|
+
json.description_localizations ?? (json.description_localizations = {});
|
|
15
|
+
json.description_localizations[locale] = description;
|
|
16
|
+
}
|
|
17
|
+
if (options) {
|
|
18
|
+
json.options ?? (json.options = []);
|
|
19
|
+
const applyToOptions = (option, optionTranslation) => {
|
|
20
|
+
const { name, description } = optionTranslation;
|
|
21
|
+
if (name) {
|
|
22
|
+
option.name ?? (option.name = name);
|
|
23
|
+
option.name_localizations ?? (option.name_localizations = {});
|
|
24
|
+
option.name_localizations[locale] = name;
|
|
25
|
+
}
|
|
26
|
+
if (description) {
|
|
27
|
+
option.description ?? (option.description = description);
|
|
28
|
+
option.description_localizations ?? (option.description_localizations = {});
|
|
29
|
+
option.description_localizations[locale] = description;
|
|
30
|
+
}
|
|
31
|
+
if (option.options) {
|
|
32
|
+
for (let i = 0; i < option.options.length; i++) {
|
|
33
|
+
const subOption = option.options[i];
|
|
34
|
+
const subOptionTranslation = optionTranslation.options?.[i];
|
|
35
|
+
if (subOptionTranslation) {
|
|
36
|
+
applyToOptions(subOption, subOptionTranslation);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
for (let i = 0; i < json.options.length; i++) {
|
|
42
|
+
const cmdOption = json.options[i];
|
|
43
|
+
const optionTranslation = options[i];
|
|
44
|
+
if (optionTranslation) {
|
|
45
|
+
if (Array.isArray(optionTranslation)) {
|
|
46
|
+
for (const subOptionTranslation of optionTranslation) {
|
|
47
|
+
applyToOptions(cmdOption, subOptionTranslation);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
applyToOptions(cmdOption, optionTranslation);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return json;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSw4Q0FtRUM7QUFuRUQsU0FBZ0IsaUJBQWlCLENBQy9CLE9BQTJCLEVBQzNCLE1BQWMsRUFDZCxXQUF1QztJQUV2QyxNQUFNLElBQUksR0FBRyxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUM5RCxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUM7SUFFbkQsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULElBQUksQ0FBQyxJQUFJLEtBQVQsSUFBSSxDQUFDLElBQUksR0FBSyxJQUFJLEVBQUM7UUFDbkIsSUFBSSxDQUFDLGtCQUFrQixLQUF2QixJQUFJLENBQUMsa0JBQWtCLEdBQUssRUFBRSxFQUFDO1FBQy9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDekMsQ0FBQztJQUVELElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFdBQVcsS0FBaEIsSUFBSSxDQUFDLFdBQVcsR0FBSyxXQUFXLEVBQUM7UUFDakMsSUFBSSxDQUFDLHlCQUF5QixLQUE5QixJQUFJLENBQUMseUJBQXlCLEdBQUssRUFBRSxFQUFDO1FBQ3RDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixJQUFJLENBQUMsT0FBTyxLQUFaLElBQUksQ0FBQyxPQUFPLEdBQUssRUFBRSxFQUFDO1FBQ3BCLE1BQU0sY0FBYyxHQUFHLENBQ3JCLE1BQTJCLEVBQzNCLGlCQUFzQyxFQUN0QyxFQUFFO1lBQ0YsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztZQUNoRCxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULE1BQU0sQ0FBQyxJQUFJLEtBQVgsTUFBTSxDQUFDLElBQUksR0FBSyxJQUFJLEVBQUM7Z0JBQ3JCLE1BQU0sQ0FBQyxrQkFBa0IsS0FBekIsTUFBTSxDQUFDLGtCQUFrQixHQUFLLEVBQUUsRUFBQztnQkFDakMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztZQUMzQyxDQUFDO1lBRUQsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLFdBQVcsS0FBbEIsTUFBTSxDQUFDLFdBQVcsR0FBSyxXQUFXLEVBQUM7Z0JBQ25DLE1BQU0sQ0FBQyx5QkFBeUIsS0FBaEMsTUFBTSxDQUFDLHlCQUF5QixHQUFLLEVBQUUsRUFBQztnQkFDeEMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQztZQUN6RCxDQUFDO1lBRUQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUMvQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM1RCxJQUFJLG9CQUFvQixFQUFFLENBQUM7d0JBQ3pCLGNBQWMsQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztvQkFDbEQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFckMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO2dCQUN0QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO29CQUNyQyxLQUFLLE1BQU0sb0JBQW9CLElBQUksaUJBQWlCLEVBQUUsQ0FBQzt3QkFDckQsY0FBYyxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO29CQUNsRCxDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixjQUFjLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUM7Z0JBQy9DLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMifQ==
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@commandkit/i18n",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CommandKit plugin that adds command localizations backed by i18next",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git+https://github.com/underctrl-io/commandkit.git"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"commandkit",
|
|
16
|
+
"redis",
|
|
17
|
+
"cache"
|
|
18
|
+
],
|
|
19
|
+
"author": "twilight <hello@twlite.dev>",
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"bugs": {
|
|
22
|
+
"url": "https://github.com/underctrl-io/commandkit/issues"
|
|
23
|
+
},
|
|
24
|
+
"homepage": "https://github.com/underctrl-io/commandkit#readme",
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"i18next": "^24.2.3",
|
|
27
|
+
"i18next-fs-backend": "^2.6.0"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"discord.js": "14",
|
|
31
|
+
"typescript": "^5.7.3",
|
|
32
|
+
"commandkit": "0.1.11",
|
|
33
|
+
"tsconfig": "0.0.0"
|
|
34
|
+
},
|
|
35
|
+
"scripts": {
|
|
36
|
+
"lint": "tsc --noEmit",
|
|
37
|
+
"build": "tsc"
|
|
38
|
+
}
|
|
39
|
+
}
|