@magmamath/frontend-config 1.1.2-rc.20 → 1.1.2-rc.22
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.
|
@@ -1,43 +1,42 @@
|
|
|
1
1
|
import { a as Locale } from '../common.constants-ClvjFWRr.mjs';
|
|
2
2
|
import { InitOptions } from 'i18next';
|
|
3
3
|
|
|
4
|
-
type
|
|
5
|
-
isDev: boolean;
|
|
6
|
-
projectId: string;
|
|
7
|
-
};
|
|
8
|
-
type TolgeeEnvConfig = {
|
|
4
|
+
type TolgeeConfig = {
|
|
9
5
|
cdnHost: string;
|
|
10
6
|
apiUrl?: string;
|
|
11
7
|
apiKey?: string;
|
|
12
8
|
};
|
|
13
|
-
type
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
type StorageConfig = {
|
|
10
|
+
key: string;
|
|
11
|
+
adapter: {
|
|
12
|
+
getItem(key: string): string | null | undefined;
|
|
13
|
+
setItem(key: string, value: string): void;
|
|
14
|
+
};
|
|
16
15
|
};
|
|
17
16
|
type TranslationManagerOptions = {
|
|
17
|
+
isDev: boolean;
|
|
18
|
+
projectId: string;
|
|
19
|
+
i18nOptions: InitOptions;
|
|
18
20
|
isMobile?: boolean;
|
|
19
|
-
|
|
20
|
-
i18nOptions?: InitOptions;
|
|
21
|
-
storage?: StorageAdapter;
|
|
21
|
+
storage?: StorageConfig;
|
|
22
22
|
};
|
|
23
|
+
type OnTranslationInitCallback = (locale: Locale) => void;
|
|
23
24
|
|
|
24
|
-
type OnInitCallback = (locale: Locale) => void;
|
|
25
25
|
declare class TranslationManager {
|
|
26
|
-
private readonly
|
|
27
|
-
private
|
|
26
|
+
private readonly projectId;
|
|
27
|
+
private readonly isDev;
|
|
28
28
|
private readonly i18nOptions;
|
|
29
|
-
private readonly storage?;
|
|
30
29
|
private readonly isMobile;
|
|
31
30
|
private readonly onInitCallbacks;
|
|
31
|
+
private readonly storage?;
|
|
32
|
+
private tolgeeCfg;
|
|
32
33
|
private initPromise;
|
|
33
|
-
constructor({
|
|
34
|
-
readonly onInit: (callback:
|
|
35
|
-
readonly init: (locale: Locale, envConfig:
|
|
34
|
+
constructor({ projectId, isDev, i18nOptions, storage, isMobile }: TranslationManagerOptions);
|
|
35
|
+
readonly onInit: (callback: OnTranslationInitCallback) => void;
|
|
36
|
+
readonly init: (locale: Locale, envConfig: TolgeeConfig) => Promise<void>;
|
|
36
37
|
readonly setLanguage: (locale: Locale) => Promise<void>;
|
|
37
|
-
private readonly persistLocale;
|
|
38
38
|
private readonly initI18n;
|
|
39
39
|
private readonly createBaseTolgeeInstance;
|
|
40
|
-
private readonly initTolgeeCDN;
|
|
41
40
|
private readonly initTolgeeDevTools;
|
|
42
41
|
}
|
|
43
42
|
|
|
@@ -53,4 +52,4 @@ declare enum TranslationNamespace {
|
|
|
53
52
|
SHARED = "shared"
|
|
54
53
|
}
|
|
55
54
|
|
|
56
|
-
export { type
|
|
55
|
+
export { type OnTranslationInitCallback, type TolgeeConfig, TranslationManager, type TranslationManagerOptions, TranslationNamespace };
|
|
@@ -1,43 +1,42 @@
|
|
|
1
1
|
import { a as Locale } from '../common.constants-ClvjFWRr.js';
|
|
2
2
|
import { InitOptions } from 'i18next';
|
|
3
3
|
|
|
4
|
-
type
|
|
5
|
-
isDev: boolean;
|
|
6
|
-
projectId: string;
|
|
7
|
-
};
|
|
8
|
-
type TolgeeEnvConfig = {
|
|
4
|
+
type TolgeeConfig = {
|
|
9
5
|
cdnHost: string;
|
|
10
6
|
apiUrl?: string;
|
|
11
7
|
apiKey?: string;
|
|
12
8
|
};
|
|
13
|
-
type
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
type StorageConfig = {
|
|
10
|
+
key: string;
|
|
11
|
+
adapter: {
|
|
12
|
+
getItem(key: string): string | null | undefined;
|
|
13
|
+
setItem(key: string, value: string): void;
|
|
14
|
+
};
|
|
16
15
|
};
|
|
17
16
|
type TranslationManagerOptions = {
|
|
17
|
+
isDev: boolean;
|
|
18
|
+
projectId: string;
|
|
19
|
+
i18nOptions: InitOptions;
|
|
18
20
|
isMobile?: boolean;
|
|
19
|
-
|
|
20
|
-
i18nOptions?: InitOptions;
|
|
21
|
-
storage?: StorageAdapter;
|
|
21
|
+
storage?: StorageConfig;
|
|
22
22
|
};
|
|
23
|
+
type OnTranslationInitCallback = (locale: Locale) => void;
|
|
23
24
|
|
|
24
|
-
type OnInitCallback = (locale: Locale) => void;
|
|
25
25
|
declare class TranslationManager {
|
|
26
|
-
private readonly
|
|
27
|
-
private
|
|
26
|
+
private readonly projectId;
|
|
27
|
+
private readonly isDev;
|
|
28
28
|
private readonly i18nOptions;
|
|
29
|
-
private readonly storage?;
|
|
30
29
|
private readonly isMobile;
|
|
31
30
|
private readonly onInitCallbacks;
|
|
31
|
+
private readonly storage?;
|
|
32
|
+
private tolgeeCfg;
|
|
32
33
|
private initPromise;
|
|
33
|
-
constructor({
|
|
34
|
-
readonly onInit: (callback:
|
|
35
|
-
readonly init: (locale: Locale, envConfig:
|
|
34
|
+
constructor({ projectId, isDev, i18nOptions, storage, isMobile }: TranslationManagerOptions);
|
|
35
|
+
readonly onInit: (callback: OnTranslationInitCallback) => void;
|
|
36
|
+
readonly init: (locale: Locale, envConfig: TolgeeConfig) => Promise<void>;
|
|
36
37
|
readonly setLanguage: (locale: Locale) => Promise<void>;
|
|
37
|
-
private readonly persistLocale;
|
|
38
38
|
private readonly initI18n;
|
|
39
39
|
private readonly createBaseTolgeeInstance;
|
|
40
|
-
private readonly initTolgeeCDN;
|
|
41
40
|
private readonly initTolgeeDevTools;
|
|
42
41
|
}
|
|
43
42
|
|
|
@@ -53,4 +52,4 @@ declare enum TranslationNamespace {
|
|
|
53
52
|
SHARED = "shared"
|
|
54
53
|
}
|
|
55
54
|
|
|
56
|
-
export { type
|
|
55
|
+
export { type OnTranslationInitCallback, type TolgeeConfig, TranslationManager, type TranslationManagerOptions, TranslationNamespace };
|
|
@@ -37,15 +37,17 @@ var DEFAULT_I18N_OPTIONS = {
|
|
|
37
37
|
|
|
38
38
|
// src/translation/TranslationManager.ts
|
|
39
39
|
var TranslationManager = class {
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
projectId;
|
|
41
|
+
isDev;
|
|
42
42
|
i18nOptions;
|
|
43
|
-
storage;
|
|
44
43
|
isMobile;
|
|
45
44
|
onInitCallbacks = [];
|
|
45
|
+
storage;
|
|
46
|
+
tolgeeCfg = null;
|
|
46
47
|
initPromise = null;
|
|
47
|
-
constructor({
|
|
48
|
-
this.
|
|
48
|
+
constructor({ projectId, isDev, i18nOptions, storage, isMobile = false }) {
|
|
49
|
+
this.projectId = projectId;
|
|
50
|
+
this.isDev = isDev;
|
|
49
51
|
this.i18nOptions = i18nOptions;
|
|
50
52
|
this.storage = storage;
|
|
51
53
|
this.isMobile = isMobile;
|
|
@@ -54,7 +56,7 @@ var TranslationManager = class {
|
|
|
54
56
|
this.onInitCallbacks.push(callback);
|
|
55
57
|
};
|
|
56
58
|
init = async (locale, envConfig) => {
|
|
57
|
-
this.
|
|
59
|
+
this.tolgeeCfg = envConfig;
|
|
58
60
|
if (!this.initPromise) {
|
|
59
61
|
this.initPromise = this.initI18n(locale).catch((error) => {
|
|
60
62
|
this.initPromise = null;
|
|
@@ -65,17 +67,16 @@ var TranslationManager = class {
|
|
|
65
67
|
};
|
|
66
68
|
setLanguage = async (locale) => {
|
|
67
69
|
if (!i18n__default.default.isInitialized) return;
|
|
68
|
-
this.
|
|
70
|
+
if (this.storage) {
|
|
71
|
+
this.storage.adapter.setItem(this.storage.key, locale);
|
|
72
|
+
}
|
|
69
73
|
if (i18n__default.default.language !== locale) {
|
|
70
74
|
await i18n__default.default.changeLanguage(locale);
|
|
71
75
|
}
|
|
72
76
|
};
|
|
73
|
-
persistLocale = (locale) => {
|
|
74
|
-
this.storage?.setItem("locale", locale);
|
|
75
|
-
};
|
|
76
77
|
initI18n = async (locale) => {
|
|
77
|
-
|
|
78
|
-
const tolgee =
|
|
78
|
+
if (!this.tolgeeCfg) return;
|
|
79
|
+
const tolgee = this.isDev ? await this.initTolgeeDevTools(this.tolgeeCfg) : this.createBaseTolgeeInstance(this.tolgeeCfg).init();
|
|
79
80
|
await i18next.withTolgee(i18n__default.default, tolgee).use(reactI18next.initReactI18next).init({
|
|
80
81
|
...DEFAULT_I18N_OPTIONS,
|
|
81
82
|
...this.i18nOptions,
|
|
@@ -83,28 +84,23 @@ var TranslationManager = class {
|
|
|
83
84
|
});
|
|
84
85
|
this.onInitCallbacks.forEach((callback) => callback(locale));
|
|
85
86
|
};
|
|
86
|
-
createBaseTolgeeInstance = () => {
|
|
87
|
-
const config = this.tolgee;
|
|
87
|
+
createBaseTolgeeInstance = (tolgeeCfg) => {
|
|
88
88
|
return i18next.Tolgee().use(i18next.I18nextPlugin()).use(
|
|
89
89
|
i18next.BackendFetch({
|
|
90
|
-
prefix: `${
|
|
90
|
+
prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`
|
|
91
91
|
})
|
|
92
92
|
);
|
|
93
93
|
};
|
|
94
|
-
|
|
95
|
-
return this.createBaseTolgeeInstance().init();
|
|
96
|
-
};
|
|
97
|
-
initTolgeeDevTools = async () => {
|
|
94
|
+
initTolgeeDevTools = async (tolgeeCfg) => {
|
|
98
95
|
const { DevBackend } = await import('@tolgee/i18next');
|
|
99
|
-
const
|
|
100
|
-
const instance = this.createBaseTolgeeInstance().use(DevBackend());
|
|
96
|
+
const instance = this.createBaseTolgeeInstance(tolgeeCfg).use(DevBackend());
|
|
101
97
|
if (!this.isMobile) {
|
|
102
98
|
const { InContextTools } = await import('@tolgee/web/tools');
|
|
103
99
|
instance.use(InContextTools());
|
|
104
100
|
}
|
|
105
101
|
return instance.init({
|
|
106
|
-
apiUrl:
|
|
107
|
-
apiKey:
|
|
102
|
+
apiUrl: tolgeeCfg.apiUrl,
|
|
103
|
+
apiKey: tolgeeCfg.apiKey,
|
|
108
104
|
fetch: (input, init) => {
|
|
109
105
|
const url = typeof input === "string" ? input.replace(/\/\?/, "?") : input;
|
|
110
106
|
const controller = new AbortController();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/translation/translation.constants.ts","../../src/translation/TranslationManager.ts"],"names":["TranslationNamespace","i18n","withTolgee","initReactI18next","Tolgee","I18nextPlugin","BackendFetch"],"mappings":";;;;;;;;;;;;;AAEY,IAAA,oBAAA,qBAAAA,qBAAL,KAAA;AACL,EAAAA,sBAAA,cAAe,CAAA,GAAA,cAAA;AACf,EAAAA,sBAAA,cAAe,CAAA,GAAA,cAAA;AACf,EAAAA,sBAAA,eAAgB,CAAA,GAAA,eAAA;AAChB,EAAAA,sBAAA,UAAW,CAAA,GAAA,UAAA;AACX,EAAAA,sBAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,sBAAA,oBAAqB,CAAA,GAAA,oBAAA;AACrB,EAAAA,sBAAA,YAAa,CAAA,GAAA,WAAA;AACb,EAAAA,sBAAA,mBAAoB,CAAA,GAAA,mBAAA;AACpB,EAAAA,sBAAA,QAAS,CAAA,GAAA,QAAA;AATC,EAAAA,OAAAA,qBAAAA;AAAA,CAAA,EAAA,oBAAA,IAAA,EAAA;AAYL,IAAM,qBAAwB,GAAA,GAAA;AAE9B,IAAM,oBAAoC,GAAA;AAAA,EAC/C,WAAa,EAAA,MAAA;AAAA,EACb,IAAM,EAAA,aAAA;AAAA,EACN,KAAO,EAAA;AAAA,IACL,WAAa,EAAA;AAAA,GACf;AAAA,EACA,aAAe,EAAA;AAAA,IACb,WAAa,EAAA;AAAA;AAEjB,CAAA;;;
|
|
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"]}
|
|
@@ -31,15 +31,17 @@ var DEFAULT_I18N_OPTIONS = {
|
|
|
31
31
|
|
|
32
32
|
// src/translation/TranslationManager.ts
|
|
33
33
|
var TranslationManager = class {
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
projectId;
|
|
35
|
+
isDev;
|
|
36
36
|
i18nOptions;
|
|
37
|
-
storage;
|
|
38
37
|
isMobile;
|
|
39
38
|
onInitCallbacks = [];
|
|
39
|
+
storage;
|
|
40
|
+
tolgeeCfg = null;
|
|
40
41
|
initPromise = null;
|
|
41
|
-
constructor({
|
|
42
|
-
this.
|
|
42
|
+
constructor({ projectId, isDev, i18nOptions, storage, isMobile = false }) {
|
|
43
|
+
this.projectId = projectId;
|
|
44
|
+
this.isDev = isDev;
|
|
43
45
|
this.i18nOptions = i18nOptions;
|
|
44
46
|
this.storage = storage;
|
|
45
47
|
this.isMobile = isMobile;
|
|
@@ -48,7 +50,7 @@ var TranslationManager = class {
|
|
|
48
50
|
this.onInitCallbacks.push(callback);
|
|
49
51
|
};
|
|
50
52
|
init = async (locale, envConfig) => {
|
|
51
|
-
this.
|
|
53
|
+
this.tolgeeCfg = envConfig;
|
|
52
54
|
if (!this.initPromise) {
|
|
53
55
|
this.initPromise = this.initI18n(locale).catch((error) => {
|
|
54
56
|
this.initPromise = null;
|
|
@@ -59,17 +61,16 @@ var TranslationManager = class {
|
|
|
59
61
|
};
|
|
60
62
|
setLanguage = async (locale) => {
|
|
61
63
|
if (!i18n.isInitialized) return;
|
|
62
|
-
this.
|
|
64
|
+
if (this.storage) {
|
|
65
|
+
this.storage.adapter.setItem(this.storage.key, locale);
|
|
66
|
+
}
|
|
63
67
|
if (i18n.language !== locale) {
|
|
64
68
|
await i18n.changeLanguage(locale);
|
|
65
69
|
}
|
|
66
70
|
};
|
|
67
|
-
persistLocale = (locale) => {
|
|
68
|
-
this.storage?.setItem("locale", locale);
|
|
69
|
-
};
|
|
70
71
|
initI18n = async (locale) => {
|
|
71
|
-
|
|
72
|
-
const tolgee =
|
|
72
|
+
if (!this.tolgeeCfg) return;
|
|
73
|
+
const tolgee = this.isDev ? await this.initTolgeeDevTools(this.tolgeeCfg) : this.createBaseTolgeeInstance(this.tolgeeCfg).init();
|
|
73
74
|
await withTolgee(i18n, tolgee).use(initReactI18next).init({
|
|
74
75
|
...DEFAULT_I18N_OPTIONS,
|
|
75
76
|
...this.i18nOptions,
|
|
@@ -77,28 +78,23 @@ var TranslationManager = class {
|
|
|
77
78
|
});
|
|
78
79
|
this.onInitCallbacks.forEach((callback) => callback(locale));
|
|
79
80
|
};
|
|
80
|
-
createBaseTolgeeInstance = () => {
|
|
81
|
-
const config = this.tolgee;
|
|
81
|
+
createBaseTolgeeInstance = (tolgeeCfg) => {
|
|
82
82
|
return Tolgee().use(I18nextPlugin()).use(
|
|
83
83
|
BackendFetch({
|
|
84
|
-
prefix: `${
|
|
84
|
+
prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`
|
|
85
85
|
})
|
|
86
86
|
);
|
|
87
87
|
};
|
|
88
|
-
|
|
89
|
-
return this.createBaseTolgeeInstance().init();
|
|
90
|
-
};
|
|
91
|
-
initTolgeeDevTools = async () => {
|
|
88
|
+
initTolgeeDevTools = async (tolgeeCfg) => {
|
|
92
89
|
const { DevBackend } = await import('@tolgee/i18next');
|
|
93
|
-
const
|
|
94
|
-
const instance = this.createBaseTolgeeInstance().use(DevBackend());
|
|
90
|
+
const instance = this.createBaseTolgeeInstance(tolgeeCfg).use(DevBackend());
|
|
95
91
|
if (!this.isMobile) {
|
|
96
92
|
const { InContextTools } = await import('@tolgee/web/tools');
|
|
97
93
|
instance.use(InContextTools());
|
|
98
94
|
}
|
|
99
95
|
return instance.init({
|
|
100
|
-
apiUrl:
|
|
101
|
-
apiKey:
|
|
96
|
+
apiUrl: tolgeeCfg.apiUrl,
|
|
97
|
+
apiKey: tolgeeCfg.apiKey,
|
|
102
98
|
fetch: (input, init) => {
|
|
103
99
|
const url = typeof input === "string" ? input.replace(/\/\?/, "?") : input;
|
|
104
100
|
const controller = new AbortController();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/translation/translation.constants.ts","../../src/translation/TranslationManager.ts"],"names":["TranslationNamespace"],"mappings":";;;;;;;AAEY,IAAA,oBAAA,qBAAAA,qBAAL,KAAA;AACL,EAAAA,sBAAA,cAAe,CAAA,GAAA,cAAA;AACf,EAAAA,sBAAA,cAAe,CAAA,GAAA,cAAA;AACf,EAAAA,sBAAA,eAAgB,CAAA,GAAA,eAAA;AAChB,EAAAA,sBAAA,UAAW,CAAA,GAAA,UAAA;AACX,EAAAA,sBAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,sBAAA,oBAAqB,CAAA,GAAA,oBAAA;AACrB,EAAAA,sBAAA,YAAa,CAAA,GAAA,WAAA;AACb,EAAAA,sBAAA,mBAAoB,CAAA,GAAA,mBAAA;AACpB,EAAAA,sBAAA,QAAS,CAAA,GAAA,QAAA;AATC,EAAAA,OAAAA,qBAAAA;AAAA,CAAA,EAAA,oBAAA,IAAA,EAAA;AAYL,IAAM,qBAAwB,GAAA,GAAA;AAE9B,IAAM,oBAAoC,GAAA;AAAA,EAC/C,WAAa,EAAA,MAAA;AAAA,EACb,IAAM,EAAA,aAAA;AAAA,EACN,KAAO,EAAA;AAAA,IACL,WAAa,EAAA;AAAA,GACf;AAAA,EACA,aAAe,EAAA;AAAA,IACb,WAAa,EAAA;AAAA;AAEjB,CAAA;;;
|
|
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"]}
|