@shuo-li/i18n 1.0.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.
@@ -0,0 +1,88 @@
1
+ // src/adapters/web-worker-adapter.ts
2
+ var WebWorkerAdapter = class {
3
+ constructor(worker) {
4
+ this.worker = worker;
5
+ }
6
+ postMessage(data) {
7
+ this.worker.postMessage(data);
8
+ }
9
+ onMessage(handler) {
10
+ this.worker.onmessage = (e) => handler(e.data);
11
+ }
12
+ terminate() {
13
+ this.worker.terminate();
14
+ }
15
+ };
16
+
17
+ // src/core/hooks.ts
18
+ import {
19
+ useTranslation,
20
+ Trans,
21
+ I18nextProvider
22
+ } from "react-i18next";
23
+ import { useTranslation as useTranslation2 } from "react-i18next";
24
+ import { useMemo } from "react";
25
+ function useDict(dictCode) {
26
+ const { t, i18n } = useTranslation2("ENUMS");
27
+ return useMemo(() => {
28
+ const directNs = i18n.getResourceBundle(i18n.language, "ENUMS");
29
+ const directEntry = directNs?.[dictCode];
30
+ if (directEntry && typeof directEntry === "object" && !Array.isArray(directEntry)) {
31
+ const raw = directEntry;
32
+ return {
33
+ raw,
34
+ options: Object.entries(raw).map(([value, label]) => ({ value, label }))
35
+ };
36
+ }
37
+ const wmsDict = directNs?.["wms_dict_value"]?.["dict_value_name_term_value"];
38
+ if (wmsDict) {
39
+ const prefix = `${dictCode}_`;
40
+ const raw = {};
41
+ for (const [k, v] of Object.entries(wmsDict)) {
42
+ if (k.startsWith(prefix)) {
43
+ raw[k.slice(prefix.length)] = v;
44
+ }
45
+ }
46
+ if (Object.keys(raw).length > 0) {
47
+ return {
48
+ raw,
49
+ options: Object.entries(raw).map(([value, label]) => ({ value, label }))
50
+ };
51
+ }
52
+ }
53
+ if (dictCode === "bool_active") {
54
+ return buildBoolActive(i18n.language, i18n);
55
+ }
56
+ const fallbackKey = `${dictCode}`;
57
+ const fallbackVal = t(fallbackKey, { returnObjects: true });
58
+ if (fallbackVal && typeof fallbackVal === "object") {
59
+ const raw = fallbackVal;
60
+ return {
61
+ raw,
62
+ options: Object.entries(raw).map(([value, label]) => ({ value, label }))
63
+ };
64
+ }
65
+ return { raw: {}, options: [] };
66
+ }, [dictCode, i18n.language]);
67
+ }
68
+ function buildBoolActive(lang, i18n) {
69
+ const common = i18n.getResourceBundle(lang, "COMMON");
70
+ const booleans = common?.["select"]?.["boolean"];
71
+ const button = common?.["button"];
72
+ const trueLabel = button?.["enable"] ?? booleans?.["true"] ?? "\u542F\u7528";
73
+ const falseLabel = button?.["deactivate"] ?? booleans?.["false"] ?? "\u505C\u7528";
74
+ const raw = { true: trueLabel, false: falseLabel };
75
+ return {
76
+ raw,
77
+ options: [
78
+ { value: "true", label: trueLabel },
79
+ { value: "false", label: falseLabel }
80
+ ]
81
+ };
82
+ }
83
+
84
+ export {
85
+ WebWorkerAdapter,
86
+ useDict,
87
+ useTranslation
88
+ };
@@ -0,0 +1,16 @@
1
+ interface DictResult {
2
+ raw: Record<string, string>;
3
+ options: Array<{
4
+ value: string;
5
+ label: string;
6
+ }>;
7
+ }
8
+ /**
9
+ * 从 ENUMS namespace 读取指定字典码。
10
+ * 支持两种后端格式:
11
+ * 格式 A:{ "warehouse_type": { "standard": "标准仓" } }
12
+ * 格式 B:{ "wms_dict_value": { "dict_value_name_term_value": { "warehouse_type_standard": "标准仓" } } }
13
+ */
14
+ declare function useDict(dictCode: string): DictResult;
15
+
16
+ export { useDict as u };
@@ -0,0 +1,16 @@
1
+ interface DictResult {
2
+ raw: Record<string, string>;
3
+ options: Array<{
4
+ value: string;
5
+ label: string;
6
+ }>;
7
+ }
8
+ /**
9
+ * 从 ENUMS namespace 读取指定字典码。
10
+ * 支持两种后端格式:
11
+ * 格式 A:{ "warehouse_type": { "standard": "标准仓" } }
12
+ * 格式 B:{ "wms_dict_value": { "dict_value_name_term_value": { "warehouse_type_standard": "标准仓" } } }
13
+ */
14
+ declare function useDict(dictCode: string): DictResult;
15
+
16
+ export { useDict as u };
package/dist/index.cjs ADDED
@@ -0,0 +1,223 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+
4
+
5
+ var _chunkAJJKJPNBcjs = require('./chunk-AJJKJPNB.cjs');
6
+
7
+
8
+
9
+
10
+ var _chunkJDOLFHBScjs = require('./chunk-JDOLFHBS.cjs');
11
+
12
+ // src/index.ts
13
+ var _i18next = require('i18next'); var _i18next2 = _interopRequireDefault(_i18next);
14
+ var _reacti18next = require('react-i18next');
15
+
16
+ // src/storage/indexeddb.ts
17
+ var DB_NAME = "i18n_cache";
18
+ var SCHEMA_VERSION = 2;
19
+ var META_STORE = "i18n_meta";
20
+ function resourceStoreName(name) {
21
+ return `i18n_resources_${name}`;
22
+ }
23
+ var dbInstance = null;
24
+ var dbOpenPromise = null;
25
+ var dbStoreNames = [];
26
+ function openDB(storeNames) {
27
+ return new Promise((resolve, reject) => {
28
+ const request = indexedDB.open(DB_NAME, SCHEMA_VERSION);
29
+ request.onupgradeneeded = (event) => {
30
+ const db = event.target.result;
31
+ for (const name of storeNames) {
32
+ const storeName = resourceStoreName(name);
33
+ if (!db.objectStoreNames.contains(storeName)) {
34
+ const s = db.createObjectStore(storeName, { keyPath: "key" });
35
+ s.createIndex("by_module", "moduleCode");
36
+ s.createIndex("by_language", "langCode");
37
+ }
38
+ }
39
+ if (!db.objectStoreNames.contains(META_STORE)) {
40
+ db.createObjectStore(META_STORE, { keyPath: "key" });
41
+ }
42
+ };
43
+ request.onsuccess = () => {
44
+ const db = request.result;
45
+ db.onversionchange = () => {
46
+ db.close();
47
+ dbInstance = null;
48
+ dbOpenPromise = null;
49
+ };
50
+ db.onclose = () => {
51
+ dbInstance = null;
52
+ dbOpenPromise = null;
53
+ };
54
+ resolve(db);
55
+ };
56
+ request.onerror = () => reject(request.error);
57
+ request.onblocked = () => reject(new Error("[i18n] IndexedDB open blocked"));
58
+ });
59
+ }
60
+ function getDB(storeNames) {
61
+ if (dbInstance) return Promise.resolve(dbInstance);
62
+ if (!dbOpenPromise) {
63
+ dbOpenPromise = openDB(_nullishCoalesce(storeNames, () => ( dbStoreNames))).then((db) => {
64
+ dbInstance = db;
65
+ dbOpenPromise = null;
66
+ return db;
67
+ }).catch((err) => {
68
+ dbOpenPromise = null;
69
+ throw err;
70
+ });
71
+ }
72
+ return dbOpenPromise;
73
+ }
74
+ function idbRequest(req) {
75
+ return new Promise((resolve, reject) => {
76
+ req.onsuccess = () => resolve(req.result);
77
+ req.onerror = () => reject(req.error);
78
+ });
79
+ }
80
+ async function withRetry(fn) {
81
+ try {
82
+ return await fn();
83
+ } catch (e) {
84
+ dbInstance = null;
85
+ return fn();
86
+ }
87
+ }
88
+ var IndexedDBAdapter = class {
89
+ async ensureSchemaVersion(stores) {
90
+ dbStoreNames = stores.map((s) => s.name);
91
+ const db = await getDB(dbStoreNames);
92
+ const stored = await this.getMeta("schema_version");
93
+ const storedVersion = Number(_nullishCoalesce(stored, () => ( 0)));
94
+ if (storedVersion === 0) {
95
+ await this.setMeta("schema_version", String(SCHEMA_VERSION));
96
+ } else if (storedVersion < SCHEMA_VERSION) {
97
+ db.close();
98
+ dbInstance = null;
99
+ await new Promise((resolve, reject) => {
100
+ const req = indexedDB.deleteDatabase(DB_NAME);
101
+ req.onsuccess = () => resolve();
102
+ req.onerror = () => reject(req.error);
103
+ });
104
+ dbInstance = await openDB(dbStoreNames);
105
+ await this.setMeta("schema_version", String(SCHEMA_VERSION));
106
+ } else if (storedVersion > SCHEMA_VERSION) {
107
+ throw new Error(`[i18n] DB schema version ${storedVersion} > current ${SCHEMA_VERSION}`);
108
+ }
109
+ }
110
+ async getRecord(storeName, key) {
111
+ return withRetry(async () => {
112
+ const db = await getDB();
113
+ const tx = db.transaction(resourceStoreName(storeName), "readonly");
114
+ const store = tx.objectStore(resourceStoreName(storeName));
115
+ return idbRequest(store.get(key));
116
+ });
117
+ }
118
+ async putRecord(storeName, record) {
119
+ await withRetry(async () => {
120
+ const db = await getDB();
121
+ const tx = db.transaction(resourceStoreName(storeName), "readwrite");
122
+ const store = tx.objectStore(resourceStoreName(storeName));
123
+ await idbRequest(store.put(record));
124
+ });
125
+ }
126
+ async getAllByModule(storeName, moduleCode) {
127
+ return withRetry(async () => {
128
+ const db = await getDB();
129
+ const tx = db.transaction(resourceStoreName(storeName), "readonly");
130
+ const index = tx.objectStore(resourceStoreName(storeName)).index("by_module");
131
+ return idbRequest(index.getAll(moduleCode));
132
+ });
133
+ }
134
+ async clearStore(storeName) {
135
+ await withRetry(async () => {
136
+ const db = await getDB();
137
+ const tx = db.transaction(resourceStoreName(storeName), "readwrite");
138
+ await idbRequest(tx.objectStore(resourceStoreName(storeName)).clear());
139
+ });
140
+ }
141
+ async getMeta(key) {
142
+ return withRetry(async () => {
143
+ const db = await getDB();
144
+ const tx = db.transaction(META_STORE, "readonly");
145
+ const result = await idbRequest(
146
+ tx.objectStore(META_STORE).get(key)
147
+ );
148
+ return _nullishCoalesce(_optionalChain([result, 'optionalAccess', _ => _.value]), () => ( null));
149
+ });
150
+ }
151
+ async setMeta(key, value) {
152
+ await withRetry(async () => {
153
+ const db = await getDB();
154
+ const tx = db.transaction(META_STORE, "readwrite");
155
+ await idbRequest(tx.objectStore(META_STORE).put({ key, value }));
156
+ });
157
+ }
158
+ async hasLoginResources(stores) {
159
+ return withRetry(async () => {
160
+ const db = await getDB();
161
+ for (const store of stores) {
162
+ const tx = db.transaction(resourceStoreName(store.name), "readonly");
163
+ const objStore = tx.objectStore(resourceStoreName(store.name));
164
+ const found = await new Promise((resolve, reject) => {
165
+ const req = objStore.openCursor();
166
+ req.onerror = () => reject(req.error);
167
+ req.onsuccess = () => {
168
+ const cursor = req.result;
169
+ if (!cursor) {
170
+ resolve(false);
171
+ return;
172
+ }
173
+ const record = cursor.value;
174
+ if (!record.key.startsWith("UNLOGIN_")) {
175
+ resolve(true);
176
+ return;
177
+ }
178
+ cursor.continue();
179
+ };
180
+ });
181
+ if (found) return true;
182
+ }
183
+ return false;
184
+ });
185
+ }
186
+ };
187
+
188
+ // src/index.ts
189
+ if (!_i18next2.default.isInitialized) {
190
+ void _i18next2.default.use(_reacti18next.initReactI18next).init({
191
+ lng: "__loading__",
192
+ fallbackLng: "zh_CN",
193
+ ns: ["COMMON"],
194
+ defaultNS: "COMMON",
195
+ resources: {},
196
+ interpolation: { escapeValue: false },
197
+ react: {
198
+ useSuspense: false,
199
+ bindI18n: "languageChanged",
200
+ bindI18nStore: "added removed",
201
+ transSupportBasicHtmlNodes: true,
202
+ transKeepBasicHtmlNodesFor: ["br", "p", "strong", "i", "em", "b", "a", "span"]
203
+ }
204
+ });
205
+ }
206
+ var { initI18n, closeSSE, ensureModules, getResource, getAllRecordsByModule } = _chunkJDOLFHBScjs.createI18nManager.call(void 0, {
207
+ storage: new IndexedDBAdapter(),
208
+ workerWritesDB: true,
209
+ createWorker: () => new (0, _chunkAJJKJPNBcjs.WebWorkerAdapter)(
210
+ new Worker(new URL("./workers/preload-worker.js", import.meta.url), { type: "module" })
211
+ )
212
+ });
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+ exports.I18N_RESOURCES_UPDATED_EVENT = _chunkJDOLFHBScjs.I18N_RESOURCES_UPDATED_EVENT; exports.closeSSE = closeSSE; exports.emitI18nResourcesUpdated = _chunkJDOLFHBScjs.emitI18nResourcesUpdated; exports.ensureModules = ensureModules; exports.getAllRecordsByModule = getAllRecordsByModule; exports.getResource = getResource; exports.initI18n = initI18n; exports.useDict = _chunkAJJKJPNBcjs.useDict; exports.useTranslation = _chunkAJJKJPNBcjs.useTranslation;
@@ -0,0 +1,12 @@
1
+ import { c as closeSSE$1, e as ensureModules$1, g as getAllRecordsByModule$1, a as getResource$1, i as initI18n$1 } from './cacheEvents-kOPDM3Ed.cjs';
2
+ export { I as I18N_RESOURCES_UPDATED_EVENT, b as I18nInitOptions, P as PullLangBlock, R as ResourceRecord, S as SSEMessage, d as StandardPullParams, f as StoreConfig, W as WorkerLike, h as emitI18nResourcesUpdated } from './cacheEvents-kOPDM3Ed.cjs';
3
+ export { u as useDict } from './hooks-ClO29Chr.cjs';
4
+ export { useTranslation } from 'react-i18next';
5
+
6
+ declare const initI18n: typeof initI18n$1;
7
+ declare const closeSSE: typeof closeSSE$1;
8
+ declare const ensureModules: typeof ensureModules$1;
9
+ declare const getResource: typeof getResource$1;
10
+ declare const getAllRecordsByModule: typeof getAllRecordsByModule$1;
11
+
12
+ export { closeSSE, ensureModules, getAllRecordsByModule, getResource, initI18n };
@@ -0,0 +1,12 @@
1
+ import { c as closeSSE$1, e as ensureModules$1, g as getAllRecordsByModule$1, a as getResource$1, i as initI18n$1 } from './cacheEvents-kOPDM3Ed.js';
2
+ export { I as I18N_RESOURCES_UPDATED_EVENT, b as I18nInitOptions, P as PullLangBlock, R as ResourceRecord, S as SSEMessage, d as StandardPullParams, f as StoreConfig, W as WorkerLike, h as emitI18nResourcesUpdated } from './cacheEvents-kOPDM3Ed.js';
3
+ export { u as useDict } from './hooks-ClO29Chr.js';
4
+ export { useTranslation } from 'react-i18next';
5
+
6
+ declare const initI18n: typeof initI18n$1;
7
+ declare const closeSSE: typeof closeSSE$1;
8
+ declare const ensureModules: typeof ensureModules$1;
9
+ declare const getResource: typeof getResource$1;
10
+ declare const getAllRecordsByModule: typeof getAllRecordsByModule$1;
11
+
12
+ export { closeSSE, ensureModules, getAllRecordsByModule, getResource, initI18n };
package/dist/index.js ADDED
@@ -0,0 +1,223 @@
1
+ import {
2
+ WebWorkerAdapter,
3
+ useDict,
4
+ useTranslation
5
+ } from "./chunk-VUDMWZAA.js";
6
+ import {
7
+ I18N_RESOURCES_UPDATED_EVENT,
8
+ createI18nManager,
9
+ emitI18nResourcesUpdated
10
+ } from "./chunk-ONDHZEK4.js";
11
+
12
+ // src/index.ts
13
+ import i18n from "i18next";
14
+ import { initReactI18next } from "react-i18next";
15
+
16
+ // src/storage/indexeddb.ts
17
+ var DB_NAME = "i18n_cache";
18
+ var SCHEMA_VERSION = 2;
19
+ var META_STORE = "i18n_meta";
20
+ function resourceStoreName(name) {
21
+ return `i18n_resources_${name}`;
22
+ }
23
+ var dbInstance = null;
24
+ var dbOpenPromise = null;
25
+ var dbStoreNames = [];
26
+ function openDB(storeNames) {
27
+ return new Promise((resolve, reject) => {
28
+ const request = indexedDB.open(DB_NAME, SCHEMA_VERSION);
29
+ request.onupgradeneeded = (event) => {
30
+ const db = event.target.result;
31
+ for (const name of storeNames) {
32
+ const storeName = resourceStoreName(name);
33
+ if (!db.objectStoreNames.contains(storeName)) {
34
+ const s = db.createObjectStore(storeName, { keyPath: "key" });
35
+ s.createIndex("by_module", "moduleCode");
36
+ s.createIndex("by_language", "langCode");
37
+ }
38
+ }
39
+ if (!db.objectStoreNames.contains(META_STORE)) {
40
+ db.createObjectStore(META_STORE, { keyPath: "key" });
41
+ }
42
+ };
43
+ request.onsuccess = () => {
44
+ const db = request.result;
45
+ db.onversionchange = () => {
46
+ db.close();
47
+ dbInstance = null;
48
+ dbOpenPromise = null;
49
+ };
50
+ db.onclose = () => {
51
+ dbInstance = null;
52
+ dbOpenPromise = null;
53
+ };
54
+ resolve(db);
55
+ };
56
+ request.onerror = () => reject(request.error);
57
+ request.onblocked = () => reject(new Error("[i18n] IndexedDB open blocked"));
58
+ });
59
+ }
60
+ function getDB(storeNames) {
61
+ if (dbInstance) return Promise.resolve(dbInstance);
62
+ if (!dbOpenPromise) {
63
+ dbOpenPromise = openDB(storeNames ?? dbStoreNames).then((db) => {
64
+ dbInstance = db;
65
+ dbOpenPromise = null;
66
+ return db;
67
+ }).catch((err) => {
68
+ dbOpenPromise = null;
69
+ throw err;
70
+ });
71
+ }
72
+ return dbOpenPromise;
73
+ }
74
+ function idbRequest(req) {
75
+ return new Promise((resolve, reject) => {
76
+ req.onsuccess = () => resolve(req.result);
77
+ req.onerror = () => reject(req.error);
78
+ });
79
+ }
80
+ async function withRetry(fn) {
81
+ try {
82
+ return await fn();
83
+ } catch {
84
+ dbInstance = null;
85
+ return fn();
86
+ }
87
+ }
88
+ var IndexedDBAdapter = class {
89
+ async ensureSchemaVersion(stores) {
90
+ dbStoreNames = stores.map((s) => s.name);
91
+ const db = await getDB(dbStoreNames);
92
+ const stored = await this.getMeta("schema_version");
93
+ const storedVersion = Number(stored ?? 0);
94
+ if (storedVersion === 0) {
95
+ await this.setMeta("schema_version", String(SCHEMA_VERSION));
96
+ } else if (storedVersion < SCHEMA_VERSION) {
97
+ db.close();
98
+ dbInstance = null;
99
+ await new Promise((resolve, reject) => {
100
+ const req = indexedDB.deleteDatabase(DB_NAME);
101
+ req.onsuccess = () => resolve();
102
+ req.onerror = () => reject(req.error);
103
+ });
104
+ dbInstance = await openDB(dbStoreNames);
105
+ await this.setMeta("schema_version", String(SCHEMA_VERSION));
106
+ } else if (storedVersion > SCHEMA_VERSION) {
107
+ throw new Error(`[i18n] DB schema version ${storedVersion} > current ${SCHEMA_VERSION}`);
108
+ }
109
+ }
110
+ async getRecord(storeName, key) {
111
+ return withRetry(async () => {
112
+ const db = await getDB();
113
+ const tx = db.transaction(resourceStoreName(storeName), "readonly");
114
+ const store = tx.objectStore(resourceStoreName(storeName));
115
+ return idbRequest(store.get(key));
116
+ });
117
+ }
118
+ async putRecord(storeName, record) {
119
+ await withRetry(async () => {
120
+ const db = await getDB();
121
+ const tx = db.transaction(resourceStoreName(storeName), "readwrite");
122
+ const store = tx.objectStore(resourceStoreName(storeName));
123
+ await idbRequest(store.put(record));
124
+ });
125
+ }
126
+ async getAllByModule(storeName, moduleCode) {
127
+ return withRetry(async () => {
128
+ const db = await getDB();
129
+ const tx = db.transaction(resourceStoreName(storeName), "readonly");
130
+ const index = tx.objectStore(resourceStoreName(storeName)).index("by_module");
131
+ return idbRequest(index.getAll(moduleCode));
132
+ });
133
+ }
134
+ async clearStore(storeName) {
135
+ await withRetry(async () => {
136
+ const db = await getDB();
137
+ const tx = db.transaction(resourceStoreName(storeName), "readwrite");
138
+ await idbRequest(tx.objectStore(resourceStoreName(storeName)).clear());
139
+ });
140
+ }
141
+ async getMeta(key) {
142
+ return withRetry(async () => {
143
+ const db = await getDB();
144
+ const tx = db.transaction(META_STORE, "readonly");
145
+ const result = await idbRequest(
146
+ tx.objectStore(META_STORE).get(key)
147
+ );
148
+ return result?.value ?? null;
149
+ });
150
+ }
151
+ async setMeta(key, value) {
152
+ await withRetry(async () => {
153
+ const db = await getDB();
154
+ const tx = db.transaction(META_STORE, "readwrite");
155
+ await idbRequest(tx.objectStore(META_STORE).put({ key, value }));
156
+ });
157
+ }
158
+ async hasLoginResources(stores) {
159
+ return withRetry(async () => {
160
+ const db = await getDB();
161
+ for (const store of stores) {
162
+ const tx = db.transaction(resourceStoreName(store.name), "readonly");
163
+ const objStore = tx.objectStore(resourceStoreName(store.name));
164
+ const found = await new Promise((resolve, reject) => {
165
+ const req = objStore.openCursor();
166
+ req.onerror = () => reject(req.error);
167
+ req.onsuccess = () => {
168
+ const cursor = req.result;
169
+ if (!cursor) {
170
+ resolve(false);
171
+ return;
172
+ }
173
+ const record = cursor.value;
174
+ if (!record.key.startsWith("UNLOGIN_")) {
175
+ resolve(true);
176
+ return;
177
+ }
178
+ cursor.continue();
179
+ };
180
+ });
181
+ if (found) return true;
182
+ }
183
+ return false;
184
+ });
185
+ }
186
+ };
187
+
188
+ // src/index.ts
189
+ if (!i18n.isInitialized) {
190
+ void i18n.use(initReactI18next).init({
191
+ lng: "__loading__",
192
+ fallbackLng: "zh_CN",
193
+ ns: ["COMMON"],
194
+ defaultNS: "COMMON",
195
+ resources: {},
196
+ interpolation: { escapeValue: false },
197
+ react: {
198
+ useSuspense: false,
199
+ bindI18n: "languageChanged",
200
+ bindI18nStore: "added removed",
201
+ transSupportBasicHtmlNodes: true,
202
+ transKeepBasicHtmlNodesFor: ["br", "p", "strong", "i", "em", "b", "a", "span"]
203
+ }
204
+ });
205
+ }
206
+ var { initI18n, closeSSE, ensureModules, getResource, getAllRecordsByModule } = createI18nManager({
207
+ storage: new IndexedDBAdapter(),
208
+ workerWritesDB: true,
209
+ createWorker: () => new WebWorkerAdapter(
210
+ new Worker(new URL("./workers/preload-worker.js", import.meta.url), { type: "module" })
211
+ )
212
+ });
213
+ export {
214
+ I18N_RESOURCES_UPDATED_EVENT,
215
+ closeSSE,
216
+ emitI18nResourcesUpdated,
217
+ ensureModules,
218
+ getAllRecordsByModule,
219
+ getResource,
220
+ initI18n,
221
+ useDict,
222
+ useTranslation
223
+ };