@modern-js/plugin-i18n 2.0.0-beta.2 → 2.0.0-beta.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/CHANGELOG.md +58 -0
- package/dist/js/modern/index.js +16 -13
- package/dist/js/modern/language-detector.js +10 -16
- package/dist/js/modern/utils/index.js +11 -5
- package/dist/js/node/index.js +37 -21
- package/dist/js/node/language-detector.js +28 -21
- package/dist/js/node/utils/index.js +31 -12
- package/dist/js/treeshaking/index.js +103 -75
- package/dist/js/treeshaking/language-detector.js +48 -35
- package/dist/js/treeshaking/utils/index.js +14 -13
- package/dist/types/index.d.ts +2 -0
- package/dist/types/language-detector.d.ts +1 -0
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,63 @@
|
|
|
1
1
|
# @modern-js/plugin-i18n
|
|
2
2
|
|
|
3
|
+
## 2.0.0-beta.4
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- dda38c9c3e: chore: v2
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [7879e8f]
|
|
12
|
+
- Updated dependencies [6aca875]
|
|
13
|
+
- Updated dependencies [2e6031955e]
|
|
14
|
+
- Updated dependencies [7b7d12c]
|
|
15
|
+
- Updated dependencies [92f0eade39]
|
|
16
|
+
- Updated dependencies [edd1cfb1af]
|
|
17
|
+
- Updated dependencies [cc971eabfc]
|
|
18
|
+
- Updated dependencies [5b9049f2e9]
|
|
19
|
+
- Updated dependencies [92004d1906]
|
|
20
|
+
- Updated dependencies [b8bbe036c7]
|
|
21
|
+
- Updated dependencies [d5a31df781]
|
|
22
|
+
- Updated dependencies [dda38c9c3e]
|
|
23
|
+
- Updated dependencies [3bbea92b2a]
|
|
24
|
+
- Updated dependencies [b710adb843]
|
|
25
|
+
- Updated dependencies [ea7cf06]
|
|
26
|
+
- Updated dependencies [bbe4c4a]
|
|
27
|
+
- Updated dependencies [e4558a0]
|
|
28
|
+
- Updated dependencies [abf3421a75]
|
|
29
|
+
- Updated dependencies [543be9558e]
|
|
30
|
+
- Updated dependencies [14b712da84]
|
|
31
|
+
- @modern-js/utils@2.0.0-beta.4
|
|
32
|
+
|
|
33
|
+
## 2.0.0-beta.3
|
|
34
|
+
|
|
35
|
+
### Major Changes
|
|
36
|
+
|
|
37
|
+
- dda38c9c3e: chore: v2
|
|
38
|
+
|
|
39
|
+
### Patch Changes
|
|
40
|
+
|
|
41
|
+
- Updated dependencies [6aca875]
|
|
42
|
+
- Updated dependencies [2e60319]
|
|
43
|
+
- Updated dependencies [92f0eade39]
|
|
44
|
+
- Updated dependencies [edd1cfb1af]
|
|
45
|
+
- Updated dependencies [cc971eabfc]
|
|
46
|
+
- Updated dependencies [5b9049f2e9]
|
|
47
|
+
- Updated dependencies [92004d1906]
|
|
48
|
+
- Updated dependencies [b8bbe036c7]
|
|
49
|
+
- Updated dependencies [d5a31df781]
|
|
50
|
+
- Updated dependencies [dda38c9c3e]
|
|
51
|
+
- Updated dependencies [3bbea92b2a]
|
|
52
|
+
- Updated dependencies [b710adb]
|
|
53
|
+
- Updated dependencies [ea7cf06]
|
|
54
|
+
- Updated dependencies [bbe4c4a]
|
|
55
|
+
- Updated dependencies [e4558a0]
|
|
56
|
+
- Updated dependencies [abf3421a75]
|
|
57
|
+
- Updated dependencies [543be9558e]
|
|
58
|
+
- Updated dependencies [14b712da84]
|
|
59
|
+
- @modern-js/utils@2.0.0-beta.3
|
|
60
|
+
|
|
3
61
|
## 2.0.0-beta.2
|
|
4
62
|
|
|
5
63
|
### Major Changes
|
package/dist/js/modern/index.js
CHANGED
|
@@ -1,41 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
import { get } from '@modern-js/utils/lodash';
|
|
1
|
+
import { get } from "@modern-js/utils/lodash";
|
|
3
2
|
import { getObjKeyMap } from "./utils";
|
|
4
3
|
class I18n {
|
|
5
4
|
constructor() {
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
this.language = "en";
|
|
6
|
+
this.languageMap = {};
|
|
8
7
|
}
|
|
9
8
|
format(msg, vars) {
|
|
10
|
-
return msg.replace(
|
|
9
|
+
return msg.replace(
|
|
10
|
+
/\{([^}]+)\}/gm,
|
|
11
|
+
(_match, capture) => Object.prototype.hasOwnProperty.call(vars, capture) ? vars[capture] : capture
|
|
12
|
+
);
|
|
11
13
|
}
|
|
12
14
|
getMessage(lang, key, vars, fallbackText) {
|
|
13
|
-
// 判断语言当前语料库是否存在,不存在使用 en 作为默认语言
|
|
14
15
|
const languages = Object.keys(this.languageMap);
|
|
15
|
-
const resultLang = languages.find(l => l === lang);
|
|
16
|
+
const resultLang = languages.find((l) => l === lang);
|
|
16
17
|
if (!resultLang && languages.length === 0) {
|
|
17
18
|
return fallbackText || key;
|
|
18
19
|
}
|
|
19
|
-
const model = this.languageMap[resultLang ||
|
|
20
|
+
const model = this.languageMap[resultLang || "en"];
|
|
20
21
|
if (!model) {
|
|
21
22
|
return fallbackText || key;
|
|
22
23
|
}
|
|
23
24
|
const message = get(model, key);
|
|
24
25
|
const value = message || fallbackText || key;
|
|
25
|
-
if (typeof value ===
|
|
26
|
+
if (typeof value === "string") {
|
|
26
27
|
return this.format(value, vars || {});
|
|
27
28
|
}
|
|
28
|
-
throw new Error(
|
|
29
|
+
throw new Error("key is not a string");
|
|
29
30
|
}
|
|
30
31
|
init(language, languageMap) {
|
|
31
|
-
this.language = language ||
|
|
32
|
+
this.language = language || "en";
|
|
32
33
|
if (languageMap) {
|
|
33
34
|
this.languageMap = languageMap;
|
|
34
35
|
}
|
|
35
36
|
return getObjKeyMap(this.languageMap[this.language]);
|
|
36
37
|
}
|
|
37
38
|
changeLanguage(config) {
|
|
38
|
-
this.language = config.locale ||
|
|
39
|
+
this.language = config.locale || "en";
|
|
39
40
|
}
|
|
40
41
|
t(key, vars, fallbackText) {
|
|
41
42
|
return this.getMessage(this.language, key, vars, fallbackText);
|
|
@@ -46,4 +47,6 @@ class I18n {
|
|
|
46
47
|
};
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
|
-
export {
|
|
50
|
+
export {
|
|
51
|
+
I18n
|
|
52
|
+
};
|
|
@@ -1,27 +1,21 @@
|
|
|
1
1
|
class I18CLILanguageDetector {
|
|
2
2
|
formatShellLocale(rawLC) {
|
|
3
3
|
if (!rawLC) {
|
|
4
|
-
return
|
|
4
|
+
return "";
|
|
5
5
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
// Get `en_US` part from `en_US.UTF-8`
|
|
11
|
-
.split('.')[0]
|
|
12
|
-
// Slice en_US to en
|
|
13
|
-
.split('_')[0]
|
|
14
|
-
// slice en-US to en
|
|
15
|
-
.split('-')[0];
|
|
16
|
-
if (LC === 'C') {
|
|
17
|
-
return '';
|
|
6
|
+
const LCs = rawLC.split(":");
|
|
7
|
+
const LC = LCs[0].split(".")[0].split("_")[0].split("-")[0];
|
|
8
|
+
if (LC === "C") {
|
|
9
|
+
return "";
|
|
18
10
|
}
|
|
19
11
|
return LC;
|
|
20
12
|
}
|
|
21
13
|
detect() {
|
|
22
|
-
var
|
|
23
|
-
const shellLocale = (
|
|
14
|
+
var _a, _b, _c, _d;
|
|
15
|
+
const shellLocale = (_d = (_c = (_b = (_a = process.env.LC_ALL) != null ? _a : process.env.LC_MESSAGES) != null ? _b : process.env.LANG) != null ? _c : process.env.LANGUAGE) != null ? _d : Intl.DateTimeFormat().resolvedOptions().locale;
|
|
24
16
|
return this.formatShellLocale(shellLocale);
|
|
25
17
|
}
|
|
26
18
|
}
|
|
27
|
-
export {
|
|
19
|
+
export {
|
|
20
|
+
I18CLILanguageDetector
|
|
21
|
+
};
|
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
import { isObject, isString } from
|
|
2
|
-
|
|
1
|
+
import { isObject, isString } from "@modern-js/utils/lodash";
|
|
2
|
+
function getObjKeyMap(obj, prefix = "") {
|
|
3
3
|
const result = {};
|
|
4
|
-
Object.keys(obj).forEach(key => {
|
|
4
|
+
Object.keys(obj).forEach((key) => {
|
|
5
5
|
if (isString(obj[key])) {
|
|
6
6
|
result[key] = prefix ? `${prefix}.${key}` : key;
|
|
7
7
|
} else if (isObject(obj[key])) {
|
|
8
|
-
result[key] = getObjKeyMap(
|
|
8
|
+
result[key] = getObjKeyMap(
|
|
9
|
+
obj[key],
|
|
10
|
+
prefix ? `${prefix}.${key}` : key
|
|
11
|
+
);
|
|
9
12
|
}
|
|
10
13
|
});
|
|
11
14
|
return result;
|
|
12
|
-
}
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
getObjKeyMap
|
|
18
|
+
};
|
package/dist/js/node/index.js
CHANGED
|
@@ -1,47 +1,64 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var stdin_exports = {};
|
|
19
|
+
__export(stdin_exports, {
|
|
20
|
+
I18n: () => I18n
|
|
5
21
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
22
|
+
module.exports = __toCommonJS(stdin_exports);
|
|
23
|
+
var import_lodash = require("@modern-js/utils/lodash");
|
|
24
|
+
var import_utils = require("./utils");
|
|
10
25
|
class I18n {
|
|
11
26
|
constructor() {
|
|
12
|
-
|
|
13
|
-
|
|
27
|
+
this.language = "en";
|
|
28
|
+
this.languageMap = {};
|
|
14
29
|
}
|
|
15
30
|
format(msg, vars) {
|
|
16
|
-
return msg.replace(
|
|
31
|
+
return msg.replace(
|
|
32
|
+
/\{([^}]+)\}/gm,
|
|
33
|
+
(_match, capture) => Object.prototype.hasOwnProperty.call(vars, capture) ? vars[capture] : capture
|
|
34
|
+
);
|
|
17
35
|
}
|
|
18
36
|
getMessage(lang, key, vars, fallbackText) {
|
|
19
|
-
// 判断语言当前语料库是否存在,不存在使用 en 作为默认语言
|
|
20
37
|
const languages = Object.keys(this.languageMap);
|
|
21
|
-
const resultLang = languages.find(l => l === lang);
|
|
38
|
+
const resultLang = languages.find((l) => l === lang);
|
|
22
39
|
if (!resultLang && languages.length === 0) {
|
|
23
40
|
return fallbackText || key;
|
|
24
41
|
}
|
|
25
|
-
const model = this.languageMap[resultLang ||
|
|
42
|
+
const model = this.languageMap[resultLang || "en"];
|
|
26
43
|
if (!model) {
|
|
27
44
|
return fallbackText || key;
|
|
28
45
|
}
|
|
29
|
-
const message = (0,
|
|
46
|
+
const message = (0, import_lodash.get)(model, key);
|
|
30
47
|
const value = message || fallbackText || key;
|
|
31
|
-
if (typeof value ===
|
|
48
|
+
if (typeof value === "string") {
|
|
32
49
|
return this.format(value, vars || {});
|
|
33
50
|
}
|
|
34
|
-
throw new Error(
|
|
51
|
+
throw new Error("key is not a string");
|
|
35
52
|
}
|
|
36
53
|
init(language, languageMap) {
|
|
37
|
-
this.language = language ||
|
|
54
|
+
this.language = language || "en";
|
|
38
55
|
if (languageMap) {
|
|
39
56
|
this.languageMap = languageMap;
|
|
40
57
|
}
|
|
41
|
-
return (0,
|
|
58
|
+
return (0, import_utils.getObjKeyMap)(this.languageMap[this.language]);
|
|
42
59
|
}
|
|
43
60
|
changeLanguage(config) {
|
|
44
|
-
this.language = config.locale ||
|
|
61
|
+
this.language = config.locale || "en";
|
|
45
62
|
}
|
|
46
63
|
t(key, vars, fallbackText) {
|
|
47
64
|
return this.getMessage(this.language, key, vars, fallbackText);
|
|
@@ -52,4 +69,3 @@ class I18n {
|
|
|
52
69
|
};
|
|
53
70
|
}
|
|
54
71
|
}
|
|
55
|
-
exports.I18n = I18n;
|
|
@@ -1,33 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var stdin_exports = {};
|
|
19
|
+
__export(stdin_exports, {
|
|
20
|
+
I18CLILanguageDetector: () => I18CLILanguageDetector
|
|
5
21
|
});
|
|
6
|
-
exports
|
|
22
|
+
module.exports = __toCommonJS(stdin_exports);
|
|
7
23
|
class I18CLILanguageDetector {
|
|
8
24
|
formatShellLocale(rawLC) {
|
|
9
25
|
if (!rawLC) {
|
|
10
|
-
return
|
|
26
|
+
return "";
|
|
11
27
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
// Get `en_US` part from `en_US.UTF-8`
|
|
17
|
-
.split('.')[0]
|
|
18
|
-
// Slice en_US to en
|
|
19
|
-
.split('_')[0]
|
|
20
|
-
// slice en-US to en
|
|
21
|
-
.split('-')[0];
|
|
22
|
-
if (LC === 'C') {
|
|
23
|
-
return '';
|
|
28
|
+
const LCs = rawLC.split(":");
|
|
29
|
+
const LC = LCs[0].split(".")[0].split("_")[0].split("-")[0];
|
|
30
|
+
if (LC === "C") {
|
|
31
|
+
return "";
|
|
24
32
|
}
|
|
25
33
|
return LC;
|
|
26
34
|
}
|
|
27
35
|
detect() {
|
|
28
|
-
var
|
|
29
|
-
const shellLocale = (
|
|
36
|
+
var _a, _b, _c, _d;
|
|
37
|
+
const shellLocale = (_d = (_c = (_b = (_a = process.env.LC_ALL) != null ? _a : process.env.LC_MESSAGES) != null ? _b : process.env.LANG) != null ? _c : process.env.LANGUAGE) != null ? _d : Intl.DateTimeFormat().resolvedOptions().locale;
|
|
30
38
|
return this.formatShellLocale(shellLocale);
|
|
31
39
|
}
|
|
32
40
|
}
|
|
33
|
-
exports.I18CLILanguageDetector = I18CLILanguageDetector;
|
|
@@ -1,18 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var stdin_exports = {};
|
|
19
|
+
__export(stdin_exports, {
|
|
20
|
+
getObjKeyMap: () => getObjKeyMap
|
|
5
21
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
8
|
-
function getObjKeyMap(obj, prefix =
|
|
22
|
+
module.exports = __toCommonJS(stdin_exports);
|
|
23
|
+
var import_lodash = require("@modern-js/utils/lodash");
|
|
24
|
+
function getObjKeyMap(obj, prefix = "") {
|
|
9
25
|
const result = {};
|
|
10
|
-
Object.keys(obj).forEach(key => {
|
|
11
|
-
if ((0,
|
|
26
|
+
Object.keys(obj).forEach((key) => {
|
|
27
|
+
if ((0, import_lodash.isString)(obj[key])) {
|
|
12
28
|
result[key] = prefix ? `${prefix}.${key}` : key;
|
|
13
|
-
} else if ((0,
|
|
14
|
-
result[key] = getObjKeyMap(
|
|
29
|
+
} else if ((0, import_lodash.isObject)(obj[key])) {
|
|
30
|
+
result[key] = getObjKeyMap(
|
|
31
|
+
obj[key],
|
|
32
|
+
prefix ? `${prefix}.${key}` : key
|
|
33
|
+
);
|
|
15
34
|
}
|
|
16
35
|
});
|
|
17
36
|
return result;
|
|
18
|
-
}
|
|
37
|
+
}
|
|
@@ -1,81 +1,109 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { get } from '@modern-js/utils/lodash';
|
|
5
|
-
import { getObjKeyMap } from "./utils";
|
|
6
|
-
var I18n = /*#__PURE__*/function () {
|
|
7
|
-
function I18n() {
|
|
8
|
-
_classCallCheck(this, I18n);
|
|
9
|
-
_defineProperty(this, "language", 'en');
|
|
10
|
-
_defineProperty(this, "languageMap", {});
|
|
11
|
-
}
|
|
12
|
-
_createClass(I18n, [{
|
|
13
|
-
key: "format",
|
|
14
|
-
value: function format(msg, vars) {
|
|
15
|
-
return msg.replace(/\{([^}]+)\}/gm, function (_match, capture) {
|
|
16
|
-
return Object.prototype.hasOwnProperty.call(vars, capture) ? vars[capture] : capture;
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
}, {
|
|
20
|
-
key: "getMessage",
|
|
21
|
-
value: function getMessage(lang, key, vars, fallbackText) {
|
|
22
|
-
// 判断语言当前语料库是否存在,不存在使用 en 作为默认语言
|
|
23
|
-
var languages = Object.keys(this.languageMap);
|
|
24
|
-
var resultLang = languages.find(function (l) {
|
|
25
|
-
return l === lang;
|
|
26
|
-
});
|
|
27
|
-
if (!resultLang && languages.length === 0) {
|
|
28
|
-
return fallbackText || key;
|
|
29
|
-
}
|
|
30
|
-
var model = this.languageMap[resultLang || 'en' || languages[0]];
|
|
31
|
-
if (!model) {
|
|
32
|
-
return fallbackText || key;
|
|
33
|
-
}
|
|
34
|
-
var message = get(model, key);
|
|
35
|
-
var value = message || fallbackText || key;
|
|
36
|
-
if (typeof value === 'string') {
|
|
37
|
-
return this.format(value, vars || {});
|
|
38
|
-
}
|
|
39
|
-
throw new Error('key is not a string');
|
|
1
|
+
function _classCallCheck(instance, Constructor) {
|
|
2
|
+
if (!(instance instanceof Constructor)) {
|
|
3
|
+
throw new TypeError("Cannot call a class as a function");
|
|
40
4
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
5
|
+
}
|
|
6
|
+
function _defineProperties(target, props) {
|
|
7
|
+
for(var i = 0; i < props.length; i++){
|
|
8
|
+
var descriptor = props[i];
|
|
9
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
10
|
+
descriptor.configurable = true;
|
|
11
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
12
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
49
13
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
14
|
+
}
|
|
15
|
+
function _createClass(Constructor, protoProps, staticProps) {
|
|
16
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
17
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
18
|
+
return Constructor;
|
|
19
|
+
}
|
|
20
|
+
function _defineProperty(obj, key, value) {
|
|
21
|
+
if (key in obj) {
|
|
22
|
+
Object.defineProperty(obj, key, {
|
|
23
|
+
value: value,
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true
|
|
27
|
+
});
|
|
28
|
+
} else {
|
|
29
|
+
obj[key] = value;
|
|
54
30
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
31
|
+
return obj;
|
|
32
|
+
}
|
|
33
|
+
import { get } from "@modern-js/utils/lodash";
|
|
34
|
+
import { getObjKeyMap } from "./utils";
|
|
35
|
+
var I18n = /*#__PURE__*/ function() {
|
|
36
|
+
"use strict";
|
|
37
|
+
function I18n() {
|
|
38
|
+
_classCallCheck(this, I18n);
|
|
39
|
+
_defineProperty(this, "language", "en");
|
|
40
|
+
_defineProperty(this, "languageMap", {});
|
|
59
41
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
42
|
+
_createClass(I18n, [
|
|
43
|
+
{
|
|
44
|
+
key: "format",
|
|
45
|
+
value: function format(msg, vars) {
|
|
46
|
+
return msg.replace(/\{([^}]+)\}/gm, function(_match, capture) {
|
|
47
|
+
return Object.prototype.hasOwnProperty.call(vars, capture) ? vars[capture] : capture;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
key: "getMessage",
|
|
53
|
+
value: function getMessage(lang, key, vars, fallbackText) {
|
|
54
|
+
var languages = Object.keys(this.languageMap);
|
|
55
|
+
var resultLang = languages.find(function(l) {
|
|
56
|
+
return l === lang;
|
|
57
|
+
});
|
|
58
|
+
if (!resultLang && languages.length === 0) {
|
|
59
|
+
return fallbackText || key;
|
|
60
|
+
}
|
|
61
|
+
var model = this.languageMap[resultLang || "en"];
|
|
62
|
+
if (!model) {
|
|
63
|
+
return fallbackText || key;
|
|
64
|
+
}
|
|
65
|
+
var message = get(model, key);
|
|
66
|
+
var value = message || fallbackText || key;
|
|
67
|
+
if (typeof value === "string") {
|
|
68
|
+
return this.format(value, vars || {});
|
|
69
|
+
}
|
|
70
|
+
throw new Error("key is not a string");
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
key: "init",
|
|
75
|
+
value: function init(language, languageMap) {
|
|
76
|
+
this.language = language || "en";
|
|
77
|
+
if (languageMap) {
|
|
78
|
+
this.languageMap = languageMap;
|
|
79
|
+
}
|
|
80
|
+
return getObjKeyMap(this.languageMap[this.language]);
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
key: "changeLanguage",
|
|
85
|
+
value: function changeLanguage(config) {
|
|
86
|
+
this.language = config.locale || "en";
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
key: "t",
|
|
91
|
+
value: function t(key, vars, fallbackText) {
|
|
92
|
+
return this.getMessage(this.language, key, vars, fallbackText);
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
key: "lang",
|
|
97
|
+
value: function lang(lang) {
|
|
98
|
+
var _this = this;
|
|
99
|
+
return {
|
|
100
|
+
t: function(key, vars, fallbackText) {
|
|
101
|
+
return _this.getMessage(lang, key, vars, fallbackText);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
75
105
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}]);
|
|
79
|
-
return I18n;
|
|
106
|
+
]);
|
|
107
|
+
return I18n;
|
|
80
108
|
}();
|
|
81
|
-
export { I18n };
|
|
109
|
+
export { I18n };
|
|
@@ -1,38 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
function I18CLILanguageDetector() {
|
|
5
|
-
_classCallCheck(this, I18CLILanguageDetector);
|
|
6
|
-
}
|
|
7
|
-
_createClass(I18CLILanguageDetector, [{
|
|
8
|
-
key: "formatShellLocale",
|
|
9
|
-
value: function formatShellLocale(rawLC) {
|
|
10
|
-
if (!rawLC) {
|
|
11
|
-
return '';
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
// Get array of available languages
|
|
15
|
-
var LCs = rawLC.split(':');
|
|
16
|
-
var LC = LCs[0]
|
|
17
|
-
// Get `en_US` part from `en_US.UTF-8`
|
|
18
|
-
.split('.')[0]
|
|
19
|
-
// Slice en_US to en
|
|
20
|
-
.split('_')[0]
|
|
21
|
-
// slice en-US to en
|
|
22
|
-
.split('-')[0];
|
|
23
|
-
if (LC === 'C') {
|
|
24
|
-
return '';
|
|
25
|
-
}
|
|
26
|
-
return LC;
|
|
1
|
+
function _classCallCheck(instance, Constructor) {
|
|
2
|
+
if (!(instance instanceof Constructor)) {
|
|
3
|
+
throw new TypeError("Cannot call a class as a function");
|
|
27
4
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
5
|
+
}
|
|
6
|
+
function _defineProperties(target, props) {
|
|
7
|
+
for(var i = 0; i < props.length; i++){
|
|
8
|
+
var descriptor = props[i];
|
|
9
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
10
|
+
descriptor.configurable = true;
|
|
11
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
12
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
34
13
|
}
|
|
35
|
-
|
|
36
|
-
|
|
14
|
+
}
|
|
15
|
+
function _createClass(Constructor, protoProps, staticProps) {
|
|
16
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
17
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
18
|
+
return Constructor;
|
|
19
|
+
}
|
|
20
|
+
var I18CLILanguageDetector = /*#__PURE__*/ function() {
|
|
21
|
+
"use strict";
|
|
22
|
+
function I18CLILanguageDetector() {
|
|
23
|
+
_classCallCheck(this, I18CLILanguageDetector);
|
|
24
|
+
}
|
|
25
|
+
_createClass(I18CLILanguageDetector, [
|
|
26
|
+
{
|
|
27
|
+
key: "formatShellLocale",
|
|
28
|
+
value: function formatShellLocale(rawLC) {
|
|
29
|
+
if (!rawLC) {
|
|
30
|
+
return "";
|
|
31
|
+
}
|
|
32
|
+
var LCs = rawLC.split(":");
|
|
33
|
+
var LC = LCs[0].split(".")[0].split("_")[0].split("-")[0];
|
|
34
|
+
if (LC === "C") {
|
|
35
|
+
return "";
|
|
36
|
+
}
|
|
37
|
+
return LC;
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
key: "detect",
|
|
42
|
+
value: function detect() {
|
|
43
|
+
var _LC_ALL, ref, ref1, ref2;
|
|
44
|
+
var shellLocale = (ref2 = (ref1 = (ref = (_LC_ALL = process.env.LC_ALL) !== null && _LC_ALL !== void 0 ? _LC_ALL : process.env.LC_MESSAGES) !== null && ref !== void 0 ? ref : process.env.LANG) !== null && ref1 !== void 0 ? ref1 : process.env.LANGUAGE) !== null && ref2 !== void 0 ? ref2 : Intl.DateTimeFormat().resolvedOptions().locale;
|
|
45
|
+
return this.formatShellLocale(shellLocale);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
]);
|
|
49
|
+
return I18CLILanguageDetector;
|
|
37
50
|
}();
|
|
38
|
-
export { I18CLILanguageDetector };
|
|
51
|
+
export { I18CLILanguageDetector };
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { isObject, isString } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
1
|
+
import { isObject, isString } from "@modern-js/utils/lodash";
|
|
2
|
+
function getObjKeyMap(obj) {
|
|
3
|
+
var prefix = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "";
|
|
4
|
+
var result = {};
|
|
5
|
+
Object.keys(obj).forEach(function(key) {
|
|
6
|
+
if (isString(obj[key])) {
|
|
7
|
+
result[key] = prefix ? "".concat(prefix, ".").concat(key) : key;
|
|
8
|
+
} else if (isObject(obj[key])) {
|
|
9
|
+
result[key] = getObjKeyMap(obj[key], prefix ? "".concat(prefix, ".").concat(key) : key);
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
return result;
|
|
13
|
+
}
|
|
14
|
+
export { getObjKeyMap };
|
package/dist/types/index.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ declare type TI18n = {
|
|
|
15
15
|
export interface ChangeLanguageConfig {
|
|
16
16
|
locale?: Language;
|
|
17
17
|
}
|
|
18
|
+
|
|
18
19
|
declare class I18n implements TI18n {
|
|
19
20
|
private language;
|
|
20
21
|
private languageMap;
|
|
@@ -31,4 +32,5 @@ declare class I18n implements TI18n {
|
|
|
31
32
|
} | undefined, fallbackText?: string) => string;
|
|
32
33
|
};
|
|
33
34
|
}
|
|
35
|
+
|
|
34
36
|
export { I18n };
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"modern",
|
|
12
12
|
"modern.js"
|
|
13
13
|
],
|
|
14
|
-
"version": "2.0.0-beta.
|
|
14
|
+
"version": "2.0.0-beta.4",
|
|
15
15
|
"jsnext:source": "./src/index.ts",
|
|
16
16
|
"types": "./dist/types/index.d.ts",
|
|
17
17
|
"main": "./dist/js/node/index.js",
|
|
@@ -42,15 +42,15 @@
|
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@babel/runtime": "^7.18.0",
|
|
45
|
-
"@modern-js/utils": "2.0.0-beta.
|
|
45
|
+
"@modern-js/utils": "2.0.0-beta.4"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@types/jest": "^27",
|
|
49
49
|
"@types/node": "^14",
|
|
50
50
|
"typescript": "^4",
|
|
51
51
|
"jest": "^27",
|
|
52
|
-
"@scripts/build": "2.0.0-beta.
|
|
53
|
-
"@scripts/jest-config": "2.0.0-beta.
|
|
52
|
+
"@scripts/build": "2.0.0-beta.4",
|
|
53
|
+
"@scripts/jest-config": "2.0.0-beta.4"
|
|
54
54
|
},
|
|
55
55
|
"sideEffects": false,
|
|
56
56
|
"modernConfig": {},
|