@yaebal/i18n 0.0.1 → 0.0.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/lib/index.d.ts.map +1 -1
- package/lib/index.js +11 -5
- package/lib/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +13 -6
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAErE;;;;GAIG;AACH,MAAM,WAAW,UAAU;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACd;AAED,6EAA6E;AAC7E,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AAE5C;;;GAGG;AACH,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE7C,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;AAE5E,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC5B,CAAC,EAAE,GAAG,CAAC;IACP,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM;IAC5C,aAAa,EAAE,CAAC,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACzB,kEAAkE;IAClE,OAAO,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACjC,mEAAmE;IACnE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAErE;;;;GAIG;AACH,MAAM,WAAW,UAAU;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACd;AAED,6EAA6E;AAC7E,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AAE5C;;;GAGG;AACH,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE7C,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;AAE5E,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC5B,CAAC,EAAE,GAAG,CAAC;IACP,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM;IAC5C,aAAa,EAAE,CAAC,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACzB,kEAAkE;IAClE,OAAO,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACjC,mEAAmE;IACnE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAgD7F"}
|
package/lib/index.js
CHANGED
|
@@ -10,10 +10,10 @@ export function i18n(options) {
|
|
|
10
10
|
const getKey = options.getKey ?? ((ctx) => ctx.chat?.id?.toString());
|
|
11
11
|
return (composer) => composer.derive(async (ctx) => {
|
|
12
12
|
const key = getKey(ctx);
|
|
13
|
-
let
|
|
13
|
+
let currentLocale = (key !== undefined ? await storage.get(key) : undefined) ?? defaultLocale;
|
|
14
14
|
const t = (k, params) => {
|
|
15
15
|
const def = locales[defaultLocale] ?? {};
|
|
16
|
-
const dict = locales[
|
|
16
|
+
const dict = locales[currentLocale] ?? def;
|
|
17
17
|
const raw = dict[k] ?? def[k] ?? k;
|
|
18
18
|
let s;
|
|
19
19
|
if (typeof raw === "string") {
|
|
@@ -21,7 +21,7 @@ export function i18n(options) {
|
|
|
21
21
|
}
|
|
22
22
|
else {
|
|
23
23
|
const n = params?.n;
|
|
24
|
-
const category = typeof n === "number" ? new Intl.PluralRules(
|
|
24
|
+
const category = typeof n === "number" ? new Intl.PluralRules(currentLocale).select(n) : "other";
|
|
25
25
|
s = raw[category] ?? raw.other;
|
|
26
26
|
}
|
|
27
27
|
if (params) {
|
|
@@ -31,11 +31,17 @@ export function i18n(options) {
|
|
|
31
31
|
return s;
|
|
32
32
|
};
|
|
33
33
|
const changeLanguage = async (next) => {
|
|
34
|
-
|
|
34
|
+
currentLocale = next;
|
|
35
35
|
if (key !== undefined)
|
|
36
36
|
await storage.set(key, next);
|
|
37
37
|
};
|
|
38
|
-
return {
|
|
38
|
+
return {
|
|
39
|
+
t,
|
|
40
|
+
get locale() {
|
|
41
|
+
return currentLocale;
|
|
42
|
+
},
|
|
43
|
+
changeLanguage,
|
|
44
|
+
};
|
|
39
45
|
});
|
|
40
46
|
}
|
|
41
47
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAuB,MAAM,iBAAiB,CAAC;AA2CrE;;;;GAIG;AACH,MAAM,UAAU,IAAI,CAAmB,OAAuB;IAC7D,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAE3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,aAAa,EAAU,CAAC;IAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE9E,OAAO,CAAC,QAAQ,EAAE,EAAE,CACnB,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAyB,EAAE;QACpD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAuB,MAAM,iBAAiB,CAAC;AA2CrE;;;;GAIG;AACH,MAAM,UAAU,IAAI,CAAmB,OAAuB;IAC7D,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAE3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,aAAa,EAAU,CAAC;IAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE9E,OAAO,CAAC,QAAQ,EAAE,EAAE,CACnB,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAyB,EAAE;QACpD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,aAAa,GAChB,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC;QAE3E,MAAM,CAAC,GAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YAC5B,MAAM,GAAG,GAAS,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAS,OAAO,CAAC,aAAkB,CAAC,IAAI,GAAG,CAAC;YACtD,MAAM,GAAG,GAAc,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAE9C,IAAI,CAAS,CAAC;YACd,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC7B,CAAC,GAAG,GAAG,CAAC;YACT,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;gBACpB,MAAM,QAAQ,GACb,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBAEjF,CAAC,GAAG,GAAG,CAAC,QAA4B,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC;YACpD,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACZ,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;oBAAE,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACxF,CAAC;YAED,OAAO,CAAC,CAAC;QACV,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,KAAK,EAAE,IAAY,EAAiB,EAAE;YAC5D,aAAa,GAAG,IAAI,CAAC;YACrB,IAAI,GAAG,KAAK,SAAS;gBAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC;QAEF,OAAO;YACN,CAAC;YACD,IAAI,MAAM;gBACT,OAAO,aAAa,CAAC;YACtB,CAAC;YACD,cAAc;SACd,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yaebal/i18n",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "yaebal i18n plugin — per-chat locale, ctx.t / ctx.changeLanguage (powers useTranslation).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"src"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@yaebal/core": "0.0.
|
|
19
|
+
"@yaebal/core": "0.0.2",
|
|
20
20
|
"@yaebal/session": "0.0.1"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
package/src/index.ts
CHANGED
|
@@ -56,12 +56,12 @@ export function i18n<L extends string>(options: I18nOptions<L>): Plugin<Context,
|
|
|
56
56
|
return (composer) =>
|
|
57
57
|
composer.derive(async (ctx): Promise<I18nControls> => {
|
|
58
58
|
const key = getKey(ctx);
|
|
59
|
-
let
|
|
59
|
+
let currentLocale: string =
|
|
60
60
|
(key !== undefined ? await storage.get(key) : undefined) ?? defaultLocale;
|
|
61
61
|
|
|
62
62
|
const t: TFn = (k, params) => {
|
|
63
63
|
const def: Dict = locales[defaultLocale] ?? {};
|
|
64
|
-
const dict: Dict = locales[
|
|
64
|
+
const dict: Dict = locales[currentLocale as L] ?? def;
|
|
65
65
|
const raw: DictValue = dict[k] ?? def[k] ?? k;
|
|
66
66
|
|
|
67
67
|
let s: string;
|
|
@@ -69,7 +69,8 @@ export function i18n<L extends string>(options: I18nOptions<L>): Plugin<Context,
|
|
|
69
69
|
s = raw;
|
|
70
70
|
} else {
|
|
71
71
|
const n = params?.n;
|
|
72
|
-
const category =
|
|
72
|
+
const category =
|
|
73
|
+
typeof n === "number" ? new Intl.PluralRules(currentLocale).select(n) : "other";
|
|
73
74
|
|
|
74
75
|
s = raw[category as keyof PluralDict] ?? raw.other;
|
|
75
76
|
}
|
|
@@ -77,15 +78,21 @@ export function i18n<L extends string>(options: I18nOptions<L>): Plugin<Context,
|
|
|
77
78
|
if (params) {
|
|
78
79
|
for (const [pk, pv] of Object.entries(params)) s = s.replaceAll(`{${pk}}`, String(pv));
|
|
79
80
|
}
|
|
80
|
-
|
|
81
|
+
|
|
81
82
|
return s;
|
|
82
83
|
};
|
|
83
84
|
|
|
84
85
|
const changeLanguage = async (next: string): Promise<void> => {
|
|
85
|
-
|
|
86
|
+
currentLocale = next;
|
|
86
87
|
if (key !== undefined) await storage.set(key, next);
|
|
87
88
|
};
|
|
88
89
|
|
|
89
|
-
return {
|
|
90
|
+
return {
|
|
91
|
+
t,
|
|
92
|
+
get locale() {
|
|
93
|
+
return currentLocale;
|
|
94
|
+
},
|
|
95
|
+
changeLanguage,
|
|
96
|
+
};
|
|
90
97
|
});
|
|
91
98
|
}
|