@modern-js/i18n-utils 0.0.0-canary-20250926071129

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021-present Modern.js
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,26 @@
1
+ <p align="center">
2
+ <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>
3
+ </p>
4
+
5
+ <h1 align="center">Modern.js</h1>
6
+
7
+ <p align="center">
8
+ A Progressive React Framework for modern web development.
9
+ </p>
10
+
11
+ ## Getting Started
12
+
13
+ Please follow [Quick Start](https://modernjs.dev/en/guides/get-started/quick-start) to get started with Modern.js.
14
+
15
+ ## Documentation
16
+
17
+ - [English Documentation](https://modernjs.dev/en/)
18
+ - [中文文档](https://modernjs.dev)
19
+
20
+ ## Contributing
21
+
22
+ Please read the [Contributing Guide](https://github.com/web-infra-dev/modern.js/blob/main/CONTRIBUTING.md).
23
+
24
+ ## License
25
+
26
+ Modern.js is [MIT licensed](https://github.com/web-infra-dev/modern.js/blob/main/LICENSE).
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var src_exports = {};
20
+ __export(src_exports, {
21
+ I18n: () => I18n
22
+ });
23
+ module.exports = __toCommonJS(src_exports);
24
+ var import_lodash = require("@modern-js/utils/lodash");
25
+ var import_utils = require("./utils");
26
+ class I18n {
27
+ format(msg, vars) {
28
+ return msg.replace(/\{(\w+)\}/g, (_match, capture) => Object.prototype.hasOwnProperty.call(vars, capture) ? vars[capture] : capture);
29
+ }
30
+ getMessage(lang, key, vars, fallbackText) {
31
+ const languages = Object.keys(this.languageMap);
32
+ const resultLang = languages.find((l) => l === lang);
33
+ if (!resultLang && languages.length === 0) {
34
+ return fallbackText || key;
35
+ }
36
+ const model = this.languageMap[resultLang || "en"];
37
+ if (!model) {
38
+ return fallbackText || key;
39
+ }
40
+ const message = (0, import_lodash.get)(model, key);
41
+ const value = message || fallbackText || key;
42
+ if (typeof value === "string") {
43
+ return this.format(value, vars || {});
44
+ }
45
+ throw new Error("key is not a string");
46
+ }
47
+ init(language, languageMap) {
48
+ this.language = language || "en";
49
+ if (languageMap) {
50
+ this.languageMap = languageMap;
51
+ }
52
+ return (0, import_utils.getObjKeyMap)(this.languageMap[this.language]);
53
+ }
54
+ changeLanguage(config) {
55
+ this.language = config.locale || "en";
56
+ }
57
+ t(key, vars, fallbackText) {
58
+ return this.getMessage(this.language, key, vars, fallbackText);
59
+ }
60
+ lang(lang) {
61
+ return {
62
+ t: (key, vars, fallbackText) => this.getMessage(lang, key, vars, fallbackText)
63
+ };
64
+ }
65
+ constructor() {
66
+ this.language = "en";
67
+ this.languageMap = {};
68
+ }
69
+ }
70
+ // Annotate the CommonJS export names for ESM import in node:
71
+ 0 && (module.exports = {
72
+ I18n
73
+ });
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var languageDetector_exports = {};
20
+ __export(languageDetector_exports, {
21
+ I18CLILanguageDetector: () => I18CLILanguageDetector,
22
+ getLocaleLanguage: () => getLocaleLanguage
23
+ });
24
+ module.exports = __toCommonJS(languageDetector_exports);
25
+ class I18CLILanguageDetector {
26
+ formatShellLocale(rawLC) {
27
+ if (!rawLC) {
28
+ return "";
29
+ }
30
+ const LCs = rawLC.split(":");
31
+ const LC = LCs[0].split(".")[0].split("_")[0].split("-")[0];
32
+ if (LC === "C") {
33
+ return "";
34
+ }
35
+ return LC;
36
+ }
37
+ detect() {
38
+ var _process_env_LC_ALL, _ref, _ref1, _ref2;
39
+ const shellLocale = (_ref2 = (_ref1 = (_ref = (_process_env_LC_ALL = process.env.LC_ALL) !== null && _process_env_LC_ALL !== void 0 ? _process_env_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;
40
+ return this.formatShellLocale(shellLocale);
41
+ }
42
+ }
43
+ function getLocaleLanguage() {
44
+ const detector = new I18CLILanguageDetector();
45
+ return detector.detect();
46
+ }
47
+ // Annotate the CommonJS export names for ESM import in node:
48
+ 0 && (module.exports = {
49
+ I18CLILanguageDetector,
50
+ getLocaleLanguage
51
+ });
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var utils_exports = {};
20
+ __export(utils_exports, {
21
+ getObjKeyMap: () => getObjKeyMap
22
+ });
23
+ module.exports = __toCommonJS(utils_exports);
24
+ var import_lodash = require("@modern-js/utils/lodash");
25
+ function getObjKeyMap(obj, prefix = "") {
26
+ const result = {};
27
+ Object.keys(obj).forEach((key) => {
28
+ if ((0, import_lodash.isString)(obj[key])) {
29
+ result[key] = prefix ? `${prefix}.${key}` : key;
30
+ } else if ((0, import_lodash.isObject)(obj[key])) {
31
+ result[key] = getObjKeyMap(obj[key], prefix ? `${prefix}.${key}` : key);
32
+ }
33
+ });
34
+ return result;
35
+ }
36
+ // Annotate the CommonJS export names for ESM import in node:
37
+ 0 && (module.exports = {
38
+ getObjKeyMap
39
+ });
@@ -0,0 +1,61 @@
1
+ import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
2
+ import { get } from "@modern-js/utils/lodash";
3
+ import { getObjKeyMap } from "./utils";
4
+ var I18n = /* @__PURE__ */ function() {
5
+ "use strict";
6
+ function I18n2() {
7
+ _class_call_check(this, I18n2);
8
+ this.language = "en";
9
+ this.languageMap = {};
10
+ }
11
+ var _proto = I18n2.prototype;
12
+ _proto.format = function format(msg, vars) {
13
+ return msg.replace(/\{(\w+)\}/g, function(_match, capture) {
14
+ return Object.prototype.hasOwnProperty.call(vars, capture) ? vars[capture] : capture;
15
+ });
16
+ };
17
+ _proto.getMessage = function getMessage(lang, key, vars, fallbackText) {
18
+ var languages = Object.keys(this.languageMap);
19
+ var resultLang = languages.find(function(l) {
20
+ return l === lang;
21
+ });
22
+ if (!resultLang && languages.length === 0) {
23
+ return fallbackText || key;
24
+ }
25
+ var model = this.languageMap[resultLang || "en"];
26
+ if (!model) {
27
+ return fallbackText || key;
28
+ }
29
+ var message = get(model, key);
30
+ var value = message || fallbackText || key;
31
+ if (typeof value === "string") {
32
+ return this.format(value, vars || {});
33
+ }
34
+ throw new Error("key is not a string");
35
+ };
36
+ _proto.init = function init(language, languageMap) {
37
+ this.language = language || "en";
38
+ if (languageMap) {
39
+ this.languageMap = languageMap;
40
+ }
41
+ return getObjKeyMap(this.languageMap[this.language]);
42
+ };
43
+ _proto.changeLanguage = function changeLanguage(config) {
44
+ this.language = config.locale || "en";
45
+ };
46
+ _proto.t = function t(key, vars, fallbackText) {
47
+ return this.getMessage(this.language, key, vars, fallbackText);
48
+ };
49
+ _proto.lang = function lang(lang) {
50
+ var _this = this;
51
+ return {
52
+ t: function(key, vars, fallbackText) {
53
+ return _this.getMessage(lang, key, vars, fallbackText);
54
+ }
55
+ };
56
+ };
57
+ return I18n2;
58
+ }();
59
+ export {
60
+ I18n
61
+ };
@@ -0,0 +1,33 @@
1
+ import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
2
+ var I18CLILanguageDetector = /* @__PURE__ */ function() {
3
+ "use strict";
4
+ function I18CLILanguageDetector2() {
5
+ _class_call_check(this, I18CLILanguageDetector2);
6
+ }
7
+ var _proto = I18CLILanguageDetector2.prototype;
8
+ _proto.formatShellLocale = function formatShellLocale(rawLC) {
9
+ if (!rawLC) {
10
+ return "";
11
+ }
12
+ var LCs = rawLC.split(":");
13
+ var LC = LCs[0].split(".")[0].split("_")[0].split("-")[0];
14
+ if (LC === "C") {
15
+ return "";
16
+ }
17
+ return LC;
18
+ };
19
+ _proto.detect = function detect() {
20
+ var _process_env_LC_ALL, _ref, _ref1, _ref2;
21
+ var shellLocale = (_ref2 = (_ref1 = (_ref = (_process_env_LC_ALL = process.env.LC_ALL) !== null && _process_env_LC_ALL !== void 0 ? _process_env_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;
22
+ return this.formatShellLocale(shellLocale);
23
+ };
24
+ return I18CLILanguageDetector2;
25
+ }();
26
+ function getLocaleLanguage() {
27
+ var detector = new I18CLILanguageDetector();
28
+ return detector.detect();
29
+ }
30
+ export {
31
+ I18CLILanguageDetector,
32
+ getLocaleLanguage
33
+ };
@@ -0,0 +1,16 @@
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 {
15
+ getObjKeyMap
16
+ };
@@ -0,0 +1,49 @@
1
+ import { get } from "@modern-js/utils/lodash";
2
+ import { getObjKeyMap } from "./utils";
3
+ class I18n {
4
+ format(msg, vars) {
5
+ return msg.replace(/\{(\w+)\}/g, (_match, capture) => Object.prototype.hasOwnProperty.call(vars, capture) ? vars[capture] : capture);
6
+ }
7
+ getMessage(lang, key, vars, fallbackText) {
8
+ const languages = Object.keys(this.languageMap);
9
+ const resultLang = languages.find((l) => l === lang);
10
+ if (!resultLang && languages.length === 0) {
11
+ return fallbackText || key;
12
+ }
13
+ const model = this.languageMap[resultLang || "en"];
14
+ if (!model) {
15
+ return fallbackText || key;
16
+ }
17
+ const message = get(model, key);
18
+ const value = message || fallbackText || key;
19
+ if (typeof value === "string") {
20
+ return this.format(value, vars || {});
21
+ }
22
+ throw new Error("key is not a string");
23
+ }
24
+ init(language, languageMap) {
25
+ this.language = language || "en";
26
+ if (languageMap) {
27
+ this.languageMap = languageMap;
28
+ }
29
+ return getObjKeyMap(this.languageMap[this.language]);
30
+ }
31
+ changeLanguage(config) {
32
+ this.language = config.locale || "en";
33
+ }
34
+ t(key, vars, fallbackText) {
35
+ return this.getMessage(this.language, key, vars, fallbackText);
36
+ }
37
+ lang(lang) {
38
+ return {
39
+ t: (key, vars, fallbackText) => this.getMessage(lang, key, vars, fallbackText)
40
+ };
41
+ }
42
+ constructor() {
43
+ this.language = "en";
44
+ this.languageMap = {};
45
+ }
46
+ }
47
+ export {
48
+ I18n
49
+ };
@@ -0,0 +1,26 @@
1
+ class I18CLILanguageDetector {
2
+ formatShellLocale(rawLC) {
3
+ if (!rawLC) {
4
+ return "";
5
+ }
6
+ const LCs = rawLC.split(":");
7
+ const LC = LCs[0].split(".")[0].split("_")[0].split("-")[0];
8
+ if (LC === "C") {
9
+ return "";
10
+ }
11
+ return LC;
12
+ }
13
+ detect() {
14
+ var _process_env_LC_ALL, _ref, _ref1, _ref2;
15
+ const shellLocale = (_ref2 = (_ref1 = (_ref = (_process_env_LC_ALL = process.env.LC_ALL) !== null && _process_env_LC_ALL !== void 0 ? _process_env_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;
16
+ return this.formatShellLocale(shellLocale);
17
+ }
18
+ }
19
+ function getLocaleLanguage() {
20
+ const detector = new I18CLILanguageDetector();
21
+ return detector.detect();
22
+ }
23
+ export {
24
+ I18CLILanguageDetector,
25
+ getLocaleLanguage
26
+ };
@@ -0,0 +1,15 @@
1
+ import { isObject, isString } from "@modern-js/utils/lodash";
2
+ function getObjKeyMap(obj, prefix = "") {
3
+ const result = {};
4
+ Object.keys(obj).forEach((key) => {
5
+ if (isString(obj[key])) {
6
+ result[key] = prefix ? `${prefix}.${key}` : key;
7
+ } else if (isObject(obj[key])) {
8
+ result[key] = getObjKeyMap(obj[key], prefix ? `${prefix}.${key}` : key);
9
+ }
10
+ });
11
+ return result;
12
+ }
13
+ export {
14
+ getObjKeyMap
15
+ };
@@ -0,0 +1,34 @@
1
+ type Language = string;
2
+ interface LanguageModel {
3
+ [Key: string]: string | LanguageModel;
4
+ }
5
+ type TFunc = (key: string, vars?: {
6
+ [key: string]: string;
7
+ }, fallbackText?: string) => string;
8
+ 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
+ declare class I18n implements TI18n {
19
+ private language;
20
+ private languageMap;
21
+ private format;
22
+ private getMessage;
23
+ init<T extends LanguageModel>(language?: Language, languageMap?: Record<Language, T>): T;
24
+ changeLanguage(config: ChangeLanguageConfig): void;
25
+ t(key: string, vars?: {
26
+ [key: string]: string;
27
+ }, fallbackText?: string): string;
28
+ lang(lang: string): {
29
+ t: (key: string, vars?: {
30
+ [key: string]: string;
31
+ }, fallbackText?: string) => string;
32
+ };
33
+ }
34
+ export { I18n };
@@ -0,0 +1,6 @@
1
+ declare class I18CLILanguageDetector {
2
+ private formatShellLocale;
3
+ detect(): string;
4
+ }
5
+ export { I18CLILanguageDetector };
6
+ export declare function getLocaleLanguage(): string;
@@ -0,0 +1,5 @@
1
+ interface ITem {
2
+ [key: string]: string | ITem;
3
+ }
4
+ export declare function getObjKeyMap(obj: ITem, prefix?: string): ITem;
5
+ export {};
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "@modern-js/i18n-utils",
3
+ "description": "A Progressive React Framework for modern web development.",
4
+ "homepage": "https://modernjs.dev",
5
+ "bugs": "https://github.com/web-infra-dev/modern.js/issues",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/web-infra-dev/modern.js",
9
+ "directory": "packages/cli/plugin-i18n"
10
+ },
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "react",
14
+ "framework",
15
+ "modern",
16
+ "modern.js"
17
+ ],
18
+ "version": "0.0.0-canary-20250926071129",
19
+ "jsnext:source": "./src/index.ts",
20
+ "types": "./dist/types/index.d.ts",
21
+ "main": "./dist/cjs/index.js",
22
+ "module": "./dist/esm/index.js",
23
+ "typesVersions": {
24
+ "*": {
25
+ "language-detector": [
26
+ "./dist/types/languageDetector.d.ts"
27
+ ]
28
+ }
29
+ },
30
+ "exports": {
31
+ ".": {
32
+ "node": {
33
+ "import": "./dist/esm-node/index.js",
34
+ "require": "./dist/cjs/index.js"
35
+ },
36
+ "types": "./dist/types/index.d.ts",
37
+ "default": "./dist/esm/index.js"
38
+ },
39
+ "./language-detector": {
40
+ "node": {
41
+ "import": "./dist/esm-node/languageDetector.js",
42
+ "require": "./dist/cjs/languageDetector.js"
43
+ },
44
+ "types": "./dist/types/languageDetector.d.ts",
45
+ "default": "./dist/esm/languageDetector.js"
46
+ }
47
+ },
48
+ "dependencies": {
49
+ "@swc/helpers": "^0.5.17",
50
+ "@modern-js/utils": "0.0.0-canary-20250926071129"
51
+ },
52
+ "devDependencies": {
53
+ "@types/jest": "^29.5.14",
54
+ "@types/node": "^20",
55
+ "jest": "^29.7.0",
56
+ "typescript": "^5",
57
+ "@scripts/build": "0.0.0-canary-20250926071129",
58
+ "@scripts/jest-config": "0.0.0-canary-20250926071129"
59
+ },
60
+ "sideEffects": false,
61
+ "publishConfig": {
62
+ "registry": "https://registry.npmjs.org/",
63
+ "access": "public"
64
+ },
65
+ "scripts": {
66
+ "new": "modern-lib new",
67
+ "build": "modern-lib build",
68
+ "test": "jest --passWithNoTests"
69
+ }
70
+ }