@magmamath/frontend-config 1.1.2-rc.2 → 1.1.2-rc.21
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/common.constants-ClvjFWRr.d.mts +81 -0
- package/dist/common.constants-ClvjFWRr.d.ts +81 -0
- package/dist/index.d.mts +33 -88
- package/dist/index.d.ts +33 -88
- package/dist/index.js +103 -47
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +103 -48
- package/dist/index.mjs.map +1 -1
- package/dist/translation/index.d.mts +55 -0
- package/dist/translation/index.d.ts +55 -0
- package/dist/translation/index.js +117 -0
- package/dist/translation/index.js.map +1 -0
- package/dist/translation/index.mjs +110 -0
- package/dist/translation/index.mjs.map +1 -0
- package/package.json +29 -2
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { a as Locale } from '../common.constants-ClvjFWRr.mjs';
|
|
2
|
+
import { InitOptions } from 'i18next';
|
|
3
|
+
|
|
4
|
+
type TolgeeConfig = {
|
|
5
|
+
cdnHost: string;
|
|
6
|
+
apiUrl?: string;
|
|
7
|
+
apiKey?: string;
|
|
8
|
+
};
|
|
9
|
+
type StorageConfig = {
|
|
10
|
+
key: string;
|
|
11
|
+
adapter: {
|
|
12
|
+
getItem(key: string): string | null;
|
|
13
|
+
setItem(key: string, value: string): void;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
type TranslationManagerOptions = {
|
|
17
|
+
isDev: boolean;
|
|
18
|
+
projectId: string;
|
|
19
|
+
i18nOptions: InitOptions;
|
|
20
|
+
isMobile?: boolean;
|
|
21
|
+
storage?: StorageConfig;
|
|
22
|
+
};
|
|
23
|
+
type OnTranslationInitCallback = (locale: Locale) => void;
|
|
24
|
+
|
|
25
|
+
declare class TranslationManager {
|
|
26
|
+
private readonly projectId;
|
|
27
|
+
private readonly isDev;
|
|
28
|
+
private readonly i18nOptions;
|
|
29
|
+
private readonly isMobile;
|
|
30
|
+
private readonly onInitCallbacks;
|
|
31
|
+
private readonly storage?;
|
|
32
|
+
private tolgeeCfg;
|
|
33
|
+
private initPromise;
|
|
34
|
+
constructor({ projectId, isDev, i18nOptions, storage, isMobile }: TranslationManagerOptions);
|
|
35
|
+
readonly onInit: (callback: OnTranslationInitCallback) => void;
|
|
36
|
+
readonly init: (locale: Locale, envConfig: TolgeeConfig) => Promise<void>;
|
|
37
|
+
readonly setLanguage: (locale: Locale) => Promise<void>;
|
|
38
|
+
private readonly initI18n;
|
|
39
|
+
private readonly createBaseTolgeeInstance;
|
|
40
|
+
private readonly initTolgeeDevTools;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
declare enum TranslationNamespace {
|
|
44
|
+
STUDENTS_WEB = "students-web",
|
|
45
|
+
TEACHERS_WEB = "teachers-web",
|
|
46
|
+
DISTRICT_DASH = "district-dash",
|
|
47
|
+
AUTH_WEB = "auth-web",
|
|
48
|
+
MOBILE = "mobile",
|
|
49
|
+
MAGMAMATH_FEATURES = "magmamath-features",
|
|
50
|
+
DRAW_BOARD = "drawboard",
|
|
51
|
+
STUDENTS_FEATURES = "students-features",
|
|
52
|
+
SHARED = "shared"
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { type OnTranslationInitCallback, type TolgeeConfig, TranslationManager, type TranslationManagerOptions, TranslationNamespace };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { a as Locale } from '../common.constants-ClvjFWRr.js';
|
|
2
|
+
import { InitOptions } from 'i18next';
|
|
3
|
+
|
|
4
|
+
type TolgeeConfig = {
|
|
5
|
+
cdnHost: string;
|
|
6
|
+
apiUrl?: string;
|
|
7
|
+
apiKey?: string;
|
|
8
|
+
};
|
|
9
|
+
type StorageConfig = {
|
|
10
|
+
key: string;
|
|
11
|
+
adapter: {
|
|
12
|
+
getItem(key: string): string | null;
|
|
13
|
+
setItem(key: string, value: string): void;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
type TranslationManagerOptions = {
|
|
17
|
+
isDev: boolean;
|
|
18
|
+
projectId: string;
|
|
19
|
+
i18nOptions: InitOptions;
|
|
20
|
+
isMobile?: boolean;
|
|
21
|
+
storage?: StorageConfig;
|
|
22
|
+
};
|
|
23
|
+
type OnTranslationInitCallback = (locale: Locale) => void;
|
|
24
|
+
|
|
25
|
+
declare class TranslationManager {
|
|
26
|
+
private readonly projectId;
|
|
27
|
+
private readonly isDev;
|
|
28
|
+
private readonly i18nOptions;
|
|
29
|
+
private readonly isMobile;
|
|
30
|
+
private readonly onInitCallbacks;
|
|
31
|
+
private readonly storage?;
|
|
32
|
+
private tolgeeCfg;
|
|
33
|
+
private initPromise;
|
|
34
|
+
constructor({ projectId, isDev, i18nOptions, storage, isMobile }: TranslationManagerOptions);
|
|
35
|
+
readonly onInit: (callback: OnTranslationInitCallback) => void;
|
|
36
|
+
readonly init: (locale: Locale, envConfig: TolgeeConfig) => Promise<void>;
|
|
37
|
+
readonly setLanguage: (locale: Locale) => Promise<void>;
|
|
38
|
+
private readonly initI18n;
|
|
39
|
+
private readonly createBaseTolgeeInstance;
|
|
40
|
+
private readonly initTolgeeDevTools;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
declare enum TranslationNamespace {
|
|
44
|
+
STUDENTS_WEB = "students-web",
|
|
45
|
+
TEACHERS_WEB = "teachers-web",
|
|
46
|
+
DISTRICT_DASH = "district-dash",
|
|
47
|
+
AUTH_WEB = "auth-web",
|
|
48
|
+
MOBILE = "mobile",
|
|
49
|
+
MAGMAMATH_FEATURES = "magmamath-features",
|
|
50
|
+
DRAW_BOARD = "drawboard",
|
|
51
|
+
STUDENTS_FEATURES = "students-features",
|
|
52
|
+
SHARED = "shared"
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { type OnTranslationInitCallback, type TolgeeConfig, TranslationManager, type TranslationManagerOptions, TranslationNamespace };
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var i18n = require('i18next');
|
|
4
|
+
var reactI18next = require('react-i18next');
|
|
5
|
+
var i18next = require('@tolgee/i18next');
|
|
6
|
+
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var i18n__default = /*#__PURE__*/_interopDefault(i18n);
|
|
10
|
+
|
|
11
|
+
// src/translation/TranslationManager.ts
|
|
12
|
+
|
|
13
|
+
// src/translation/translation.constants.ts
|
|
14
|
+
var TranslationNamespace = /* @__PURE__ */ ((TranslationNamespace2) => {
|
|
15
|
+
TranslationNamespace2["STUDENTS_WEB"] = "students-web";
|
|
16
|
+
TranslationNamespace2["TEACHERS_WEB"] = "teachers-web";
|
|
17
|
+
TranslationNamespace2["DISTRICT_DASH"] = "district-dash";
|
|
18
|
+
TranslationNamespace2["AUTH_WEB"] = "auth-web";
|
|
19
|
+
TranslationNamespace2["MOBILE"] = "mobile";
|
|
20
|
+
TranslationNamespace2["MAGMAMATH_FEATURES"] = "magmamath-features";
|
|
21
|
+
TranslationNamespace2["DRAW_BOARD"] = "drawboard";
|
|
22
|
+
TranslationNamespace2["STUDENTS_FEATURES"] = "students-features";
|
|
23
|
+
TranslationNamespace2["SHARED"] = "shared";
|
|
24
|
+
return TranslationNamespace2;
|
|
25
|
+
})(TranslationNamespace || {});
|
|
26
|
+
var TOLGEE_DEV_TIMEOUT_MS = 3e3;
|
|
27
|
+
var DEFAULT_I18N_OPTIONS = {
|
|
28
|
+
fallbackLng: void 0,
|
|
29
|
+
load: "currentOnly",
|
|
30
|
+
react: {
|
|
31
|
+
useSuspense: false
|
|
32
|
+
},
|
|
33
|
+
interpolation: {
|
|
34
|
+
escapeValue: false
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// src/translation/TranslationManager.ts
|
|
39
|
+
var TranslationManager = class {
|
|
40
|
+
projectId;
|
|
41
|
+
isDev;
|
|
42
|
+
i18nOptions;
|
|
43
|
+
isMobile;
|
|
44
|
+
onInitCallbacks = [];
|
|
45
|
+
storage;
|
|
46
|
+
tolgeeCfg = null;
|
|
47
|
+
initPromise = null;
|
|
48
|
+
constructor({ projectId, isDev, i18nOptions, storage, isMobile = false }) {
|
|
49
|
+
this.projectId = projectId;
|
|
50
|
+
this.isDev = isDev;
|
|
51
|
+
this.i18nOptions = i18nOptions;
|
|
52
|
+
this.storage = storage;
|
|
53
|
+
this.isMobile = isMobile;
|
|
54
|
+
}
|
|
55
|
+
onInit = (callback) => {
|
|
56
|
+
this.onInitCallbacks.push(callback);
|
|
57
|
+
};
|
|
58
|
+
init = async (locale, envConfig) => {
|
|
59
|
+
this.tolgeeCfg = envConfig;
|
|
60
|
+
if (!this.initPromise) {
|
|
61
|
+
this.initPromise = this.initI18n(locale).catch((error) => {
|
|
62
|
+
this.initPromise = null;
|
|
63
|
+
throw error;
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
await this.initPromise;
|
|
67
|
+
};
|
|
68
|
+
setLanguage = async (locale) => {
|
|
69
|
+
if (!i18n__default.default.isInitialized) return;
|
|
70
|
+
if (this.storage) {
|
|
71
|
+
this.storage.adapter.setItem(this.storage.key, locale);
|
|
72
|
+
}
|
|
73
|
+
if (i18n__default.default.language !== locale) {
|
|
74
|
+
await i18n__default.default.changeLanguage(locale);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
initI18n = async (locale) => {
|
|
78
|
+
if (!this.tolgeeCfg) return;
|
|
79
|
+
const tolgee = this.isDev ? await this.initTolgeeDevTools(this.tolgeeCfg) : this.createBaseTolgeeInstance(this.tolgeeCfg).init();
|
|
80
|
+
await i18next.withTolgee(i18n__default.default, tolgee).use(reactI18next.initReactI18next).init({
|
|
81
|
+
...DEFAULT_I18N_OPTIONS,
|
|
82
|
+
...this.i18nOptions,
|
|
83
|
+
lng: locale
|
|
84
|
+
});
|
|
85
|
+
this.onInitCallbacks.forEach((callback) => callback(locale));
|
|
86
|
+
};
|
|
87
|
+
createBaseTolgeeInstance = (tolgeeCfg) => {
|
|
88
|
+
return i18next.Tolgee().use(i18next.I18nextPlugin()).use(
|
|
89
|
+
i18next.BackendFetch({
|
|
90
|
+
prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`
|
|
91
|
+
})
|
|
92
|
+
);
|
|
93
|
+
};
|
|
94
|
+
initTolgeeDevTools = async (tolgeeCfg) => {
|
|
95
|
+
const { DevBackend } = await import('@tolgee/i18next');
|
|
96
|
+
const instance = this.createBaseTolgeeInstance(tolgeeCfg).use(DevBackend());
|
|
97
|
+
if (!this.isMobile) {
|
|
98
|
+
const { InContextTools } = await import('@tolgee/web/tools');
|
|
99
|
+
instance.use(InContextTools());
|
|
100
|
+
}
|
|
101
|
+
return instance.init({
|
|
102
|
+
apiUrl: tolgeeCfg.apiUrl,
|
|
103
|
+
apiKey: tolgeeCfg.apiKey,
|
|
104
|
+
fetch: (input, init) => {
|
|
105
|
+
const url = typeof input === "string" ? input.replace(/\/\?/, "?") : input;
|
|
106
|
+
const controller = new AbortController();
|
|
107
|
+
setTimeout(() => controller.abort(), TOLGEE_DEV_TIMEOUT_MS);
|
|
108
|
+
return fetch(url, { ...init, signal: controller.signal });
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
exports.TranslationManager = TranslationManager;
|
|
115
|
+
exports.TranslationNamespace = TranslationNamespace;
|
|
116
|
+
//# sourceMappingURL=index.js.map
|
|
117
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/translation/translation.constants.ts","../../src/translation/TranslationManager.ts"],"names":["TranslationNamespace","i18n","withTolgee","initReactI18next","Tolgee","I18nextPlugin","BackendFetch"],"mappings":"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","file":"index.js","sourcesContent":["import { InitOptions } from 'i18next'\n\nexport enum TranslationNamespace {\n STUDENTS_WEB = 'students-web',\n TEACHERS_WEB = 'teachers-web',\n DISTRICT_DASH = 'district-dash',\n AUTH_WEB = 'auth-web',\n MOBILE = 'mobile',\n MAGMAMATH_FEATURES = 'magmamath-features',\n DRAW_BOARD = 'drawboard',\n STUDENTS_FEATURES = 'students-features',\n SHARED = 'shared',\n}\n\nexport const TOLGEE_DEV_TIMEOUT_MS = 3000\n\nexport const DEFAULT_I18N_OPTIONS: InitOptions = {\n fallbackLng: undefined,\n load: 'currentOnly',\n react: {\n useSuspense: false,\n },\n interpolation: {\n escapeValue: false,\n },\n}\n","import i18n, { InitOptions } from 'i18next'\nimport { initReactI18next } from 'react-i18next'\nimport type { TolgeeInstance } from '@tolgee/i18next'\nimport { BackendFetch, I18nextPlugin, Tolgee, withTolgee } from '@tolgee/i18next'\nimport { Locale } from '../shared/constants/common.constants'\nimport { OnTranslationInitCallback, StorageConfig, TolgeeConfig, TranslationManagerOptions } from './translation.types'\nimport { DEFAULT_I18N_OPTIONS, TOLGEE_DEV_TIMEOUT_MS } from './translation.constants'\n\nexport class TranslationManager {\n private readonly projectId: string\n private readonly isDev: boolean\n private readonly i18nOptions: InitOptions\n private readonly isMobile: boolean\n private readonly onInitCallbacks: OnTranslationInitCallback[] = []\n private readonly storage?: StorageConfig\n\n private tolgeeCfg: TolgeeConfig | null = null\n private initPromise: Promise<void> | null = null\n\n constructor({ projectId, isDev, i18nOptions, storage, isMobile = false }: TranslationManagerOptions) {\n this.projectId = projectId\n this.isDev = isDev\n this.i18nOptions = i18nOptions\n this.storage = storage\n this.isMobile = isMobile\n }\n\n public readonly onInit = (callback: OnTranslationInitCallback) => {\n this.onInitCallbacks.push(callback)\n }\n\n public readonly init = async (locale: Locale, envConfig: TolgeeConfig) => {\n this.tolgeeCfg = envConfig\n\n if (!this.initPromise) {\n this.initPromise = this.initI18n(locale).catch((error) => {\n this.initPromise = null\n throw error\n })\n }\n await this.initPromise\n }\n\n public readonly setLanguage = async (locale: Locale) => {\n if (!i18n.isInitialized) return\n\n if (this.storage) {\n this.storage.adapter.setItem(this.storage.key, locale)\n }\n\n if (i18n.language !== locale) {\n await i18n.changeLanguage(locale)\n }\n }\n\n private readonly initI18n = async (locale: Locale) => {\n if (!this.tolgeeCfg) return\n\n const tolgee = this.isDev\n ? await this.initTolgeeDevTools(this.tolgeeCfg)\n : this.createBaseTolgeeInstance(this.tolgeeCfg).init()\n\n await withTolgee(i18n, tolgee)\n .use(initReactI18next)\n .init({\n ...DEFAULT_I18N_OPTIONS,\n ...this.i18nOptions,\n lng: locale,\n })\n\n this.onInitCallbacks.forEach((callback) => callback(locale))\n }\n\n private readonly createBaseTolgeeInstance = (tolgeeCfg: TolgeeConfig) => {\n return Tolgee()\n .use(I18nextPlugin())\n .use(\n BackendFetch({\n prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`,\n })\n )\n }\n\n private readonly initTolgeeDevTools = async (tolgeeCfg: TolgeeConfig): Promise<TolgeeInstance> => {\n const { DevBackend } = await import('@tolgee/i18next')\n\n const instance = this.createBaseTolgeeInstance(tolgeeCfg).use(DevBackend())\n\n if (!this.isMobile) {\n const { InContextTools } = await import('@tolgee/web/tools')\n instance.use(InContextTools())\n }\n\n return instance.init({\n apiUrl: tolgeeCfg.apiUrl,\n apiKey: tolgeeCfg.apiKey,\n fetch: (input, init) => {\n // hermes appends trailing slash to the url, we need to remove it\n const url = typeof input === 'string' ? input.replace(/\\/\\?/, '?') : input\n const controller = new AbortController()\n setTimeout(() => controller.abort(), TOLGEE_DEV_TIMEOUT_MS)\n return fetch(url, { ...init, signal: controller.signal })\n },\n })\n }\n}\n"]}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import i18n from 'i18next';
|
|
2
|
+
import { initReactI18next } from 'react-i18next';
|
|
3
|
+
import { withTolgee, Tolgee, I18nextPlugin, BackendFetch } from '@tolgee/i18next';
|
|
4
|
+
|
|
5
|
+
// src/translation/TranslationManager.ts
|
|
6
|
+
|
|
7
|
+
// src/translation/translation.constants.ts
|
|
8
|
+
var TranslationNamespace = /* @__PURE__ */ ((TranslationNamespace2) => {
|
|
9
|
+
TranslationNamespace2["STUDENTS_WEB"] = "students-web";
|
|
10
|
+
TranslationNamespace2["TEACHERS_WEB"] = "teachers-web";
|
|
11
|
+
TranslationNamespace2["DISTRICT_DASH"] = "district-dash";
|
|
12
|
+
TranslationNamespace2["AUTH_WEB"] = "auth-web";
|
|
13
|
+
TranslationNamespace2["MOBILE"] = "mobile";
|
|
14
|
+
TranslationNamespace2["MAGMAMATH_FEATURES"] = "magmamath-features";
|
|
15
|
+
TranslationNamespace2["DRAW_BOARD"] = "drawboard";
|
|
16
|
+
TranslationNamespace2["STUDENTS_FEATURES"] = "students-features";
|
|
17
|
+
TranslationNamespace2["SHARED"] = "shared";
|
|
18
|
+
return TranslationNamespace2;
|
|
19
|
+
})(TranslationNamespace || {});
|
|
20
|
+
var TOLGEE_DEV_TIMEOUT_MS = 3e3;
|
|
21
|
+
var DEFAULT_I18N_OPTIONS = {
|
|
22
|
+
fallbackLng: void 0,
|
|
23
|
+
load: "currentOnly",
|
|
24
|
+
react: {
|
|
25
|
+
useSuspense: false
|
|
26
|
+
},
|
|
27
|
+
interpolation: {
|
|
28
|
+
escapeValue: false
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// src/translation/TranslationManager.ts
|
|
33
|
+
var TranslationManager = class {
|
|
34
|
+
projectId;
|
|
35
|
+
isDev;
|
|
36
|
+
i18nOptions;
|
|
37
|
+
isMobile;
|
|
38
|
+
onInitCallbacks = [];
|
|
39
|
+
storage;
|
|
40
|
+
tolgeeCfg = null;
|
|
41
|
+
initPromise = null;
|
|
42
|
+
constructor({ projectId, isDev, i18nOptions, storage, isMobile = false }) {
|
|
43
|
+
this.projectId = projectId;
|
|
44
|
+
this.isDev = isDev;
|
|
45
|
+
this.i18nOptions = i18nOptions;
|
|
46
|
+
this.storage = storage;
|
|
47
|
+
this.isMobile = isMobile;
|
|
48
|
+
}
|
|
49
|
+
onInit = (callback) => {
|
|
50
|
+
this.onInitCallbacks.push(callback);
|
|
51
|
+
};
|
|
52
|
+
init = async (locale, envConfig) => {
|
|
53
|
+
this.tolgeeCfg = envConfig;
|
|
54
|
+
if (!this.initPromise) {
|
|
55
|
+
this.initPromise = this.initI18n(locale).catch((error) => {
|
|
56
|
+
this.initPromise = null;
|
|
57
|
+
throw error;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
await this.initPromise;
|
|
61
|
+
};
|
|
62
|
+
setLanguage = async (locale) => {
|
|
63
|
+
if (!i18n.isInitialized) return;
|
|
64
|
+
if (this.storage) {
|
|
65
|
+
this.storage.adapter.setItem(this.storage.key, locale);
|
|
66
|
+
}
|
|
67
|
+
if (i18n.language !== locale) {
|
|
68
|
+
await i18n.changeLanguage(locale);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
initI18n = async (locale) => {
|
|
72
|
+
if (!this.tolgeeCfg) return;
|
|
73
|
+
const tolgee = this.isDev ? await this.initTolgeeDevTools(this.tolgeeCfg) : this.createBaseTolgeeInstance(this.tolgeeCfg).init();
|
|
74
|
+
await withTolgee(i18n, tolgee).use(initReactI18next).init({
|
|
75
|
+
...DEFAULT_I18N_OPTIONS,
|
|
76
|
+
...this.i18nOptions,
|
|
77
|
+
lng: locale
|
|
78
|
+
});
|
|
79
|
+
this.onInitCallbacks.forEach((callback) => callback(locale));
|
|
80
|
+
};
|
|
81
|
+
createBaseTolgeeInstance = (tolgeeCfg) => {
|
|
82
|
+
return Tolgee().use(I18nextPlugin()).use(
|
|
83
|
+
BackendFetch({
|
|
84
|
+
prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`
|
|
85
|
+
})
|
|
86
|
+
);
|
|
87
|
+
};
|
|
88
|
+
initTolgeeDevTools = async (tolgeeCfg) => {
|
|
89
|
+
const { DevBackend } = await import('@tolgee/i18next');
|
|
90
|
+
const instance = this.createBaseTolgeeInstance(tolgeeCfg).use(DevBackend());
|
|
91
|
+
if (!this.isMobile) {
|
|
92
|
+
const { InContextTools } = await import('@tolgee/web/tools');
|
|
93
|
+
instance.use(InContextTools());
|
|
94
|
+
}
|
|
95
|
+
return instance.init({
|
|
96
|
+
apiUrl: tolgeeCfg.apiUrl,
|
|
97
|
+
apiKey: tolgeeCfg.apiKey,
|
|
98
|
+
fetch: (input, init) => {
|
|
99
|
+
const url = typeof input === "string" ? input.replace(/\/\?/, "?") : input;
|
|
100
|
+
const controller = new AbortController();
|
|
101
|
+
setTimeout(() => controller.abort(), TOLGEE_DEV_TIMEOUT_MS);
|
|
102
|
+
return fetch(url, { ...init, signal: controller.signal });
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export { TranslationManager, TranslationNamespace };
|
|
109
|
+
//# sourceMappingURL=index.mjs.map
|
|
110
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/translation/translation.constants.ts","../../src/translation/TranslationManager.ts"],"names":["TranslationNamespace"],"mappings":"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","file":"index.mjs","sourcesContent":["import { InitOptions } from 'i18next'\n\nexport enum TranslationNamespace {\n STUDENTS_WEB = 'students-web',\n TEACHERS_WEB = 'teachers-web',\n DISTRICT_DASH = 'district-dash',\n AUTH_WEB = 'auth-web',\n MOBILE = 'mobile',\n MAGMAMATH_FEATURES = 'magmamath-features',\n DRAW_BOARD = 'drawboard',\n STUDENTS_FEATURES = 'students-features',\n SHARED = 'shared',\n}\n\nexport const TOLGEE_DEV_TIMEOUT_MS = 3000\n\nexport const DEFAULT_I18N_OPTIONS: InitOptions = {\n fallbackLng: undefined,\n load: 'currentOnly',\n react: {\n useSuspense: false,\n },\n interpolation: {\n escapeValue: false,\n },\n}\n","import i18n, { InitOptions } from 'i18next'\nimport { initReactI18next } from 'react-i18next'\nimport type { TolgeeInstance } from '@tolgee/i18next'\nimport { BackendFetch, I18nextPlugin, Tolgee, withTolgee } from '@tolgee/i18next'\nimport { Locale } from '../shared/constants/common.constants'\nimport { OnTranslationInitCallback, StorageConfig, TolgeeConfig, TranslationManagerOptions } from './translation.types'\nimport { DEFAULT_I18N_OPTIONS, TOLGEE_DEV_TIMEOUT_MS } from './translation.constants'\n\nexport class TranslationManager {\n private readonly projectId: string\n private readonly isDev: boolean\n private readonly i18nOptions: InitOptions\n private readonly isMobile: boolean\n private readonly onInitCallbacks: OnTranslationInitCallback[] = []\n private readonly storage?: StorageConfig\n\n private tolgeeCfg: TolgeeConfig | null = null\n private initPromise: Promise<void> | null = null\n\n constructor({ projectId, isDev, i18nOptions, storage, isMobile = false }: TranslationManagerOptions) {\n this.projectId = projectId\n this.isDev = isDev\n this.i18nOptions = i18nOptions\n this.storage = storage\n this.isMobile = isMobile\n }\n\n public readonly onInit = (callback: OnTranslationInitCallback) => {\n this.onInitCallbacks.push(callback)\n }\n\n public readonly init = async (locale: Locale, envConfig: TolgeeConfig) => {\n this.tolgeeCfg = envConfig\n\n if (!this.initPromise) {\n this.initPromise = this.initI18n(locale).catch((error) => {\n this.initPromise = null\n throw error\n })\n }\n await this.initPromise\n }\n\n public readonly setLanguage = async (locale: Locale) => {\n if (!i18n.isInitialized) return\n\n if (this.storage) {\n this.storage.adapter.setItem(this.storage.key, locale)\n }\n\n if (i18n.language !== locale) {\n await i18n.changeLanguage(locale)\n }\n }\n\n private readonly initI18n = async (locale: Locale) => {\n if (!this.tolgeeCfg) return\n\n const tolgee = this.isDev\n ? await this.initTolgeeDevTools(this.tolgeeCfg)\n : this.createBaseTolgeeInstance(this.tolgeeCfg).init()\n\n await withTolgee(i18n, tolgee)\n .use(initReactI18next)\n .init({\n ...DEFAULT_I18N_OPTIONS,\n ...this.i18nOptions,\n lng: locale,\n })\n\n this.onInitCallbacks.forEach((callback) => callback(locale))\n }\n\n private readonly createBaseTolgeeInstance = (tolgeeCfg: TolgeeConfig) => {\n return Tolgee()\n .use(I18nextPlugin())\n .use(\n BackendFetch({\n prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`,\n })\n )\n }\n\n private readonly initTolgeeDevTools = async (tolgeeCfg: TolgeeConfig): Promise<TolgeeInstance> => {\n const { DevBackend } = await import('@tolgee/i18next')\n\n const instance = this.createBaseTolgeeInstance(tolgeeCfg).use(DevBackend())\n\n if (!this.isMobile) {\n const { InContextTools } = await import('@tolgee/web/tools')\n instance.use(InContextTools())\n }\n\n return instance.init({\n apiUrl: tolgeeCfg.apiUrl,\n apiKey: tolgeeCfg.apiKey,\n fetch: (input, init) => {\n // hermes appends trailing slash to the url, we need to remove it\n const url = typeof input === 'string' ? input.replace(/\\/\\?/, '?') : input\n const controller = new AbortController()\n setTimeout(() => controller.abort(), TOLGEE_DEV_TIMEOUT_MS)\n return fetch(url, { ...init, signal: controller.signal })\n },\n })\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,9 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@magmamath/frontend-config",
|
|
3
|
-
"version": "1.1.2-rc.
|
|
3
|
+
"version": "1.1.2-rc.21",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.mjs",
|
|
11
|
+
"require": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./translation": {
|
|
14
|
+
"types": "./dist/translation/index.d.ts",
|
|
15
|
+
"import": "./dist/translation/index.mjs",
|
|
16
|
+
"require": "./dist/translation/index.js"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"typesVersions": {
|
|
20
|
+
"*": {
|
|
21
|
+
"translation": [
|
|
22
|
+
"./dist/translation/index.d.ts"
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
},
|
|
7
26
|
"license": "ISC",
|
|
8
27
|
"files": [
|
|
9
28
|
"dist/**"
|
|
@@ -21,17 +40,25 @@
|
|
|
21
40
|
},
|
|
22
41
|
"peerDependencies": {
|
|
23
42
|
"effector": "^23.4.4",
|
|
43
|
+
"i18next": ">=23",
|
|
24
44
|
"react": "^18",
|
|
25
45
|
"react-dom": "^18",
|
|
26
|
-
"react-
|
|
46
|
+
"react-i18next": ">=14",
|
|
47
|
+
"react-native-svg": "15.13.0",
|
|
48
|
+
"@tolgee/i18next": ">=5",
|
|
49
|
+
"@tolgee/web": ">=5"
|
|
27
50
|
},
|
|
28
51
|
"dependencies": {},
|
|
29
52
|
"devDependencies": {
|
|
53
|
+
"@tolgee/i18next": "^5.0.0",
|
|
54
|
+
"@tolgee/web": "^5.0.0",
|
|
30
55
|
"@types/node": "^18.0.0",
|
|
31
56
|
"@types/react": "^19.2.2",
|
|
32
57
|
"effector": "^23.4.4",
|
|
33
58
|
"eslint": "^8.57.0",
|
|
59
|
+
"i18next": "^23.0.0",
|
|
34
60
|
"react": "^18",
|
|
61
|
+
"react-i18next": "^14.0.0",
|
|
35
62
|
"react-native-svg": "15.13.0",
|
|
36
63
|
"rimraf": "^5.0.0",
|
|
37
64
|
"tsup": "^8.0.0",
|