@dynamic-labs/locale 4.38.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.
- package/CHANGELOG.md +6263 -0
- package/LICENSE +21 -0
- package/README.md +0 -0
- package/package.cjs +8 -0
- package/package.js +4 -0
- package/package.json +26 -0
- package/src/index.cjs +14 -0
- package/src/index.d.ts +3 -0
- package/src/index.js +7 -0
- package/src/lib/en/translation.cjs +3031 -0
- package/src/lib/en/translation.d.ts +3025 -0
- package/src/lib/en/translation.js +3027 -0
- package/src/lib/helpers/deepMerge.cjs +57 -0
- package/src/lib/helpers/deepMerge.d.ts +1 -0
- package/src/lib/helpers/deepMerge.js +53 -0
- package/src/lib/helpers/index.d.ts +1 -0
- package/src/lib/locale.cjs +70 -0
- package/src/lib/locale.d.ts +13 -0
- package/src/lib/locale.js +61 -0
- package/src/lib/type.d.ts +16 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
const deepMerge = (obj1, obj2) => {
|
|
7
|
+
if (typeof obj1 !== 'object' || typeof obj2 !== 'object') {
|
|
8
|
+
// If either obj1 or obj2 is not an object, return obj1
|
|
9
|
+
return obj2;
|
|
10
|
+
}
|
|
11
|
+
// Create a new object to store the merged result
|
|
12
|
+
const result = Object.assign({}, obj1);
|
|
13
|
+
for (const key in obj2) {
|
|
14
|
+
if (Object.prototype.hasOwnProperty.call(obj2, key)) {
|
|
15
|
+
if (typeof obj2[key] === 'object' &&
|
|
16
|
+
Object.prototype.hasOwnProperty.call(obj1, key) &&
|
|
17
|
+
typeof obj1[key] === 'object') {
|
|
18
|
+
// If both obj1 and obj2 have objects with the same key, recursively merge them
|
|
19
|
+
result[key] = deepMerge(obj1[key], obj2[key]);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
// Otherwise, simply assign the value from obj2 to the result
|
|
23
|
+
result[key] = obj2[key];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
};
|
|
29
|
+
// Example usage:
|
|
30
|
+
//
|
|
31
|
+
// const obj1 = {
|
|
32
|
+
// a: 1,
|
|
33
|
+
// b: {
|
|
34
|
+
// c: 2,
|
|
35
|
+
// d: 3,
|
|
36
|
+
// },
|
|
37
|
+
// };
|
|
38
|
+
//
|
|
39
|
+
// const obj2 = {
|
|
40
|
+
// a: 4,
|
|
41
|
+
// b: {
|
|
42
|
+
// c: 5,
|
|
43
|
+
// },
|
|
44
|
+
// e: 6,
|
|
45
|
+
// };
|
|
46
|
+
//
|
|
47
|
+
// const result = {
|
|
48
|
+
// a: 4,
|
|
49
|
+
// b: {
|
|
50
|
+
// c: 5,
|
|
51
|
+
// d: 3,
|
|
52
|
+
// },
|
|
53
|
+
// e: 6,
|
|
54
|
+
// };
|
|
55
|
+
//
|
|
56
|
+
|
|
57
|
+
exports.deepMerge = deepMerge;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const deepMerge: <T>(obj1: any, obj2: any) => T;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
const deepMerge = (obj1, obj2) => {
|
|
3
|
+
if (typeof obj1 !== 'object' || typeof obj2 !== 'object') {
|
|
4
|
+
// If either obj1 or obj2 is not an object, return obj1
|
|
5
|
+
return obj2;
|
|
6
|
+
}
|
|
7
|
+
// Create a new object to store the merged result
|
|
8
|
+
const result = Object.assign({}, obj1);
|
|
9
|
+
for (const key in obj2) {
|
|
10
|
+
if (Object.prototype.hasOwnProperty.call(obj2, key)) {
|
|
11
|
+
if (typeof obj2[key] === 'object' &&
|
|
12
|
+
Object.prototype.hasOwnProperty.call(obj1, key) &&
|
|
13
|
+
typeof obj1[key] === 'object') {
|
|
14
|
+
// If both obj1 and obj2 have objects with the same key, recursively merge them
|
|
15
|
+
result[key] = deepMerge(obj1[key], obj2[key]);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
// Otherwise, simply assign the value from obj2 to the result
|
|
19
|
+
result[key] = obj2[key];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
// Example usage:
|
|
26
|
+
//
|
|
27
|
+
// const obj1 = {
|
|
28
|
+
// a: 1,
|
|
29
|
+
// b: {
|
|
30
|
+
// c: 2,
|
|
31
|
+
// d: 3,
|
|
32
|
+
// },
|
|
33
|
+
// };
|
|
34
|
+
//
|
|
35
|
+
// const obj2 = {
|
|
36
|
+
// a: 4,
|
|
37
|
+
// b: {
|
|
38
|
+
// c: 5,
|
|
39
|
+
// },
|
|
40
|
+
// e: 6,
|
|
41
|
+
// };
|
|
42
|
+
//
|
|
43
|
+
// const result = {
|
|
44
|
+
// a: 4,
|
|
45
|
+
// b: {
|
|
46
|
+
// c: 5,
|
|
47
|
+
// d: 3,
|
|
48
|
+
// },
|
|
49
|
+
// e: 6,
|
|
50
|
+
// };
|
|
51
|
+
//
|
|
52
|
+
|
|
53
|
+
export { deepMerge };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './deepMerge';
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var i18n = require('i18next');
|
|
7
|
+
var reactI18next = require('react-i18next');
|
|
8
|
+
var translation = require('./en/translation.cjs');
|
|
9
|
+
var deepMerge = require('./helpers/deepMerge.cjs');
|
|
10
|
+
|
|
11
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
12
|
+
|
|
13
|
+
var i18n__default = /*#__PURE__*/_interopDefaultLegacy(i18n);
|
|
14
|
+
|
|
15
|
+
/* eslint-disable import/no-named-as-default-member */
|
|
16
|
+
class Locale {
|
|
17
|
+
static setResources(customResources) {
|
|
18
|
+
if (Locale.__resources__) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (!customResources) {
|
|
22
|
+
Locale.__resources__ = {
|
|
23
|
+
en: { translation: translation.translation },
|
|
24
|
+
};
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const sdkResources = {};
|
|
28
|
+
Object.keys(customResources).forEach((lang) => {
|
|
29
|
+
const mergedResource = Object.assign({}, translation.translation);
|
|
30
|
+
sdkResources[lang] = {
|
|
31
|
+
translation: deepMerge.deepMerge(mergedResource, customResources[lang]),
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
Locale.__resources__ = sdkResources;
|
|
35
|
+
}
|
|
36
|
+
static setup(resources) {
|
|
37
|
+
if (Locale.__initialized__ && Locale.__i18nInstance__) {
|
|
38
|
+
return Locale.__i18nInstance__;
|
|
39
|
+
}
|
|
40
|
+
Locale.setResources(resources);
|
|
41
|
+
const i18nInstance = i18n__default["default"].createInstance();
|
|
42
|
+
i18nInstance.use(reactI18next.initReactI18next).init({
|
|
43
|
+
fallbackLng: 'en',
|
|
44
|
+
interpolation: {
|
|
45
|
+
escapeValue: false, // not needed for react as it escapes by default
|
|
46
|
+
},
|
|
47
|
+
lng: 'en',
|
|
48
|
+
resources: Locale.getResources(),
|
|
49
|
+
});
|
|
50
|
+
Locale.__i18nInstance__ = i18nInstance;
|
|
51
|
+
Locale.__initialized__ = true;
|
|
52
|
+
return Locale.__i18nInstance__;
|
|
53
|
+
}
|
|
54
|
+
static getInstance() {
|
|
55
|
+
if (!Locale.__initialized__) {
|
|
56
|
+
this.setup();
|
|
57
|
+
}
|
|
58
|
+
// istanbul ignore next
|
|
59
|
+
if (!Locale.__i18nInstance__ || !Locale.__initialized__) {
|
|
60
|
+
throw new Error('Locale is not initialized');
|
|
61
|
+
}
|
|
62
|
+
return Locale.__i18nInstance__;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
Locale.__i18nInstance__ = null;
|
|
66
|
+
Locale.__initialized__ = false;
|
|
67
|
+
Locale.getResources = () => Locale.__resources__;
|
|
68
|
+
|
|
69
|
+
exports.Locale = Locale;
|
|
70
|
+
exports["default"] = Locale;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import i18n from 'i18next';
|
|
2
|
+
import { LocaleResource } from './type';
|
|
3
|
+
type I18n = ReturnType<typeof i18n.createInstance>;
|
|
4
|
+
export declare class Locale {
|
|
5
|
+
private static __resources__;
|
|
6
|
+
private static __i18nInstance__;
|
|
7
|
+
private static __initialized__;
|
|
8
|
+
private static getResources;
|
|
9
|
+
private static setResources;
|
|
10
|
+
static setup(resources?: LocaleResource): import("i18next").i18n;
|
|
11
|
+
static getInstance(): I18n;
|
|
12
|
+
}
|
|
13
|
+
export default Locale;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import i18n from 'i18next';
|
|
3
|
+
import { initReactI18next } from 'react-i18next';
|
|
4
|
+
import { translation } from './en/translation.js';
|
|
5
|
+
import { deepMerge } from './helpers/deepMerge.js';
|
|
6
|
+
|
|
7
|
+
/* eslint-disable import/no-named-as-default-member */
|
|
8
|
+
class Locale {
|
|
9
|
+
static setResources(customResources) {
|
|
10
|
+
if (Locale.__resources__) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (!customResources) {
|
|
14
|
+
Locale.__resources__ = {
|
|
15
|
+
en: { translation: translation },
|
|
16
|
+
};
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const sdkResources = {};
|
|
20
|
+
Object.keys(customResources).forEach((lang) => {
|
|
21
|
+
const mergedResource = Object.assign({}, translation);
|
|
22
|
+
sdkResources[lang] = {
|
|
23
|
+
translation: deepMerge(mergedResource, customResources[lang]),
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
Locale.__resources__ = sdkResources;
|
|
27
|
+
}
|
|
28
|
+
static setup(resources) {
|
|
29
|
+
if (Locale.__initialized__ && Locale.__i18nInstance__) {
|
|
30
|
+
return Locale.__i18nInstance__;
|
|
31
|
+
}
|
|
32
|
+
Locale.setResources(resources);
|
|
33
|
+
const i18nInstance = i18n.createInstance();
|
|
34
|
+
i18nInstance.use(initReactI18next).init({
|
|
35
|
+
fallbackLng: 'en',
|
|
36
|
+
interpolation: {
|
|
37
|
+
escapeValue: false, // not needed for react as it escapes by default
|
|
38
|
+
},
|
|
39
|
+
lng: 'en',
|
|
40
|
+
resources: Locale.getResources(),
|
|
41
|
+
});
|
|
42
|
+
Locale.__i18nInstance__ = i18nInstance;
|
|
43
|
+
Locale.__initialized__ = true;
|
|
44
|
+
return Locale.__i18nInstance__;
|
|
45
|
+
}
|
|
46
|
+
static getInstance() {
|
|
47
|
+
if (!Locale.__initialized__) {
|
|
48
|
+
this.setup();
|
|
49
|
+
}
|
|
50
|
+
// istanbul ignore next
|
|
51
|
+
if (!Locale.__i18nInstance__ || !Locale.__initialized__) {
|
|
52
|
+
throw new Error('Locale is not initialized');
|
|
53
|
+
}
|
|
54
|
+
return Locale.__i18nInstance__;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
Locale.__i18nInstance__ = null;
|
|
58
|
+
Locale.__initialized__ = false;
|
|
59
|
+
Locale.getResources = () => Locale.__resources__;
|
|
60
|
+
|
|
61
|
+
export { Locale, Locale as default };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { translation } from './en/translation';
|
|
2
|
+
export type Translation = typeof translation;
|
|
3
|
+
type DeepPartial<T> = T extends object ? {
|
|
4
|
+
[P in keyof T]?: DeepPartial<T[P]>;
|
|
5
|
+
} : T;
|
|
6
|
+
export type TranslationOverrides = DeepPartial<Translation>;
|
|
7
|
+
export type Lang = 'ar' | 'da' | 'de' | 'en' | 'es' | 'fi' | 'fr' | 'he' | 'it' | 'ja' | 'nl' | 'pl' | 'pt' | 'ru' | 'uk' | 'zh';
|
|
8
|
+
export type LocaleResource = {
|
|
9
|
+
[key in Lang]?: TranslationOverrides;
|
|
10
|
+
};
|
|
11
|
+
export type InternalLocaleResources = {
|
|
12
|
+
[key in Lang]?: {
|
|
13
|
+
translation: Translation;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export {};
|