@flowgram.ai/i18n 0.2.9 → 0.2.11

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/esm/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  // src/index.ts
2
+ import { I18n as I18nStore } from "i18n-js";
2
3
  import { Emitter } from "@flowgram.ai/utils";
3
4
 
4
5
  // src/i18n/zh-CN.ts
@@ -24,52 +25,64 @@ var en_US_default = {
24
25
  };
25
26
 
26
27
  // src/index.ts
28
+ function getDefaultLanugage() {
29
+ if (typeof navigator !== "object") return "en-US";
30
+ const defaultLanguage = navigator.language;
31
+ if (defaultLanguage === "en" || defaultLanguage === "en-US") {
32
+ return "en-US";
33
+ }
34
+ if (defaultLanguage === "zh" || defaultLanguage === "zh-CN") {
35
+ return "zh-CN";
36
+ }
37
+ return defaultLanguage;
38
+ }
27
39
  var I18nImpl = class {
28
40
  constructor(languages) {
29
- this._languages = /* @__PURE__ */ new Map();
30
- this._localLanguage = "en-US";
41
+ this.i18n = new I18nStore();
31
42
  this._onLanguageChangeEmitter = new Emitter();
32
43
  this.onLanguageChange = this._onLanguageChangeEmitter.event;
33
- languages.forEach((language) => this.addLanguage(language));
44
+ /**
45
+ * missing check
46
+ */
47
+ this.missingStrictMode = false;
48
+ this.addLanguages(languages);
49
+ this.locale = getDefaultLanugage();
50
+ this.i18n.onChange(() => {
51
+ this._onLanguageChangeEmitter.fire(this.i18n.locale);
52
+ });
34
53
  }
35
54
  /**
36
- * TODO support replace
37
55
  * @param key
38
56
  * @param options
39
57
  */
40
58
  t(key, options) {
41
- const contents = this._languages.get(this._localLanguage)?.contents || {};
42
- if (contents[key]) {
43
- return contents[key];
44
- }
45
- if (options?.disableReturnKey) return "";
46
- return key;
59
+ return this.i18n.t(key, {
60
+ defaultValue: this.missingStrictMode ? void 0 : key,
61
+ ...options
62
+ });
47
63
  }
48
- getLocalLanguage() {
49
- return this._localLanguage;
64
+ get locale() {
65
+ return this.i18n.locale;
50
66
  }
51
- setLocalLanguage(langId) {
52
- if (langId === this._localLanguage) return;
53
- this._localLanguage = langId;
54
- this._onLanguageChangeEmitter.fire(langId);
67
+ set locale(locale) {
68
+ this.i18n.locale = locale;
55
69
  }
56
- getLangauges() {
57
- return this._languages;
70
+ addLanguages(newLanguage) {
71
+ this.i18n.store(
72
+ newLanguage.reduce(
73
+ (dict, lang) => Object.assign(dict, {
74
+ [lang.languageId]: {
75
+ languageName: lang.languageName,
76
+ localizedLanguageName: lang.localizedLanguageName,
77
+ ...lang.contents
78
+ }
79
+ }),
80
+ {}
81
+ )
82
+ );
58
83
  }
59
- addLanguage(newLanguage) {
60
- let oldLanguage = this._languages.get(newLanguage.languageId);
61
- if (oldLanguage) {
62
- this._languages.set(newLanguage.languageId, {
63
- ...oldLanguage,
64
- ...newLanguage,
65
- contents: {
66
- ...oldLanguage.contents,
67
- ...newLanguage.contents
68
- }
69
- });
70
- } else {
71
- this._languages.set(newLanguage.languageId, newLanguage);
72
- }
84
+ addLanguage(language) {
85
+ this.addLanguages([language]);
73
86
  }
74
87
  };
75
88
  var I18n = new I18nImpl([en_US_default, zh_CN_default]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/i18n/zh-CN.ts","../../src/i18n/en-US.ts"],"sourcesContent":["import { Emitter } from '@flowgram.ai/utils';\n\ninterface I18nLanguage {\n languageId: string;\n languageName?: string;\n localizedLanguageName?: string;\n contents: Record<string, string>;\n}\n\nimport zhCNLanguageDefault from './i18n/zh-CN';\nimport enUSLanguageDefault from './i18n/en-US';\n\nclass I18nImpl {\n private _languages = new Map<string, I18nLanguage>();\n\n private _localLanguage = 'en-US';\n\n private _onLanguageChangeEmitter = new Emitter<string>();\n\n readonly onLanguageChange = this._onLanguageChangeEmitter.event;\n\n constructor(languages: I18nLanguage[]) {\n languages.forEach((language) => this.addLanguage(language));\n }\n\n /**\n * TODO support replace\n * @param key\n * @param options\n */\n t(key: string, options?: { disableReturnKey?: boolean }): string {\n const contents: Record<string, string> =\n this._languages.get(this._localLanguage)?.contents || {};\n if (contents[key]) {\n return contents[key];\n }\n if (options?.disableReturnKey) return '';\n return key;\n }\n\n getLocalLanguage() {\n return this._localLanguage;\n }\n\n setLocalLanguage(langId: string) {\n if (langId === this._localLanguage) return;\n this._localLanguage = langId;\n this._onLanguageChangeEmitter.fire(langId);\n }\n\n getLangauges() {\n return this._languages;\n }\n\n addLanguage(newLanguage: I18nLanguage): void {\n let oldLanguage = this._languages.get(newLanguage.languageId);\n if (oldLanguage) {\n this._languages.set(newLanguage.languageId, {\n ...oldLanguage,\n ...newLanguage,\n contents: {\n ...oldLanguage.contents,\n ...newLanguage.contents,\n },\n });\n } else {\n this._languages.set(newLanguage.languageId, newLanguage);\n }\n }\n}\n\nconst I18n = new I18nImpl([enUSLanguageDefault, zhCNLanguageDefault]);\n\nexport { I18n, I18nLanguage };\n","export default {\n languageId: 'zh-CN',\n languageName: 'Chinese',\n localizedLanguageName: '中文(中国)',\n contents: {\n Yes: '是',\n No: '否',\n },\n};\n","export default {\n languageId: 'en-US',\n languageName: 'English',\n localizedLanguageName: 'English',\n contents: {\n Yes: 'Yes',\n No: 'No',\n },\n};\n"],"mappings":";AAAA,SAAS,eAAe;;;ACAxB,IAAO,gBAAQ;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,uBAAuB;AAAA,EACvB,UAAU;AAAA,IACR,KAAK;AAAA,IACL,IAAI;AAAA,EACN;AACF;;;ACRA,IAAO,gBAAQ;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,uBAAuB;AAAA,EACvB,UAAU;AAAA,IACR,KAAK;AAAA,IACL,IAAI;AAAA,EACN;AACF;;;AFIA,IAAM,WAAN,MAAe;AAAA,EASb,YAAY,WAA2B;AARvC,SAAQ,aAAa,oBAAI,IAA0B;AAEnD,SAAQ,iBAAiB;AAEzB,SAAQ,2BAA2B,IAAI,QAAgB;AAEvD,SAAS,mBAAmB,KAAK,yBAAyB;AAGxD,cAAU,QAAQ,CAAC,aAAa,KAAK,YAAY,QAAQ,CAAC;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,EAAE,KAAa,SAAkD;AAC/D,UAAM,WACJ,KAAK,WAAW,IAAI,KAAK,cAAc,GAAG,YAAY,CAAC;AACzD,QAAI,SAAS,GAAG,GAAG;AACjB,aAAO,SAAS,GAAG;AAAA,IACrB;AACA,QAAI,SAAS,iBAAkB,QAAO;AACtC,WAAO;AAAA,EACT;AAAA,EAEA,mBAAmB;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,iBAAiB,QAAgB;AAC/B,QAAI,WAAW,KAAK,eAAgB;AACpC,SAAK,iBAAiB;AACtB,SAAK,yBAAyB,KAAK,MAAM;AAAA,EAC3C;AAAA,EAEA,eAAe;AACb,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAAY,aAAiC;AAC3C,QAAI,cAAc,KAAK,WAAW,IAAI,YAAY,UAAU;AAC5D,QAAI,aAAa;AACf,WAAK,WAAW,IAAI,YAAY,YAAY;AAAA,QAC1C,GAAG;AAAA,QACH,GAAG;AAAA,QACH,UAAU;AAAA,UACR,GAAG,YAAY;AAAA,UACf,GAAG,YAAY;AAAA,QACjB;AAAA,MACF,CAAC;AAAA,IACH,OAAO;AACL,WAAK,WAAW,IAAI,YAAY,YAAY,WAAW;AAAA,IACzD;AAAA,EACF;AACF;AAEA,IAAM,OAAO,IAAI,SAAS,CAAC,eAAqB,aAAmB,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/i18n/zh-CN.ts","../../src/i18n/en-US.ts"],"sourcesContent":["import { I18n as I18nStore } from 'i18n-js';\nimport { Emitter } from '@flowgram.ai/utils';\n\ntype Scope = Readonly<string | string[]>;\n\ninterface TranslateOptions {\n defaultValue?: any;\n [key: string]: any;\n}\n\ninterface I18nLanguage {\n languageId: string;\n languageName?: string;\n localizedLanguageName?: string;\n contents: Record<string, string | string[]>;\n}\n\nimport zhCNLanguageDefault from './i18n/zh-CN';\nimport enUSLanguageDefault from './i18n/en-US';\n\nfunction getDefaultLanugage(): string {\n if (typeof navigator !== 'object') return 'en-US';\n const defaultLanguage = navigator.language;\n if (defaultLanguage === 'en' || defaultLanguage === 'en-US') {\n return 'en-US';\n }\n if (defaultLanguage === 'zh' || defaultLanguage === 'zh-CN') {\n return 'zh-CN';\n }\n return defaultLanguage;\n}\nclass I18nImpl {\n public i18n = new I18nStore();\n\n private _onLanguageChangeEmitter = new Emitter<string>();\n\n readonly onLanguageChange = this._onLanguageChangeEmitter.event;\n\n constructor(languages: I18nLanguage[]) {\n this.addLanguages(languages);\n this.locale = getDefaultLanugage();\n this.i18n.onChange(() => {\n this._onLanguageChangeEmitter.fire(this.i18n.locale);\n });\n }\n\n /**\n * missing check\n */\n missingStrictMode = false;\n\n /**\n * @param key\n * @param options\n */\n t(key: Scope, options?: TranslateOptions): string {\n return this.i18n.t(key, {\n defaultValue: this.missingStrictMode ? undefined : key,\n ...options,\n });\n }\n\n get locale(): string {\n return this.i18n.locale;\n }\n\n set locale(locale: string) {\n this.i18n.locale = locale;\n }\n\n addLanguages(newLanguage: I18nLanguage[]): void {\n this.i18n.store(\n newLanguage.reduce(\n (dict, lang) =>\n Object.assign(dict, {\n [lang.languageId]: {\n languageName: lang.languageName,\n localizedLanguageName: lang.localizedLanguageName,\n ...lang.contents,\n },\n }),\n {}\n )\n );\n }\n\n addLanguage(language: I18nLanguage) {\n this.addLanguages([language]);\n }\n}\n\nconst I18n = new I18nImpl([enUSLanguageDefault, zhCNLanguageDefault]);\n\nexport { I18n, I18nLanguage };\n","export default {\n languageId: 'zh-CN',\n languageName: 'Chinese',\n localizedLanguageName: '中文(中国)',\n contents: {\n Yes: '是',\n No: '否',\n },\n};\n","export default {\n languageId: 'en-US',\n languageName: 'English',\n localizedLanguageName: 'English',\n contents: {\n Yes: 'Yes',\n No: 'No',\n },\n};\n"],"mappings":";AAAA,SAAS,QAAQ,iBAAiB;AAClC,SAAS,eAAe;;;ACDxB,IAAO,gBAAQ;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,uBAAuB;AAAA,EACvB,UAAU;AAAA,IACR,KAAK;AAAA,IACL,IAAI;AAAA,EACN;AACF;;;ACRA,IAAO,gBAAQ;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,uBAAuB;AAAA,EACvB,UAAU;AAAA,IACR,KAAK;AAAA,IACL,IAAI;AAAA,EACN;AACF;;;AFYA,SAAS,qBAA6B;AACpC,MAAI,OAAO,cAAc,SAAU,QAAO;AAC1C,QAAM,kBAAkB,UAAU;AAClC,MAAI,oBAAoB,QAAQ,oBAAoB,SAAS;AAC3D,WAAO;AAAA,EACT;AACA,MAAI,oBAAoB,QAAQ,oBAAoB,SAAS;AAC3D,WAAO;AAAA,EACT;AACA,SAAO;AACT;AACA,IAAM,WAAN,MAAe;AAAA,EAOb,YAAY,WAA2B;AANvC,SAAO,OAAO,IAAI,UAAU;AAE5B,SAAQ,2BAA2B,IAAI,QAAgB;AAEvD,SAAS,mBAAmB,KAAK,yBAAyB;AAa1D;AAAA;AAAA;AAAA,6BAAoB;AAVlB,SAAK,aAAa,SAAS;AAC3B,SAAK,SAAS,mBAAmB;AACjC,SAAK,KAAK,SAAS,MAAM;AACvB,WAAK,yBAAyB,KAAK,KAAK,KAAK,MAAM;AAAA,IACrD,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,EAAE,KAAY,SAAoC;AAChD,WAAO,KAAK,KAAK,EAAE,KAAK;AAAA,MACtB,cAAc,KAAK,oBAAoB,SAAY;AAAA,MACnD,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAI,OAAO,QAAgB;AACzB,SAAK,KAAK,SAAS;AAAA,EACrB;AAAA,EAEA,aAAa,aAAmC;AAC9C,SAAK,KAAK;AAAA,MACR,YAAY;AAAA,QACV,CAAC,MAAM,SACL,OAAO,OAAO,MAAM;AAAA,UAClB,CAAC,KAAK,UAAU,GAAG;AAAA,YACjB,cAAc,KAAK;AAAA,YACnB,uBAAuB,KAAK;AAAA,YAC5B,GAAG,KAAK;AAAA,UACV;AAAA,QACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,YAAY,UAAwB;AAClC,SAAK,aAAa,CAAC,QAAQ,CAAC;AAAA,EAC9B;AACF;AAEA,IAAM,OAAO,IAAI,SAAS,CAAC,eAAqB,aAAmB,CAAC;","names":[]}
package/dist/index.d.mts CHANGED
@@ -1,29 +1,35 @@
1
1
  import * as _flowgram_ai_utils from '@flowgram.ai/utils';
2
+ import { I18n as I18n$1 } from 'i18n-js';
2
3
 
4
+ type Scope = Readonly<string | string[]>;
5
+ interface TranslateOptions {
6
+ defaultValue?: any;
7
+ [key: string]: any;
8
+ }
3
9
  interface I18nLanguage {
4
10
  languageId: string;
5
11
  languageName?: string;
6
12
  localizedLanguageName?: string;
7
- contents: Record<string, string>;
13
+ contents: Record<string, string | string[]>;
8
14
  }
9
15
  declare class I18nImpl {
10
- private _languages;
11
- private _localLanguage;
16
+ i18n: I18n$1;
12
17
  private _onLanguageChangeEmitter;
13
18
  readonly onLanguageChange: _flowgram_ai_utils.Event<string>;
14
19
  constructor(languages: I18nLanguage[]);
15
20
  /**
16
- * TODO support replace
21
+ * missing check
22
+ */
23
+ missingStrictMode: boolean;
24
+ /**
17
25
  * @param key
18
26
  * @param options
19
27
  */
20
- t(key: string, options?: {
21
- disableReturnKey?: boolean;
22
- }): string;
23
- getLocalLanguage(): string;
24
- setLocalLanguage(langId: string): void;
25
- getLangauges(): Map<string, I18nLanguage>;
26
- addLanguage(newLanguage: I18nLanguage): void;
28
+ t(key: Scope, options?: TranslateOptions): string;
29
+ get locale(): string;
30
+ set locale(locale: string);
31
+ addLanguages(newLanguage: I18nLanguage[]): void;
32
+ addLanguage(language: I18nLanguage): void;
27
33
  }
28
34
  declare const I18n: I18nImpl;
29
35
 
package/dist/index.d.ts CHANGED
@@ -1,29 +1,35 @@
1
1
  import * as _flowgram_ai_utils from '@flowgram.ai/utils';
2
+ import { I18n as I18n$1 } from 'i18n-js';
2
3
 
4
+ type Scope = Readonly<string | string[]>;
5
+ interface TranslateOptions {
6
+ defaultValue?: any;
7
+ [key: string]: any;
8
+ }
3
9
  interface I18nLanguage {
4
10
  languageId: string;
5
11
  languageName?: string;
6
12
  localizedLanguageName?: string;
7
- contents: Record<string, string>;
13
+ contents: Record<string, string | string[]>;
8
14
  }
9
15
  declare class I18nImpl {
10
- private _languages;
11
- private _localLanguage;
16
+ i18n: I18n$1;
12
17
  private _onLanguageChangeEmitter;
13
18
  readonly onLanguageChange: _flowgram_ai_utils.Event<string>;
14
19
  constructor(languages: I18nLanguage[]);
15
20
  /**
16
- * TODO support replace
21
+ * missing check
22
+ */
23
+ missingStrictMode: boolean;
24
+ /**
17
25
  * @param key
18
26
  * @param options
19
27
  */
20
- t(key: string, options?: {
21
- disableReturnKey?: boolean;
22
- }): string;
23
- getLocalLanguage(): string;
24
- setLocalLanguage(langId: string): void;
25
- getLangauges(): Map<string, I18nLanguage>;
26
- addLanguage(newLanguage: I18nLanguage): void;
28
+ t(key: Scope, options?: TranslateOptions): string;
29
+ get locale(): string;
30
+ set locale(locale: string);
31
+ addLanguages(newLanguage: I18nLanguage[]): void;
32
+ addLanguage(language: I18nLanguage): void;
27
33
  }
28
34
  declare const I18n: I18nImpl;
29
35
 
package/dist/index.js CHANGED
@@ -23,6 +23,7 @@ __export(src_exports, {
23
23
  I18n: () => I18n
24
24
  });
25
25
  module.exports = __toCommonJS(src_exports);
26
+ var import_i18n_js = require("i18n-js");
26
27
  var import_utils = require("@flowgram.ai/utils");
27
28
 
28
29
  // src/i18n/zh-CN.ts
@@ -48,52 +49,64 @@ var en_US_default = {
48
49
  };
49
50
 
50
51
  // src/index.ts
52
+ function getDefaultLanugage() {
53
+ if (typeof navigator !== "object") return "en-US";
54
+ const defaultLanguage = navigator.language;
55
+ if (defaultLanguage === "en" || defaultLanguage === "en-US") {
56
+ return "en-US";
57
+ }
58
+ if (defaultLanguage === "zh" || defaultLanguage === "zh-CN") {
59
+ return "zh-CN";
60
+ }
61
+ return defaultLanguage;
62
+ }
51
63
  var I18nImpl = class {
52
64
  constructor(languages) {
53
- this._languages = /* @__PURE__ */ new Map();
54
- this._localLanguage = "en-US";
65
+ this.i18n = new import_i18n_js.I18n();
55
66
  this._onLanguageChangeEmitter = new import_utils.Emitter();
56
67
  this.onLanguageChange = this._onLanguageChangeEmitter.event;
57
- languages.forEach((language) => this.addLanguage(language));
68
+ /**
69
+ * missing check
70
+ */
71
+ this.missingStrictMode = false;
72
+ this.addLanguages(languages);
73
+ this.locale = getDefaultLanugage();
74
+ this.i18n.onChange(() => {
75
+ this._onLanguageChangeEmitter.fire(this.i18n.locale);
76
+ });
58
77
  }
59
78
  /**
60
- * TODO support replace
61
79
  * @param key
62
80
  * @param options
63
81
  */
64
82
  t(key, options) {
65
- const contents = this._languages.get(this._localLanguage)?.contents || {};
66
- if (contents[key]) {
67
- return contents[key];
68
- }
69
- if (options?.disableReturnKey) return "";
70
- return key;
83
+ return this.i18n.t(key, {
84
+ defaultValue: this.missingStrictMode ? void 0 : key,
85
+ ...options
86
+ });
71
87
  }
72
- getLocalLanguage() {
73
- return this._localLanguage;
88
+ get locale() {
89
+ return this.i18n.locale;
74
90
  }
75
- setLocalLanguage(langId) {
76
- if (langId === this._localLanguage) return;
77
- this._localLanguage = langId;
78
- this._onLanguageChangeEmitter.fire(langId);
91
+ set locale(locale) {
92
+ this.i18n.locale = locale;
79
93
  }
80
- getLangauges() {
81
- return this._languages;
94
+ addLanguages(newLanguage) {
95
+ this.i18n.store(
96
+ newLanguage.reduce(
97
+ (dict, lang) => Object.assign(dict, {
98
+ [lang.languageId]: {
99
+ languageName: lang.languageName,
100
+ localizedLanguageName: lang.localizedLanguageName,
101
+ ...lang.contents
102
+ }
103
+ }),
104
+ {}
105
+ )
106
+ );
82
107
  }
83
- addLanguage(newLanguage) {
84
- let oldLanguage = this._languages.get(newLanguage.languageId);
85
- if (oldLanguage) {
86
- this._languages.set(newLanguage.languageId, {
87
- ...oldLanguage,
88
- ...newLanguage,
89
- contents: {
90
- ...oldLanguage.contents,
91
- ...newLanguage.contents
92
- }
93
- });
94
- } else {
95
- this._languages.set(newLanguage.languageId, newLanguage);
96
- }
108
+ addLanguage(language) {
109
+ this.addLanguages([language]);
97
110
  }
98
111
  };
99
112
  var I18n = new I18nImpl([en_US_default, zh_CN_default]);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/i18n/zh-CN.ts","../src/i18n/en-US.ts"],"sourcesContent":["import { Emitter } from '@flowgram.ai/utils';\n\ninterface I18nLanguage {\n languageId: string;\n languageName?: string;\n localizedLanguageName?: string;\n contents: Record<string, string>;\n}\n\nimport zhCNLanguageDefault from './i18n/zh-CN';\nimport enUSLanguageDefault from './i18n/en-US';\n\nclass I18nImpl {\n private _languages = new Map<string, I18nLanguage>();\n\n private _localLanguage = 'en-US';\n\n private _onLanguageChangeEmitter = new Emitter<string>();\n\n readonly onLanguageChange = this._onLanguageChangeEmitter.event;\n\n constructor(languages: I18nLanguage[]) {\n languages.forEach((language) => this.addLanguage(language));\n }\n\n /**\n * TODO support replace\n * @param key\n * @param options\n */\n t(key: string, options?: { disableReturnKey?: boolean }): string {\n const contents: Record<string, string> =\n this._languages.get(this._localLanguage)?.contents || {};\n if (contents[key]) {\n return contents[key];\n }\n if (options?.disableReturnKey) return '';\n return key;\n }\n\n getLocalLanguage() {\n return this._localLanguage;\n }\n\n setLocalLanguage(langId: string) {\n if (langId === this._localLanguage) return;\n this._localLanguage = langId;\n this._onLanguageChangeEmitter.fire(langId);\n }\n\n getLangauges() {\n return this._languages;\n }\n\n addLanguage(newLanguage: I18nLanguage): void {\n let oldLanguage = this._languages.get(newLanguage.languageId);\n if (oldLanguage) {\n this._languages.set(newLanguage.languageId, {\n ...oldLanguage,\n ...newLanguage,\n contents: {\n ...oldLanguage.contents,\n ...newLanguage.contents,\n },\n });\n } else {\n this._languages.set(newLanguage.languageId, newLanguage);\n }\n }\n}\n\nconst I18n = new I18nImpl([enUSLanguageDefault, zhCNLanguageDefault]);\n\nexport { I18n, I18nLanguage };\n","export default {\n languageId: 'zh-CN',\n languageName: 'Chinese',\n localizedLanguageName: '中文(中国)',\n contents: {\n Yes: '是',\n No: '否',\n },\n};\n","export default {\n languageId: 'en-US',\n languageName: 'English',\n localizedLanguageName: 'English',\n contents: {\n Yes: 'Yes',\n No: 'No',\n },\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAwB;;;ACAxB,IAAO,gBAAQ;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,uBAAuB;AAAA,EACvB,UAAU;AAAA,IACR,KAAK;AAAA,IACL,IAAI;AAAA,EACN;AACF;;;ACRA,IAAO,gBAAQ;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,uBAAuB;AAAA,EACvB,UAAU;AAAA,IACR,KAAK;AAAA,IACL,IAAI;AAAA,EACN;AACF;;;AFIA,IAAM,WAAN,MAAe;AAAA,EASb,YAAY,WAA2B;AARvC,SAAQ,aAAa,oBAAI,IAA0B;AAEnD,SAAQ,iBAAiB;AAEzB,SAAQ,2BAA2B,IAAI,qBAAgB;AAEvD,SAAS,mBAAmB,KAAK,yBAAyB;AAGxD,cAAU,QAAQ,CAAC,aAAa,KAAK,YAAY,QAAQ,CAAC;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,EAAE,KAAa,SAAkD;AAC/D,UAAM,WACJ,KAAK,WAAW,IAAI,KAAK,cAAc,GAAG,YAAY,CAAC;AACzD,QAAI,SAAS,GAAG,GAAG;AACjB,aAAO,SAAS,GAAG;AAAA,IACrB;AACA,QAAI,SAAS,iBAAkB,QAAO;AACtC,WAAO;AAAA,EACT;AAAA,EAEA,mBAAmB;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,iBAAiB,QAAgB;AAC/B,QAAI,WAAW,KAAK,eAAgB;AACpC,SAAK,iBAAiB;AACtB,SAAK,yBAAyB,KAAK,MAAM;AAAA,EAC3C;AAAA,EAEA,eAAe;AACb,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAAY,aAAiC;AAC3C,QAAI,cAAc,KAAK,WAAW,IAAI,YAAY,UAAU;AAC5D,QAAI,aAAa;AACf,WAAK,WAAW,IAAI,YAAY,YAAY;AAAA,QAC1C,GAAG;AAAA,QACH,GAAG;AAAA,QACH,UAAU;AAAA,UACR,GAAG,YAAY;AAAA,UACf,GAAG,YAAY;AAAA,QACjB;AAAA,MACF,CAAC;AAAA,IACH,OAAO;AACL,WAAK,WAAW,IAAI,YAAY,YAAY,WAAW;AAAA,IACzD;AAAA,EACF;AACF;AAEA,IAAM,OAAO,IAAI,SAAS,CAAC,eAAqB,aAAmB,CAAC;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/i18n/zh-CN.ts","../src/i18n/en-US.ts"],"sourcesContent":["import { I18n as I18nStore } from 'i18n-js';\nimport { Emitter } from '@flowgram.ai/utils';\n\ntype Scope = Readonly<string | string[]>;\n\ninterface TranslateOptions {\n defaultValue?: any;\n [key: string]: any;\n}\n\ninterface I18nLanguage {\n languageId: string;\n languageName?: string;\n localizedLanguageName?: string;\n contents: Record<string, string | string[]>;\n}\n\nimport zhCNLanguageDefault from './i18n/zh-CN';\nimport enUSLanguageDefault from './i18n/en-US';\n\nfunction getDefaultLanugage(): string {\n if (typeof navigator !== 'object') return 'en-US';\n const defaultLanguage = navigator.language;\n if (defaultLanguage === 'en' || defaultLanguage === 'en-US') {\n return 'en-US';\n }\n if (defaultLanguage === 'zh' || defaultLanguage === 'zh-CN') {\n return 'zh-CN';\n }\n return defaultLanguage;\n}\nclass I18nImpl {\n public i18n = new I18nStore();\n\n private _onLanguageChangeEmitter = new Emitter<string>();\n\n readonly onLanguageChange = this._onLanguageChangeEmitter.event;\n\n constructor(languages: I18nLanguage[]) {\n this.addLanguages(languages);\n this.locale = getDefaultLanugage();\n this.i18n.onChange(() => {\n this._onLanguageChangeEmitter.fire(this.i18n.locale);\n });\n }\n\n /**\n * missing check\n */\n missingStrictMode = false;\n\n /**\n * @param key\n * @param options\n */\n t(key: Scope, options?: TranslateOptions): string {\n return this.i18n.t(key, {\n defaultValue: this.missingStrictMode ? undefined : key,\n ...options,\n });\n }\n\n get locale(): string {\n return this.i18n.locale;\n }\n\n set locale(locale: string) {\n this.i18n.locale = locale;\n }\n\n addLanguages(newLanguage: I18nLanguage[]): void {\n this.i18n.store(\n newLanguage.reduce(\n (dict, lang) =>\n Object.assign(dict, {\n [lang.languageId]: {\n languageName: lang.languageName,\n localizedLanguageName: lang.localizedLanguageName,\n ...lang.contents,\n },\n }),\n {}\n )\n );\n }\n\n addLanguage(language: I18nLanguage) {\n this.addLanguages([language]);\n }\n}\n\nconst I18n = new I18nImpl([enUSLanguageDefault, zhCNLanguageDefault]);\n\nexport { I18n, I18nLanguage };\n","export default {\n languageId: 'zh-CN',\n languageName: 'Chinese',\n localizedLanguageName: '中文(中国)',\n contents: {\n Yes: '是',\n No: '否',\n },\n};\n","export default {\n languageId: 'en-US',\n languageName: 'English',\n localizedLanguageName: 'English',\n contents: {\n Yes: 'Yes',\n No: 'No',\n },\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAkC;AAClC,mBAAwB;;;ACDxB,IAAO,gBAAQ;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,uBAAuB;AAAA,EACvB,UAAU;AAAA,IACR,KAAK;AAAA,IACL,IAAI;AAAA,EACN;AACF;;;ACRA,IAAO,gBAAQ;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,uBAAuB;AAAA,EACvB,UAAU;AAAA,IACR,KAAK;AAAA,IACL,IAAI;AAAA,EACN;AACF;;;AFYA,SAAS,qBAA6B;AACpC,MAAI,OAAO,cAAc,SAAU,QAAO;AAC1C,QAAM,kBAAkB,UAAU;AAClC,MAAI,oBAAoB,QAAQ,oBAAoB,SAAS;AAC3D,WAAO;AAAA,EACT;AACA,MAAI,oBAAoB,QAAQ,oBAAoB,SAAS;AAC3D,WAAO;AAAA,EACT;AACA,SAAO;AACT;AACA,IAAM,WAAN,MAAe;AAAA,EAOb,YAAY,WAA2B;AANvC,SAAO,OAAO,IAAI,eAAAA,KAAU;AAE5B,SAAQ,2BAA2B,IAAI,qBAAgB;AAEvD,SAAS,mBAAmB,KAAK,yBAAyB;AAa1D;AAAA;AAAA;AAAA,6BAAoB;AAVlB,SAAK,aAAa,SAAS;AAC3B,SAAK,SAAS,mBAAmB;AACjC,SAAK,KAAK,SAAS,MAAM;AACvB,WAAK,yBAAyB,KAAK,KAAK,KAAK,MAAM;AAAA,IACrD,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,EAAE,KAAY,SAAoC;AAChD,WAAO,KAAK,KAAK,EAAE,KAAK;AAAA,MACtB,cAAc,KAAK,oBAAoB,SAAY;AAAA,MACnD,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAI,OAAO,QAAgB;AACzB,SAAK,KAAK,SAAS;AAAA,EACrB;AAAA,EAEA,aAAa,aAAmC;AAC9C,SAAK,KAAK;AAAA,MACR,YAAY;AAAA,QACV,CAAC,MAAM,SACL,OAAO,OAAO,MAAM;AAAA,UAClB,CAAC,KAAK,UAAU,GAAG;AAAA,YACjB,cAAc,KAAK;AAAA,YACnB,uBAAuB,KAAK;AAAA,YAC5B,GAAG,KAAK;AAAA,UACV;AAAA,QACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,YAAY,UAAwB;AAClC,SAAK,aAAa,CAAC,QAAQ,CAAC;AAAA,EAC9B;AACF;AAEA,IAAM,OAAO,IAAI,SAAS,CAAC,eAAqB,aAAmB,CAAC;","names":["I18nStore"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowgram.ai/i18n",
3
- "version": "0.2.9",
3
+ "version": "0.2.11",
4
4
  "homepage": "https://flowgram.ai/",
5
5
  "repository": "https://github.com/bytedance/flowgram.ai",
6
6
  "license": "MIT",
@@ -16,7 +16,8 @@
16
16
  "dist"
17
17
  ],
18
18
  "dependencies": {
19
- "@flowgram.ai/utils": "0.2.9"
19
+ "i18n-js": "^4.5.1",
20
+ "@flowgram.ai/utils": "0.2.11"
20
21
  },
21
22
  "devDependencies": {
22
23
  "@testing-library/react": "^12",
@@ -28,8 +29,8 @@
28
29
  "eslint": "^8.54.0",
29
30
  "tsup": "^8.0.1",
30
31
  "vitest": "^0.34.6",
31
- "@flowgram.ai/ts-config": "0.2.9",
32
- "@flowgram.ai/eslint-config": "0.2.9"
32
+ "@flowgram.ai/eslint-config": "0.2.11",
33
+ "@flowgram.ai/ts-config": "0.2.11"
33
34
  },
34
35
  "publishConfig": {
35
36
  "access": "public",