intl-template 1.0.0-alpha.2 → 1.0.0-alpha.4
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/dist/intl.d.ts +23 -1
- package/dist/intl.js +59 -3
- package/dist/intl.js.map +1 -1
- package/package.json +1 -1
- package/src/intl.js +57 -2
- package/src/intl.test.js +22 -1
package/dist/intl.d.ts
CHANGED
|
@@ -7,6 +7,15 @@ export function parseTemplate(templateString: string): {
|
|
|
7
7
|
template: string[];
|
|
8
8
|
order: number[];
|
|
9
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* @param {string} regexString
|
|
12
|
+
* @param {string} matchString
|
|
13
|
+
* @returns {{ strings: Array<string>, parts: Array<string> }}
|
|
14
|
+
*/
|
|
15
|
+
export function regexTemplate(regexString: string, matchString: string): {
|
|
16
|
+
strings: Array<string>;
|
|
17
|
+
parts: Array<string>;
|
|
18
|
+
};
|
|
10
19
|
export class Runes extends Array<any> {
|
|
11
20
|
constructor(arrayLength?: number | undefined);
|
|
12
21
|
constructor(arrayLength: number);
|
|
@@ -16,6 +25,8 @@ export class Runes extends Array<any> {
|
|
|
16
25
|
* Represents a Translation object that handles string translation based on locale and templates.
|
|
17
26
|
*/
|
|
18
27
|
export class Translation {
|
|
28
|
+
constructor(locale: any);
|
|
29
|
+
defaultLocale: any;
|
|
19
30
|
set templates(value: ProxyConstructor);
|
|
20
31
|
get templates(): ProxyConstructor;
|
|
21
32
|
/**
|
|
@@ -28,8 +39,19 @@ export class Translation {
|
|
|
28
39
|
* @throws {Error} - If the length of the template parts does not match the length of the template.
|
|
29
40
|
*/
|
|
30
41
|
translate: (locale: string, strings: TemplateStringsArray | string, ...parts: any[]) => Runes;
|
|
42
|
+
/**
|
|
43
|
+
* Use regex extract template and vars
|
|
44
|
+
* @param {*} locale
|
|
45
|
+
* @param {*} regexString
|
|
46
|
+
* @param {*} matchString
|
|
47
|
+
* @returns {Runes}
|
|
48
|
+
*/
|
|
49
|
+
translateByRegEx: (locale: any, regexString: any, matchString: any) => Runes;
|
|
50
|
+
l10n: (strings: any, ...parts: any[]) => Runes;
|
|
51
|
+
l10nRegExp: (regexString: any, matchString: any) => Runes;
|
|
31
52
|
#private;
|
|
32
53
|
}
|
|
33
54
|
export default translation;
|
|
34
|
-
export
|
|
55
|
+
export function l10n(strings: any, ...parts: any[]): Runes;
|
|
56
|
+
export function l10nRegExp(regexString: any, matchString: any): Runes;
|
|
35
57
|
declare const translation: Translation;
|
package/dist/intl.js
CHANGED
|
@@ -18,7 +18,15 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
18
18
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
19
19
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
20
20
|
};
|
|
21
|
-
var
|
|
21
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
22
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
23
|
+
if (ar || !(i in from)) {
|
|
24
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
25
|
+
ar[i] = from[i];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
29
|
+
};
|
|
22
30
|
var _Translation_templates;
|
|
23
31
|
var Runes = /** @class */ (function (_super) {
|
|
24
32
|
__extends(Runes, _super);
|
|
@@ -60,7 +68,7 @@ export function parseTemplate(templateString) {
|
|
|
60
68
|
* Represents a Translation object that handles string translation based on locale and templates.
|
|
61
69
|
*/
|
|
62
70
|
var Translation = /** @class */ (function () {
|
|
63
|
-
function Translation() {
|
|
71
|
+
function Translation(locale) {
|
|
64
72
|
var _this = this;
|
|
65
73
|
/**
|
|
66
74
|
* Templates object that stores the translation templates for each locale.
|
|
@@ -107,6 +115,9 @@ var Translation = /** @class */ (function () {
|
|
|
107
115
|
}
|
|
108
116
|
var key = strings.join("{}");
|
|
109
117
|
var translation = (_a = __classPrivateFieldGet(_this, _Translation_templates, "f")) === null || _a === void 0 ? void 0 : _a[locale];
|
|
118
|
+
if (!translation) {
|
|
119
|
+
translation = __classPrivateFieldGet(_this, _Translation_templates, "f")[_this.defaultLocale];
|
|
120
|
+
}
|
|
110
121
|
var _d = (translation === null || translation === void 0 ? void 0 : translation[key]) || {}, template = _d.template, order = _d.order;
|
|
111
122
|
if (!template) {
|
|
112
123
|
if (((_c = (_b = import.meta) === null || _b === void 0 ? void 0 : _b.env) === null || _c === void 0 ? void 0 : _c.MODE) === "development") {
|
|
@@ -134,6 +145,28 @@ var Translation = /** @class */ (function () {
|
|
|
134
145
|
}, new Runes());
|
|
135
146
|
return runes;
|
|
136
147
|
};
|
|
148
|
+
/**
|
|
149
|
+
* Use regex extract template and vars
|
|
150
|
+
* @param {*} locale
|
|
151
|
+
* @param {*} regexString
|
|
152
|
+
* @param {*} matchString
|
|
153
|
+
* @returns {Runes}
|
|
154
|
+
*/
|
|
155
|
+
this.translateByRegEx = function (locale, regexString, matchString) {
|
|
156
|
+
var _a = regexTemplate(regexString, matchString), parts = _a.parts, strings = _a.strings;
|
|
157
|
+
return _this.translate.apply(_this, __spreadArray([locale, strings], parts, false));
|
|
158
|
+
};
|
|
159
|
+
this.l10n = function (strings) {
|
|
160
|
+
var parts = [];
|
|
161
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
162
|
+
parts[_i - 1] = arguments[_i];
|
|
163
|
+
}
|
|
164
|
+
return translation.translate.apply(translation, __spreadArray([_this.defaultLocale, strings], parts, false));
|
|
165
|
+
};
|
|
166
|
+
this.l10nRegExp = function (regexString, matchString) {
|
|
167
|
+
return translation.translateByRegEx(_this.defaultLocale, regexString, matchString);
|
|
168
|
+
};
|
|
169
|
+
this.defaultLocale = locale;
|
|
137
170
|
}
|
|
138
171
|
Object.defineProperty(Translation.prototype, "templates", {
|
|
139
172
|
get: function () {
|
|
@@ -156,5 +189,28 @@ export { Translation };
|
|
|
156
189
|
_Translation_templates = new WeakMap();
|
|
157
190
|
var translation = new Translation();
|
|
158
191
|
export default translation;
|
|
159
|
-
export var l10n = translation.
|
|
192
|
+
export var l10n = translation.l10n;
|
|
193
|
+
export var l10nRegExp = translation.l10nRegExp;
|
|
194
|
+
/**
|
|
195
|
+
* @param {string} regexString
|
|
196
|
+
* @param {string} matchString
|
|
197
|
+
* @returns {{ strings: Array<string>, parts: Array<string> }}
|
|
198
|
+
*/
|
|
199
|
+
export function regexTemplate(regexString, matchString) {
|
|
200
|
+
var parts = [];
|
|
201
|
+
var strings = [];
|
|
202
|
+
var matches = new RegExp(regexString).exec(matchString);
|
|
203
|
+
if (!matches) {
|
|
204
|
+
return { parts: [], strings: strings };
|
|
205
|
+
}
|
|
206
|
+
parts = matches.slice(1);
|
|
207
|
+
regexString
|
|
208
|
+
.split(/(\([^)]+\))/) // split by regex group
|
|
209
|
+
.forEach(function (part) {
|
|
210
|
+
if (!part.startsWith("(") || !part.endsWith(")")) {
|
|
211
|
+
strings.push(part);
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
return { strings: strings, parts: parts };
|
|
215
|
+
}
|
|
160
216
|
//# sourceMappingURL=intl.js.map
|
package/dist/intl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intl.js","sourceRoot":"","sources":["../src/intl.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"intl.js","sourceRoot":"","sources":["../src/intl.js"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/intl.js
CHANGED
|
@@ -33,6 +33,10 @@ export function parseTemplate(templateString) {
|
|
|
33
33
|
* Represents a Translation object that handles string translation based on locale and templates.
|
|
34
34
|
*/
|
|
35
35
|
export class Translation {
|
|
36
|
+
constructor(locale) {
|
|
37
|
+
this.defaultLocale = locale
|
|
38
|
+
}
|
|
39
|
+
|
|
36
40
|
/**
|
|
37
41
|
* Templates object that stores the translation templates for each locale.
|
|
38
42
|
* @type {Proxy}
|
|
@@ -89,7 +93,10 @@ export class Translation {
|
|
|
89
93
|
}
|
|
90
94
|
|
|
91
95
|
const key = strings.join("{}")
|
|
92
|
-
|
|
96
|
+
let translation = this.#templates?.[locale]
|
|
97
|
+
if (!translation) {
|
|
98
|
+
translation = this.#templates[this.defaultLocale]
|
|
99
|
+
}
|
|
93
100
|
let { template, order } = translation?.[key] || {}
|
|
94
101
|
if (!template) {
|
|
95
102
|
if (import.meta?.env?.MODE === "development") {
|
|
@@ -121,10 +128,58 @@ export class Translation {
|
|
|
121
128
|
|
|
122
129
|
return runes
|
|
123
130
|
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Use regex extract template and vars
|
|
134
|
+
* @param {*} locale
|
|
135
|
+
* @param {*} regexString
|
|
136
|
+
* @param {*} matchString
|
|
137
|
+
* @returns {Runes}
|
|
138
|
+
*/
|
|
139
|
+
translateByRegEx = (locale, regexString, matchString) => {
|
|
140
|
+
const { parts, strings } = regexTemplate(regexString, matchString)
|
|
141
|
+
return this.translate(locale, strings, ...parts);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
l10n = (strings, ...parts) => {
|
|
145
|
+
return translation.translate(this.defaultLocale, strings, ...parts)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
l10nRegExp = (regexString, matchString) => {
|
|
149
|
+
return translation.translateByRegEx(this.defaultLocale, regexString, matchString)
|
|
150
|
+
}
|
|
124
151
|
}
|
|
125
152
|
|
|
126
153
|
const translation = new Translation()
|
|
127
154
|
|
|
128
155
|
export default translation
|
|
129
156
|
|
|
130
|
-
export const l10n = translation.
|
|
157
|
+
export const l10n = translation.l10n
|
|
158
|
+
|
|
159
|
+
export const l10nRegExp = translation.l10nRegExp
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* @param {string} regexString
|
|
163
|
+
* @param {string} matchString
|
|
164
|
+
* @returns {{ strings: Array<string>, parts: Array<string> }}
|
|
165
|
+
*/
|
|
166
|
+
export function regexTemplate(regexString, matchString) {
|
|
167
|
+
let parts = [];
|
|
168
|
+
const strings = [];
|
|
169
|
+
|
|
170
|
+
const matches = new RegExp(regexString).exec(matchString)
|
|
171
|
+
if (!matches) {
|
|
172
|
+
return { parts: [], strings }
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
parts = matches.slice(1)
|
|
176
|
+
regexString
|
|
177
|
+
.split(/(\([^)]+\))/) // split by regex group
|
|
178
|
+
.forEach(part => {
|
|
179
|
+
if (!part.startsWith("(") || !part.endsWith(")")) {
|
|
180
|
+
strings.push(part)
|
|
181
|
+
}
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
return { strings, parts };
|
|
185
|
+
}
|
package/src/intl.test.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import assert from "node:assert"
|
|
2
2
|
import test from "node:test"
|
|
3
|
-
import { Translation, Runes } from "./intl.js"
|
|
3
|
+
import { Translation, Runes, regexTemplate } from "./intl.js"
|
|
4
4
|
|
|
5
5
|
test("template", async (t) => {
|
|
6
6
|
await t.test("multiple locale template parse", () => {
|
|
@@ -124,6 +124,27 @@ test("translation.translate", async (t) => {
|
|
|
124
124
|
})
|
|
125
125
|
})
|
|
126
126
|
|
|
127
|
+
test("translation.regexTranslate", async (t) => {
|
|
128
|
+
await t.test("regexTranslate", () => {
|
|
129
|
+
const translation = new Translation("zh-CN")
|
|
130
|
+
translation.templates["zh-CN"] = {
|
|
131
|
+
"abc {} def {}": "甲乙丙 {1} {0} 丁戊卯",
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
assert.equal(
|
|
135
|
+
translation.regexTranslate("zh-CN", "abc (\\d+) def (\\d+)", "abc 123 def 345").toString(),
|
|
136
|
+
"甲乙丙 345 123 丁戊卯"
|
|
137
|
+
)
|
|
138
|
+
})
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
test("regexTemplate", async (t) => {
|
|
142
|
+
assert.deepEqual(
|
|
143
|
+
regexTemplate("(\\d+) def (\\d+)", "123 def 345"),
|
|
144
|
+
{ strings: ["", " def ", ""], parts: ['123', '345'] }
|
|
145
|
+
)
|
|
146
|
+
})
|
|
147
|
+
|
|
127
148
|
test("Runes", async (t) => {
|
|
128
149
|
assert.equal(
|
|
129
150
|
new Runes('a', ' b ', 1, 2).toString(),
|