@modern-js/plugin-i18n 1.1.2-beta.0 → 1.2.1-alpha.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/CHANGELOG.md +18 -0
- package/jest.config.js +8 -0
- package/package.json +18 -6
- package/tests/index.test.ts +1 -1
- package/tests/tsconfig.json +1 -3
- package/tsconfig.json +1 -3
- package/dist/js/modern/index.js +0 -66
- package/dist/js/modern/utils/index.js +0 -13
- package/dist/js/node/index.js +0 -75
- package/dist/js/node/utils/index.js +0 -24
- package/dist/js/treeshaking/index.js +0 -102
- package/dist/js/treeshaking/utils/index.js +0 -14
- package/dist/types/index.d.ts +0 -36
- package/dist/types/utils/index.d.ts +0 -5
- package/src/.eslintrc.json +0 -3
- package/src/index.ts +0 -99
- package/src/utils/index.ts +0 -20
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @modern-js/plugin-i18n
|
|
2
2
|
|
|
3
|
+
## 1.2.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 83166714: change .npmignore
|
|
8
|
+
|
|
9
|
+
## 1.2.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- cfe11628: Make Modern.js self bootstraping
|
|
14
|
+
|
|
15
|
+
## 1.1.2
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- 5e3de7d8: fix: i18n get message error when system language not zh or en
|
|
20
|
+
|
|
3
21
|
## 1.1.1
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
package/jest.config.js
ADDED
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"modern",
|
|
12
12
|
"modern.js"
|
|
13
13
|
],
|
|
14
|
-
"version": "1.1
|
|
14
|
+
"version": "1.2.1-alpha.0",
|
|
15
15
|
"jsnext:source": "./src/index.ts",
|
|
16
16
|
"types": "./dist/types/index.d.ts",
|
|
17
17
|
"main": "./dist/js/node/index.js",
|
|
@@ -35,18 +35,30 @@
|
|
|
35
35
|
"@types/lodash": "^4.14.126",
|
|
36
36
|
"@types/node": "^14",
|
|
37
37
|
"typescript": "^4",
|
|
38
|
-
"@
|
|
39
|
-
"
|
|
38
|
+
"@scripts/build": "0.0.0",
|
|
39
|
+
"jest": "^27",
|
|
40
|
+
"@scripts/jest-config": "0.0.0"
|
|
40
41
|
},
|
|
41
42
|
"sideEffects": false,
|
|
42
43
|
"modernConfig": {},
|
|
43
44
|
"publishConfig": {
|
|
44
45
|
"registry": "https://registry.npmjs.org/",
|
|
45
|
-
"access": "public"
|
|
46
|
+
"access": "public",
|
|
47
|
+
"types": "./dist/types/index.d.ts",
|
|
48
|
+
"exports": {
|
|
49
|
+
".": {
|
|
50
|
+
"node": {
|
|
51
|
+
"import": "./dist/js/modern/index.js",
|
|
52
|
+
"require": "./dist/js/node/index.js"
|
|
53
|
+
},
|
|
54
|
+
"default": "./dist/js/treeshaking/index.js"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
46
57
|
},
|
|
47
58
|
"scripts": {
|
|
48
59
|
"new": "modern new",
|
|
49
60
|
"build": "modern build",
|
|
50
|
-
"test": "
|
|
51
|
-
}
|
|
61
|
+
"test": "jest --passWithNoTests"
|
|
62
|
+
},
|
|
63
|
+
"readme": "\n<p align=\"center\">\n <a href=\"https://modernjs.dev\" target=\"blank\"><img src=\"https://lf3-static.bytednsdoc.com/obj/eden-cn/ylaelkeh7nuhfnuhf/modernjs-cover.png\" width=\"300\" alt=\"Modern.js Logo\" /></a>\n</p>\n<p align=\"center\">\n现代 Web 工程体系\n <br/>\n <a href=\"https://modernjs.dev\" target=\"blank\">\n modernjs.dev\n </a>\n</p>\n<p align=\"center\">\n The meta-framework suite designed from scratch for frontend-focused modern web development\n</p>\n\n# Introduction\n\n> The doc site ([modernjs.dev](https://modernjs.dev)) and articles are only available in Chinese for now, we are planning to add English versions soon.\n\n- [Modern.js: Hello, World!](https://zhuanlan.zhihu.com/p/426707646)\n\n## Getting Started\n\n- [Quick Start](https://modernjs.dev/docs/start)\n- [Guides](https://modernjs.dev/docs/guides)\n- [API References](https://modernjs.dev/docs/apis)\n\n## Contributing\n\n- [Contributing Guide](https://github.com/modern-js-dev/modern.js/blob/main/CONTRIBUTING.md)\n"
|
|
52
64
|
}
|
package/tests/index.test.ts
CHANGED
package/tests/tsconfig.json
CHANGED
package/tsconfig.json
CHANGED
package/dist/js/modern/index.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import _get from "lodash/get";
|
|
2
|
-
import { getObjKeyMap } from "./utils";
|
|
3
|
-
|
|
4
|
-
class I18n {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.language = 'en';
|
|
7
|
-
this.languageMap = {};
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
format(msg, vars) {
|
|
11
|
-
return msg.replace(/\{([^}]+)\}/gm, (_match, capture) => Object.prototype.hasOwnProperty.call(vars, capture) ? vars[capture] : capture);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
getMessage(lang, key, vars, fallbackText) {
|
|
15
|
-
// 判断语言当前语料库是否存在,不存在使用 en 作为默认语言
|
|
16
|
-
const languages = Object.keys(this.languageMap);
|
|
17
|
-
const resultLang = languages.find(l => l === lang);
|
|
18
|
-
|
|
19
|
-
if (!resultLang && languages.length === 0) {
|
|
20
|
-
return fallbackText || key;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const model = this.languageMap[resultLang || 'en' || languages[0]];
|
|
24
|
-
|
|
25
|
-
if (!model) {
|
|
26
|
-
return fallbackText || key;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const message = _get(model, key);
|
|
30
|
-
|
|
31
|
-
const value = message || fallbackText || key;
|
|
32
|
-
|
|
33
|
-
if (typeof value === 'string') {
|
|
34
|
-
return this.format(value, vars || {});
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
throw new Error('key is not a string');
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
init(language, languageMap) {
|
|
41
|
-
this.language = language || 'en';
|
|
42
|
-
|
|
43
|
-
if (languageMap) {
|
|
44
|
-
this.languageMap = languageMap;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return getObjKeyMap(this.languageMap[this.language]);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
changeLanguage(config) {
|
|
51
|
-
this.language = config.locale || 'en';
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
t(key, vars, fallbackText) {
|
|
55
|
-
return this.getMessage(this.language, key, vars, fallbackText);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
lang(lang) {
|
|
59
|
-
return {
|
|
60
|
-
t: (key, vars, fallbackText) => this.getMessage(lang, key, vars, fallbackText)
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export { I18n };
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import _isString from "lodash/isString";
|
|
2
|
-
import _isObject from "lodash/isObject";
|
|
3
|
-
export function getObjKeyMap(obj, prefix = '') {
|
|
4
|
-
const result = {};
|
|
5
|
-
Object.keys(obj).forEach(key => {
|
|
6
|
-
if (_isString(obj[key])) {
|
|
7
|
-
result[key] = prefix ? `${prefix}.${key}` : key;
|
|
8
|
-
} else if (_isObject(obj[key])) {
|
|
9
|
-
result[key] = getObjKeyMap(obj[key], prefix ? `${prefix}.${key}` : key);
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
return result;
|
|
13
|
-
}
|
package/dist/js/node/index.js
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.I18n = void 0;
|
|
7
|
-
|
|
8
|
-
var _get2 = _interopRequireDefault(require("lodash/get"));
|
|
9
|
-
|
|
10
|
-
var _utils = require("./utils");
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
|
-
class I18n {
|
|
15
|
-
constructor() {
|
|
16
|
-
this.language = 'en';
|
|
17
|
-
this.languageMap = {};
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
format(msg, vars) {
|
|
21
|
-
return msg.replace(/\{([^}]+)\}/gm, (_match, capture) => Object.prototype.hasOwnProperty.call(vars, capture) ? vars[capture] : capture);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
getMessage(lang, key, vars, fallbackText) {
|
|
25
|
-
// 判断语言当前语料库是否存在,不存在使用 en 作为默认语言
|
|
26
|
-
const languages = Object.keys(this.languageMap);
|
|
27
|
-
const resultLang = languages.find(l => l === lang);
|
|
28
|
-
|
|
29
|
-
if (!resultLang && languages.length === 0) {
|
|
30
|
-
return fallbackText || key;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const model = this.languageMap[resultLang || 'en' || languages[0]];
|
|
34
|
-
|
|
35
|
-
if (!model) {
|
|
36
|
-
return fallbackText || key;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const message = (0, _get2.default)(model, key);
|
|
40
|
-
const value = message || fallbackText || key;
|
|
41
|
-
|
|
42
|
-
if (typeof value === 'string') {
|
|
43
|
-
return this.format(value, vars || {});
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
throw new Error('key is not a string');
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
init(language, languageMap) {
|
|
50
|
-
this.language = language || 'en';
|
|
51
|
-
|
|
52
|
-
if (languageMap) {
|
|
53
|
-
this.languageMap = languageMap;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return (0, _utils.getObjKeyMap)(this.languageMap[this.language]);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
changeLanguage(config) {
|
|
60
|
-
this.language = config.locale || 'en';
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
t(key, vars, fallbackText) {
|
|
64
|
-
return this.getMessage(this.language, key, vars, fallbackText);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
lang(lang) {
|
|
68
|
-
return {
|
|
69
|
-
t: (key, vars, fallbackText) => this.getMessage(lang, key, vars, fallbackText)
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
exports.I18n = I18n;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getObjKeyMap = getObjKeyMap;
|
|
7
|
-
|
|
8
|
-
var _isString2 = _interopRequireDefault(require("lodash/isString"));
|
|
9
|
-
|
|
10
|
-
var _isObject2 = _interopRequireDefault(require("lodash/isObject"));
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
|
-
function getObjKeyMap(obj, prefix = '') {
|
|
15
|
-
const result = {};
|
|
16
|
-
Object.keys(obj).forEach(key => {
|
|
17
|
-
if ((0, _isString2.default)(obj[key])) {
|
|
18
|
-
result[key] = prefix ? `${prefix}.${key}` : key;
|
|
19
|
-
} else if ((0, _isObject2.default)(obj[key])) {
|
|
20
|
-
result[key] = getObjKeyMap(obj[key], prefix ? `${prefix}.${key}` : key);
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
return result;
|
|
24
|
-
}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import _get from "lodash/get";
|
|
2
|
-
|
|
3
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
4
|
-
|
|
5
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
6
|
-
|
|
7
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
8
|
-
|
|
9
|
-
import { getObjKeyMap } from "./utils";
|
|
10
|
-
|
|
11
|
-
var I18n = /*#__PURE__*/function () {
|
|
12
|
-
function I18n() {
|
|
13
|
-
_classCallCheck(this, I18n);
|
|
14
|
-
|
|
15
|
-
this.language = 'en';
|
|
16
|
-
this.languageMap = {};
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
_createClass(I18n, [{
|
|
20
|
-
key: "format",
|
|
21
|
-
value: function format(msg, vars) {
|
|
22
|
-
return msg.replace(/\{([^}]+)\}/gm, function (_match, capture) {
|
|
23
|
-
return Object.prototype.hasOwnProperty.call(vars, capture) ? vars[capture] : capture;
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
}, {
|
|
27
|
-
key: "getMessage",
|
|
28
|
-
value: function getMessage(lang, key, vars, fallbackText) {
|
|
29
|
-
// 判断语言当前语料库是否存在,不存在使用 en 作为默认语言
|
|
30
|
-
var languages = Object.keys(this.languageMap);
|
|
31
|
-
var resultLang = languages.find(function (l) {
|
|
32
|
-
return l === lang;
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
if (!resultLang && languages.length === 0) {
|
|
36
|
-
return fallbackText || key;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
var model = this.languageMap[resultLang || 'en' || languages[0]];
|
|
40
|
-
|
|
41
|
-
if (!model) {
|
|
42
|
-
return fallbackText || key;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
var message = _get(model, key);
|
|
46
|
-
|
|
47
|
-
var value = message || fallbackText || key;
|
|
48
|
-
|
|
49
|
-
if (typeof value === 'string') {
|
|
50
|
-
return this.format(value, vars || {});
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
throw new Error('key is not a string');
|
|
54
|
-
}
|
|
55
|
-
}, {
|
|
56
|
-
key: "init",
|
|
57
|
-
value: function init(language, languageMap) {
|
|
58
|
-
this.language = language || 'en';
|
|
59
|
-
|
|
60
|
-
if (languageMap) {
|
|
61
|
-
this.languageMap = languageMap;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return getObjKeyMap(this.languageMap[this.language]);
|
|
65
|
-
}
|
|
66
|
-
}, {
|
|
67
|
-
key: "changeLanguage",
|
|
68
|
-
value: function changeLanguage(config) {
|
|
69
|
-
this.language = config.locale || 'en';
|
|
70
|
-
}
|
|
71
|
-
}, {
|
|
72
|
-
key: "t",
|
|
73
|
-
value: function t(key, vars, fallbackText) {
|
|
74
|
-
return this.getMessage(this.language, key, vars, fallbackText);
|
|
75
|
-
}
|
|
76
|
-
}, {
|
|
77
|
-
key: "lang",
|
|
78
|
-
value: function (_lang) {
|
|
79
|
-
function lang(_x) {
|
|
80
|
-
return _lang.apply(this, arguments);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
lang.toString = function () {
|
|
84
|
-
return _lang.toString();
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
return lang;
|
|
88
|
-
}(function (lang) {
|
|
89
|
-
var _this = this;
|
|
90
|
-
|
|
91
|
-
return {
|
|
92
|
-
t: function t(key, vars, fallbackText) {
|
|
93
|
-
return _this.getMessage(lang, key, vars, fallbackText);
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
})
|
|
97
|
-
}]);
|
|
98
|
-
|
|
99
|
-
return I18n;
|
|
100
|
-
}();
|
|
101
|
-
|
|
102
|
-
export { I18n };
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import _isString from "lodash/isString";
|
|
2
|
-
import _isObject from "lodash/isObject";
|
|
3
|
-
export function getObjKeyMap(obj) {
|
|
4
|
-
var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
5
|
-
var result = {};
|
|
6
|
-
Object.keys(obj).forEach(function (key) {
|
|
7
|
-
if (_isString(obj[key])) {
|
|
8
|
-
result[key] = prefix ? "".concat(prefix, ".").concat(key) : key;
|
|
9
|
-
} else if (_isObject(obj[key])) {
|
|
10
|
-
result[key] = getObjKeyMap(obj[key], prefix ? "".concat(prefix, ".").concat(key) : key);
|
|
11
|
-
}
|
|
12
|
-
});
|
|
13
|
-
return result;
|
|
14
|
-
}
|
package/dist/types/index.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
declare type Language = string;
|
|
2
|
-
interface LanguageModel {
|
|
3
|
-
[Key: string]: string | LanguageModel;
|
|
4
|
-
}
|
|
5
|
-
declare type TFunc = (key: string, vars?: {
|
|
6
|
-
[key: string]: string;
|
|
7
|
-
}, fallbackText?: string) => string;
|
|
8
|
-
declare type TI18n = {
|
|
9
|
-
t: TFunc;
|
|
10
|
-
changeLanguage: (config: ChangeLanguageConfig) => void;
|
|
11
|
-
lang: (lang: Language) => {
|
|
12
|
-
t: TFunc;
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
export interface ChangeLanguageConfig {
|
|
16
|
-
locale?: Language;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
declare class I18n implements TI18n {
|
|
20
|
-
private language;
|
|
21
|
-
private languageMap;
|
|
22
|
-
private format;
|
|
23
|
-
private getMessage;
|
|
24
|
-
init<T extends LanguageModel>(language?: Language, languageMap?: Record<Language, T>): T;
|
|
25
|
-
changeLanguage(config: ChangeLanguageConfig): void;
|
|
26
|
-
t(key: string, vars?: {
|
|
27
|
-
[key: string]: string;
|
|
28
|
-
}, fallbackText?: string): string;
|
|
29
|
-
lang(lang: string): {
|
|
30
|
-
t: (key: string, vars?: {
|
|
31
|
-
[key: string]: string;
|
|
32
|
-
} | undefined, fallbackText?: string | undefined) => string;
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export { I18n };
|
package/src/.eslintrc.json
DELETED
package/src/index.ts
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { get } from 'lodash';
|
|
2
|
-
import { getObjKeyMap } from './utils';
|
|
3
|
-
|
|
4
|
-
type Language = string;
|
|
5
|
-
|
|
6
|
-
interface LanguageModel {
|
|
7
|
-
[Key: string]: string | LanguageModel;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
type LanguageModelMap = Record<Language, LanguageModel>;
|
|
11
|
-
|
|
12
|
-
type TFunc = (
|
|
13
|
-
key: string,
|
|
14
|
-
vars?: { [key: string]: string },
|
|
15
|
-
fallbackText?: string,
|
|
16
|
-
) => string;
|
|
17
|
-
type TI18n = {
|
|
18
|
-
t: TFunc;
|
|
19
|
-
changeLanguage: (config: ChangeLanguageConfig) => void;
|
|
20
|
-
lang: (lang: Language) => { t: TFunc };
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export interface ChangeLanguageConfig {
|
|
24
|
-
locale?: Language;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
class I18n implements TI18n {
|
|
28
|
-
private language: Language = 'en';
|
|
29
|
-
|
|
30
|
-
private languageMap: LanguageModelMap = {};
|
|
31
|
-
|
|
32
|
-
private format(msg: string, vars: { [key: string]: string }) {
|
|
33
|
-
return msg.replace(/\{([^}]+)\}/gm, (_match, capture: string) =>
|
|
34
|
-
Object.prototype.hasOwnProperty.call(vars, capture)
|
|
35
|
-
? vars[capture]
|
|
36
|
-
: capture,
|
|
37
|
-
);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
private getMessage(
|
|
41
|
-
lang: string,
|
|
42
|
-
key: string,
|
|
43
|
-
vars?: { [key: string]: string },
|
|
44
|
-
fallbackText?: string,
|
|
45
|
-
) {
|
|
46
|
-
// 判断语言当前语料库是否存在,不存在使用 en 作为默认语言
|
|
47
|
-
const languages = Object.keys(this.languageMap);
|
|
48
|
-
const resultLang = languages.find(l => l === lang);
|
|
49
|
-
if (!resultLang && languages.length === 0) {
|
|
50
|
-
return fallbackText || key;
|
|
51
|
-
}
|
|
52
|
-
const model: LanguageModel =
|
|
53
|
-
this.languageMap[resultLang || 'en' || languages[0]];
|
|
54
|
-
if (!model) {
|
|
55
|
-
return fallbackText || key;
|
|
56
|
-
}
|
|
57
|
-
const message = get(model, key);
|
|
58
|
-
const value = message || fallbackText || key;
|
|
59
|
-
if (typeof value === 'string') {
|
|
60
|
-
return this.format(value, vars || {});
|
|
61
|
-
}
|
|
62
|
-
throw new Error('key is not a string');
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
public init<T extends LanguageModel>(
|
|
66
|
-
language?: Language,
|
|
67
|
-
languageMap?: Record<Language, T>,
|
|
68
|
-
) {
|
|
69
|
-
this.language = language || 'en';
|
|
70
|
-
if (languageMap) {
|
|
71
|
-
this.languageMap = languageMap;
|
|
72
|
-
}
|
|
73
|
-
return getObjKeyMap(this.languageMap[this.language]) as T;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
public changeLanguage(config: ChangeLanguageConfig) {
|
|
77
|
-
this.language = config.locale || 'en';
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
public t(
|
|
81
|
-
key: string,
|
|
82
|
-
vars?: { [key: string]: string },
|
|
83
|
-
fallbackText?: string,
|
|
84
|
-
) {
|
|
85
|
-
return this.getMessage(this.language, key, vars, fallbackText);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
public lang(lang: string) {
|
|
89
|
-
return {
|
|
90
|
-
t: (
|
|
91
|
-
key: string,
|
|
92
|
-
vars?: { [key: string]: string },
|
|
93
|
-
fallbackText?: string,
|
|
94
|
-
): string => this.getMessage(lang, key, vars, fallbackText),
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export { I18n };
|
package/src/utils/index.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { isObject, isString } from 'lodash';
|
|
2
|
-
|
|
3
|
-
interface ITem {
|
|
4
|
-
[key: string]: string | ITem;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export function getObjKeyMap(obj: ITem, prefix = '') {
|
|
8
|
-
const result: ITem = {};
|
|
9
|
-
Object.keys(obj).forEach(key => {
|
|
10
|
-
if (isString(obj[key])) {
|
|
11
|
-
result[key] = prefix ? `${prefix}.${key}` : key;
|
|
12
|
-
} else if (isObject(obj[key])) {
|
|
13
|
-
result[key] = getObjKeyMap(
|
|
14
|
-
obj[key] as ITem,
|
|
15
|
-
prefix ? `${prefix}.${key}` : key,
|
|
16
|
-
);
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
return result;
|
|
20
|
-
}
|