intl-template 1.0.0-alpha.2 → 1.0.0-alpha.3
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 +18 -0
- package/dist/intl.js +44 -1
- package/dist/intl.js.map +1 -1
- package/package.json +1 -1
- package/src/intl.js +40 -0
- 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);
|
|
@@ -28,8 +37,17 @@ export class Translation {
|
|
|
28
37
|
* @throws {Error} - If the length of the template parts does not match the length of the template.
|
|
29
38
|
*/
|
|
30
39
|
translate: (locale: string, strings: TemplateStringsArray | string, ...parts: any[]) => Runes;
|
|
40
|
+
/**
|
|
41
|
+
* Apply template by regex string
|
|
42
|
+
* @param {*} locale
|
|
43
|
+
* @param {*} regexString
|
|
44
|
+
* @param {*} matchString
|
|
45
|
+
* @returns {Runes}
|
|
46
|
+
*/
|
|
47
|
+
translateByRegEx: (locale: any, regexString: any, matchString: any) => Runes;
|
|
31
48
|
#private;
|
|
32
49
|
}
|
|
33
50
|
export default translation;
|
|
34
51
|
export const l10n: (strings: string | TemplateStringsArray, ...parts: any[]) => Runes;
|
|
52
|
+
export const l10nRegExp: (regexString: any, matchString: any) => Runes;
|
|
35
53
|
declare const translation: Translation;
|
package/dist/intl.js
CHANGED
|
@@ -18,7 +18,16 @@ 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
|
+
};
|
|
30
|
+
var _a, _b;
|
|
22
31
|
var _Translation_templates;
|
|
23
32
|
var Runes = /** @class */ (function (_super) {
|
|
24
33
|
__extends(Runes, _super);
|
|
@@ -134,6 +143,17 @@ var Translation = /** @class */ (function () {
|
|
|
134
143
|
}, new Runes());
|
|
135
144
|
return runes;
|
|
136
145
|
};
|
|
146
|
+
/**
|
|
147
|
+
* Apply template by regex string
|
|
148
|
+
* @param {*} locale
|
|
149
|
+
* @param {*} regexString
|
|
150
|
+
* @param {*} matchString
|
|
151
|
+
* @returns {Runes}
|
|
152
|
+
*/
|
|
153
|
+
this.translateByRegEx = function (locale, regexString, matchString) {
|
|
154
|
+
var _a = regexTemplate(regexString, matchString), parts = _a.parts, strings = _a.strings;
|
|
155
|
+
return _this.translate.apply(_this, __spreadArray([locale, strings], parts, false));
|
|
156
|
+
};
|
|
137
157
|
}
|
|
138
158
|
Object.defineProperty(Translation.prototype, "templates", {
|
|
139
159
|
get: function () {
|
|
@@ -157,4 +177,27 @@ _Translation_templates = new WeakMap();
|
|
|
157
177
|
var translation = new Translation();
|
|
158
178
|
export default translation;
|
|
159
179
|
export var l10n = translation.translate.bind(null, (_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.navigator) === null || _a === void 0 ? void 0 : _a.language);
|
|
180
|
+
export var l10nRegExp = translation.translateByRegEx.bind(null, (_b = globalThis === null || globalThis === void 0 ? void 0 : globalThis.navigator) === null || _b === void 0 ? void 0 : _b.language);
|
|
181
|
+
/**
|
|
182
|
+
* @param {string} regexString
|
|
183
|
+
* @param {string} matchString
|
|
184
|
+
* @returns {{ strings: Array<string>, parts: Array<string> }}
|
|
185
|
+
*/
|
|
186
|
+
export function regexTemplate(regexString, matchString) {
|
|
187
|
+
var parts = [];
|
|
188
|
+
var strings = [];
|
|
189
|
+
var matches = new RegExp(regexString).exec(matchString);
|
|
190
|
+
if (!matches) {
|
|
191
|
+
return { parts: [], strings: strings };
|
|
192
|
+
}
|
|
193
|
+
parts = matches.slice(1);
|
|
194
|
+
regexString
|
|
195
|
+
.split(/(\([^)]+\))/) // split by regex group
|
|
196
|
+
.forEach(function (part) {
|
|
197
|
+
if (!part.startsWith("(") || !part.endsWith(")")) {
|
|
198
|
+
strings.push(part);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
return { strings: strings, parts: parts };
|
|
202
|
+
}
|
|
160
203
|
//# 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
|
@@ -121,6 +121,18 @@ export class Translation {
|
|
|
121
121
|
|
|
122
122
|
return runes
|
|
123
123
|
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Apply template by regex string
|
|
127
|
+
* @param {*} locale
|
|
128
|
+
* @param {*} regexString
|
|
129
|
+
* @param {*} matchString
|
|
130
|
+
* @returns {Runes}
|
|
131
|
+
*/
|
|
132
|
+
translateByRegEx = (locale, regexString, matchString) => {
|
|
133
|
+
const { parts, strings } = regexTemplate(regexString, matchString)
|
|
134
|
+
return this.translate(locale, strings, ...parts);
|
|
135
|
+
}
|
|
124
136
|
}
|
|
125
137
|
|
|
126
138
|
const translation = new Translation()
|
|
@@ -128,3 +140,31 @@ const translation = new Translation()
|
|
|
128
140
|
export default translation
|
|
129
141
|
|
|
130
142
|
export const l10n = translation.translate.bind(null, globalThis?.navigator?.language);
|
|
143
|
+
|
|
144
|
+
export const l10nRegExp = translation.translateByRegEx.bind(null, globalThis?.navigator?.language);
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @param {string} regexString
|
|
148
|
+
* @param {string} matchString
|
|
149
|
+
* @returns {{ strings: Array<string>, parts: Array<string> }}
|
|
150
|
+
*/
|
|
151
|
+
export function regexTemplate(regexString, matchString) {
|
|
152
|
+
let parts = [];
|
|
153
|
+
const strings = [];
|
|
154
|
+
|
|
155
|
+
const matches = new RegExp(regexString).exec(matchString)
|
|
156
|
+
if (!matches) {
|
|
157
|
+
return { parts: [], strings }
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
parts = matches.slice(1)
|
|
161
|
+
regexString
|
|
162
|
+
.split(/(\([^)]+\))/) // split by regex group
|
|
163
|
+
.forEach(part => {
|
|
164
|
+
if (!part.startsWith("(") || !part.endsWith(")")) {
|
|
165
|
+
strings.push(part)
|
|
166
|
+
}
|
|
167
|
+
})
|
|
168
|
+
|
|
169
|
+
return { strings, parts };
|
|
170
|
+
}
|
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(),
|