piral-translate 1.0.0-pre.2217 → 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.
- package/LICENSE +1 -1
- package/README.md +12 -2
- package/esm/Languages.js +2 -2
- package/esm/Languages.js.map +1 -1
- package/esm/actions.js +17 -19
- package/esm/actions.js.map +1 -1
- package/esm/components.d.ts +2 -3
- package/esm/components.js +1 -1
- package/esm/components.js.map +1 -1
- package/esm/create.js +39 -19
- package/esm/create.js.map +1 -1
- package/esm/current.js +2 -2
- package/esm/current.js.map +1 -1
- package/esm/default.d.ts +2 -2
- package/esm/default.js +1 -1
- package/esm/default.js.map +1 -1
- package/esm/hooks.js +12 -10
- package/esm/hooks.js.map +1 -1
- package/esm/localize.d.ts +2 -2
- package/esm/localize.js +20 -23
- package/esm/localize.js.map +1 -1
- package/esm/types.d.ts +24 -4
- package/lib/Languages.js +6 -5
- package/lib/Languages.js.map +1 -1
- package/lib/actions.js +17 -19
- package/lib/actions.js.map +1 -1
- package/lib/components.d.ts +2 -3
- package/lib/components.js +2 -2
- package/lib/components.js.map +1 -1
- package/lib/create.js +43 -23
- package/lib/create.js.map +1 -1
- package/lib/current.js +3 -3
- package/lib/current.js.map +1 -1
- package/lib/default.d.ts +2 -2
- package/lib/default.js +3 -2
- package/lib/default.js.map +1 -1
- package/lib/hooks.js +14 -12
- package/lib/hooks.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/localize.d.ts +2 -2
- package/lib/localize.js +20 -22
- package/lib/localize.js.map +1 -1
- package/lib/types.d.ts +24 -4
- package/package.json +33 -6
- package/piral-translate.min.js +1 -0
- package/src/actions.test.ts +134 -5
- package/src/components.tsx +1 -3
- package/src/create.test.ts +122 -3
- package/src/create.ts +32 -3
- package/src/default.tsx +2 -1
- package/src/hooks.ts +3 -1
- package/src/localize.ts +5 -5
- package/src/types.ts +24 -5
package/lib/components.d.ts
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export declare const PiralLanguagesPicker: React.ComponentType<LanguagesPickerProps>;
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const PiralLanguagesPicker: import("react").ComponentType<import("./types").LanguagesPickerProps>;
|
package/lib/components.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PiralLanguagesPicker = void 0;
|
|
4
|
-
|
|
5
|
-
exports.PiralLanguagesPicker = piral_core_1.getPiralComponent('LanguagesPicker');
|
|
4
|
+
const piral_core_1 = require("piral-core");
|
|
5
|
+
exports.PiralLanguagesPicker = (0, piral_core_1.getPiralComponent)('LanguagesPicker');
|
|
6
6
|
//# sourceMappingURL=components.js.map
|
package/lib/components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":";;;AAAA,2CAA+C;AAElC,QAAA,oBAAoB,GAAG,IAAA,8BAAiB,EAAC,iBAAiB,CAAC,CAAC"}
|
package/lib/create.js
CHANGED
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createLocaleApi = exports.setupLocalizer = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
const deepmerge = require("deepmerge");
|
|
5
|
+
const actions_1 = require("./actions");
|
|
6
|
+
const localize_1 = require("./localize");
|
|
7
|
+
const default_1 = require("./default");
|
|
8
8
|
/**
|
|
9
9
|
* Sets up a new localizer by using the given config.
|
|
10
10
|
* @param config The configuration for the new localizer.
|
|
11
11
|
*/
|
|
12
|
-
function setupLocalizer(config) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
var language = usedLang || defaultLang;
|
|
12
|
+
function setupLocalizer(config = {}) {
|
|
13
|
+
const msgs = config.messages || {};
|
|
14
|
+
const languages = Object.keys(msgs);
|
|
15
|
+
const defaultLang = languages[0] || 'en';
|
|
16
|
+
const computeLang = config.language;
|
|
17
|
+
const usedLang = typeof computeLang === 'function' ? computeLang(languages, defaultLang, 'en') : computeLang;
|
|
18
|
+
const language = usedLang || defaultLang;
|
|
20
19
|
return new localize_1.Localizer(msgs, language, languages.length ? languages : [language], config.fallback);
|
|
21
20
|
}
|
|
22
21
|
exports.setupLocalizer = setupLocalizer;
|
|
@@ -24,25 +23,46 @@ exports.setupLocalizer = setupLocalizer;
|
|
|
24
23
|
* Creates new Pilet API extensions for localization.
|
|
25
24
|
* @param localizer The specific localizer to be used, if any.
|
|
26
25
|
*/
|
|
27
|
-
function createLocaleApi(localizer) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
context.
|
|
31
|
-
context.dispatch(function (state) { return (tslib_1.__assign(tslib_1.__assign({}, state), { components: tslib_1.__assign(tslib_1.__assign({}, state.components), { LanguagesPicker: default_1.DefaultPicker }), language: {
|
|
26
|
+
function createLocaleApi(localizer = setupLocalizer()) {
|
|
27
|
+
return (context) => {
|
|
28
|
+
context.defineActions((0, actions_1.createActions)(localizer));
|
|
29
|
+
context.dispatch((state) => (Object.assign(Object.assign({}, state), { components: Object.assign({ LanguagesPicker: default_1.DefaultPicker }, state.components), language: {
|
|
32
30
|
loading: false,
|
|
33
31
|
available: localizer.languages,
|
|
34
32
|
selected: localizer.language,
|
|
35
|
-
} }))
|
|
36
|
-
return
|
|
37
|
-
|
|
33
|
+
} })));
|
|
34
|
+
return (api) => {
|
|
35
|
+
let localTranslations = {};
|
|
38
36
|
return {
|
|
39
|
-
|
|
37
|
+
addTranslations(messages, isOverriding = true) {
|
|
38
|
+
const messagesToMerge = messages;
|
|
39
|
+
if (isOverriding) {
|
|
40
|
+
messagesToMerge.unshift(localizer.messages);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
messagesToMerge.push(localizer.messages);
|
|
44
|
+
}
|
|
45
|
+
this.setTranslations(deepmerge.all(messagesToMerge));
|
|
46
|
+
},
|
|
47
|
+
getCurrentLanguage(cb) {
|
|
48
|
+
const selected = context.readState((s) => s.language.selected);
|
|
49
|
+
if (cb) {
|
|
50
|
+
cb(selected);
|
|
51
|
+
const handler = (ev) => {
|
|
52
|
+
cb(ev.currentLanguage);
|
|
53
|
+
};
|
|
54
|
+
api.on('select-language', handler);
|
|
55
|
+
return () => api.off('select-language', handler);
|
|
56
|
+
}
|
|
57
|
+
return selected;
|
|
58
|
+
},
|
|
59
|
+
setTranslations(messages) {
|
|
40
60
|
localTranslations = messages;
|
|
41
61
|
},
|
|
42
|
-
getTranslations
|
|
62
|
+
getTranslations() {
|
|
43
63
|
return localTranslations;
|
|
44
64
|
},
|
|
45
|
-
translate
|
|
65
|
+
translate(tag, variables) {
|
|
46
66
|
return localizer.localizeLocal(localTranslations, tag, variables);
|
|
47
67
|
},
|
|
48
68
|
};
|
package/lib/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":";;;AAAA,uCAAuC;AAGvC,uCAA0C;AAC1C,yCAAuC;AACvC,uCAA0C;AA8B1C;;;GAGG;AACH,SAAgB,cAAc,CAAC,SAAuB,EAAE;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;IACpC,MAAM,QAAQ,GAAG,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC7G,MAAM,QAAQ,GAAG,QAAQ,IAAI,WAAW,CAAC;IACzC,OAAO,IAAI,oBAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AACnG,CAAC;AARD,wCAQC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,YAAyB,cAAc,EAAE;IACvE,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,OAAO,CAAC,aAAa,CAAC,IAAA,uBAAa,EAAC,SAAS,CAAC,CAAC,CAAC;QAEhD,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iCACvB,KAAK,KACR,UAAU,kBACR,eAAe,EAAE,uBAAa,IAC3B,KAAK,CAAC,UAAU,GAErB,QAAQ,EAAE;gBACR,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,QAAQ,EAAE,SAAS,CAAC,QAAQ;aAC7B,IACD,CAAC,CAAC;QAEJ,OAAO,CAAC,GAAG,EAAE,EAAE;YACb,IAAI,iBAAiB,GAAyB,EAAE,CAAC;YAEjD,OAAO;gBACL,eAAe,CAAC,QAAgC,EAAE,eAAwB,IAAI;oBAC5E,MAAM,eAAe,GAA2B,QAAQ,CAAC;oBAEzD,IAAI,YAAY,EAAE;wBAChB,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;qBAC7C;yBAAM;wBACL,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;qBAC1C;oBAED,IAAI,CAAC,eAAe,CAClB,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAC/B,CAAC;gBACJ,CAAC;gBACD,kBAAkB,CAAC,EAAwB;oBACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAE/D,IAAI,EAAE,EAAE;wBACN,EAAE,CAAC,QAAQ,CAAC,CAAC;wBACb,MAAM,OAAO,GAAG,CAAC,EAA4B,EAAE,EAAE;4BAC/C,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;wBACzB,CAAC,CAAC;wBACF,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;wBACnC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;qBAClD;oBAED,OAAO,QAAQ,CAAC;gBAClB,CAAC;gBACD,eAAe,CAAC,QAAQ;oBACtB,iBAAiB,GAAG,QAAQ,CAAC;gBAC/B,CAAC;gBACD,eAAe;oBACb,OAAO,iBAAiB,CAAC;gBAC3B,CAAC;gBACD,SAAS,CAAC,GAAG,EAAE,SAAS;oBACtB,OAAO,SAAS,CAAC,aAAa,CAAC,iBAAiB,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gBACpE,CAAC;aACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AA5DD,0CA4DC"}
|
package/lib/current.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getUserLocale = void 0;
|
|
4
|
-
|
|
4
|
+
const piral_core_1 = require("piral-core");
|
|
5
5
|
function getUserLocaleUnchecked(defaultLocale, remoteLocale) {
|
|
6
|
-
|
|
6
|
+
const storedLocale = piral_core_1.cookie.getItem('_culture') || piral_core_1.storage.getItem('locale');
|
|
7
7
|
if (storedLocale) {
|
|
8
8
|
return storedLocale;
|
|
9
9
|
}
|
|
@@ -16,7 +16,7 @@ function getUserLocaleUnchecked(defaultLocale, remoteLocale) {
|
|
|
16
16
|
return defaultLocale;
|
|
17
17
|
}
|
|
18
18
|
function getUserLocale(availableLocales, defaultLocale, fallbackLocale) {
|
|
19
|
-
|
|
19
|
+
const selected = getUserLocaleUnchecked(defaultLocale, fallbackLocale || '');
|
|
20
20
|
if (availableLocales.indexOf(selected) !== -1) {
|
|
21
21
|
return selected;
|
|
22
22
|
}
|
package/lib/current.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"current.js","sourceRoot":"","sources":["../src/current.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"current.js","sourceRoot":"","sources":["../src/current.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAE7C,SAAS,sBAAsB,CAAC,aAAqB,EAAE,YAAoB;IACzE,MAAM,YAAY,GAAG,mBAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,oBAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE7E,IAAI,YAAY,EAAE;QAChB,OAAO,YAAY,CAAC;KACrB;SAAM,IAAI,YAAY,EAAE;QACvB,OAAO,YAAY,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACnD;SAAM,IAAI,SAAS,CAAC,QAAQ,EAAE;QAC7B,OAAO,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAC3C;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAgB,aAAa,CAAC,gBAA+B,EAAE,aAAqB,EAAE,cAAuB;IAC3G,MAAM,QAAQ,GAAG,sBAAsB,CAAC,aAAa,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC;IAE7E,IAAI,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;QAC7C,OAAO,QAAQ,CAAC;KACjB;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AARD,sCAQC"}
|
package/lib/default.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import type { FC } from 'react';
|
|
2
2
|
import { LanguagesPickerProps } from './types';
|
|
3
|
-
export declare const DefaultPicker:
|
|
3
|
+
export declare const DefaultPicker: FC<LanguagesPickerProps>;
|
package/lib/default.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DefaultPicker = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
const piral_core_1 = require("piral-core");
|
|
5
|
+
const DefaultPicker = (props) => (0, piral_core_1.defaultRender)(undefined);
|
|
6
|
+
exports.DefaultPicker = DefaultPicker;
|
|
6
7
|
//# sourceMappingURL=default.js.map
|
package/lib/default.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default.js","sourceRoot":"","sources":["../src/default.tsx"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"default.js","sourceRoot":"","sources":["../src/default.tsx"],"names":[],"mappings":";;;AACA,2CAA2C;AAGpC,MAAM,aAAa,GAA6B,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;AAA9E,QAAA,aAAa,iBAAiE"}
|
package/lib/hooks.js
CHANGED
|
@@ -1,29 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.useTranslate = exports.useDynamicLanguage = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const piral_core_1 = require("piral-core");
|
|
6
6
|
function useDynamicLanguage(defaultSelected, load) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
react_1.useEffect(
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
const [selected, setSelected] = (0, react_1.useState)(defaultSelected);
|
|
8
|
+
const { selectLanguage, setTranslations, getTranslations } = (0, piral_core_1.useActions)();
|
|
9
|
+
(0, react_1.useEffect)(() => {
|
|
10
|
+
let active = true;
|
|
11
|
+
const current = getTranslations(selected);
|
|
12
12
|
selectLanguage(undefined);
|
|
13
|
-
load(selected, current).then(
|
|
13
|
+
load(selected, current).then((result) => {
|
|
14
14
|
if (active) {
|
|
15
15
|
setTranslations(selected, result);
|
|
16
16
|
selectLanguage(selected);
|
|
17
17
|
}
|
|
18
|
-
},
|
|
19
|
-
return
|
|
18
|
+
}, (err) => console.error(err));
|
|
19
|
+
return () => {
|
|
20
|
+
active = false;
|
|
21
|
+
};
|
|
20
22
|
}, [selected]);
|
|
21
23
|
return [selected, setSelected];
|
|
22
24
|
}
|
|
23
25
|
exports.useDynamicLanguage = useDynamicLanguage;
|
|
24
26
|
function useTranslate() {
|
|
25
|
-
|
|
26
|
-
piral_core_1.useGlobalState(
|
|
27
|
+
const { translate } = (0, piral_core_1.useActions)();
|
|
28
|
+
(0, piral_core_1.useGlobalState)((m) => m.language.selected);
|
|
27
29
|
return translate;
|
|
28
30
|
}
|
|
29
31
|
exports.useTranslate = useTranslate;
|
package/lib/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":";;;AAAA
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":";;;AAAA,iCAA4C;AAC5C,2CAAwD;AAGxD,SAAgB,kBAAkB,CAChC,eAAuB,EACvB,IAAoB;IAEpB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAC,eAAe,CAAC,CAAC;IAC1D,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,IAAA,uBAAU,GAAE,CAAC;IAE1E,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC1C,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAC1B,CAAC,MAAM,EAAE,EAAE;YACT,IAAI,MAAM,EAAE;gBACV,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAClC,cAAc,CAAC,QAAQ,CAAC,CAAC;aAC1B;QACH,CAAC,EACD,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAC5B,CAAC;QACF,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACjC,CAAC;AA1BD,gDA0BC;AAED,SAAgB,YAAY;IAC1B,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,uBAAU,GAAE,CAAC;IACnC,IAAA,2BAAc,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO,SAAS,CAAC;AACnB,CAAC;AAJD,oCAIC"}
|
package/lib/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
4
|
tslib_1.__exportStar(require("./components"), exports);
|
|
5
5
|
tslib_1.__exportStar(require("./create"), exports);
|
|
6
6
|
tslib_1.__exportStar(require("./current"), exports);
|
package/lib/localize.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export declare class Localizer implements Localizable {
|
|
|
14
14
|
* @param key The key of the translation snippet.
|
|
15
15
|
* @param variables The optional variables to use.
|
|
16
16
|
*/
|
|
17
|
-
localizeGlobal<T>(key: string, variables?: T): string;
|
|
17
|
+
localizeGlobal<T extends object>(key: string, variables?: T): string;
|
|
18
18
|
/**
|
|
19
19
|
* Localizes the given key via the local translations.
|
|
20
20
|
* Uses the global translations as fallback mechanism.
|
|
@@ -22,7 +22,7 @@ export declare class Localizer implements Localizable {
|
|
|
22
22
|
* @param key The key of the translation snippet.
|
|
23
23
|
* @param variables The optional variables to use.
|
|
24
24
|
*/
|
|
25
|
-
localizeLocal<T>(localMessages: LocalizationMessages, key: string, variables?: T): string;
|
|
25
|
+
localizeLocal<T extends object>(localMessages: LocalizationMessages, key: string, variables?: T): string;
|
|
26
26
|
private localizeBase;
|
|
27
27
|
private translateMessage;
|
|
28
28
|
}
|
package/lib/localize.js
CHANGED
|
@@ -7,8 +7,8 @@ function defaultFallback(key, language) {
|
|
|
7
7
|
}
|
|
8
8
|
else {
|
|
9
9
|
if (language) {
|
|
10
|
-
console.warn(
|
|
11
|
-
return
|
|
10
|
+
console.warn(`Missing translation of "${key}" in language "${language}".`);
|
|
11
|
+
return `__${language}_${key}__`;
|
|
12
12
|
}
|
|
13
13
|
else {
|
|
14
14
|
return '';
|
|
@@ -16,16 +16,15 @@ function defaultFallback(key, language) {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
function formatMessage(message, variables) {
|
|
19
|
-
return message.replace(/{{\s*([A-Za-z0-9_.]+)\s*}}/g,
|
|
20
|
-
return p1 in variables ? variables[p1] || '' :
|
|
19
|
+
return message.replace(/{{\s*([A-Za-z0-9_.]+)\s*}}/g, (_match, p1) => {
|
|
20
|
+
return p1 in variables ? variables[p1] || '' : `{{${p1}}}`;
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
class Localizer {
|
|
24
24
|
/**
|
|
25
25
|
* Creates a new instance of a localizer.
|
|
26
26
|
*/
|
|
27
|
-
|
|
28
|
-
if (fallback === void 0) { fallback = defaultFallback; }
|
|
27
|
+
constructor(messages, language, languages, fallback = defaultFallback) {
|
|
29
28
|
this.messages = messages;
|
|
30
29
|
this.language = language;
|
|
31
30
|
this.languages = languages;
|
|
@@ -36,9 +35,9 @@ var Localizer = /** @class */ (function () {
|
|
|
36
35
|
* @param key The key of the translation snippet.
|
|
37
36
|
* @param variables The optional variables to use.
|
|
38
37
|
*/
|
|
39
|
-
|
|
38
|
+
localizeGlobal(key, variables) {
|
|
40
39
|
return this.localizeBase(key, variables);
|
|
41
|
-
}
|
|
40
|
+
}
|
|
42
41
|
/**
|
|
43
42
|
* Localizes the given key via the local translations.
|
|
44
43
|
* Uses the global translations as fallback mechanism.
|
|
@@ -46,27 +45,26 @@ var Localizer = /** @class */ (function () {
|
|
|
46
45
|
* @param key The key of the translation snippet.
|
|
47
46
|
* @param variables The optional variables to use.
|
|
48
47
|
*/
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
localizeLocal(localMessages, key, variables) {
|
|
49
|
+
const message = this.translateMessage(localMessages, key, variables);
|
|
51
50
|
if (message === undefined) {
|
|
52
51
|
return this.localizeBase(key, variables);
|
|
53
52
|
}
|
|
54
53
|
return message;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
|
|
54
|
+
}
|
|
55
|
+
localizeBase(key, variables) {
|
|
56
|
+
const message = this.translateMessage(this.messages, key, variables);
|
|
58
57
|
if (message === undefined) {
|
|
59
58
|
return this.fallback(key, this.language);
|
|
60
59
|
}
|
|
61
60
|
return message;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
61
|
+
}
|
|
62
|
+
translateMessage(messages, key, variables) {
|
|
63
|
+
const language = this.language;
|
|
64
|
+
const translations = language && messages[language];
|
|
65
|
+
const translation = translations && translations[key];
|
|
67
66
|
return translation && (variables ? formatMessage(translation, variables) : translation);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
}());
|
|
67
|
+
}
|
|
68
|
+
}
|
|
71
69
|
exports.Localizer = Localizer;
|
|
72
70
|
//# sourceMappingURL=localize.js.map
|
package/lib/localize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localize.js","sourceRoot":"","sources":["../src/localize.ts"],"names":[],"mappings":";;;AAEA,SAAS,eAAe,CAAC,GAAW,EAAE,QAAgB;IACpD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;QACzC,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B;SAAM;QACL,IAAI,QAAQ,EAAE;YACZ,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"localize.js","sourceRoot":"","sources":["../src/localize.ts"],"names":[],"mappings":";;;AAEA,SAAS,eAAe,CAAC,GAAW,EAAE,QAAgB;IACpD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;QACzC,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B;SAAM;QACL,IAAI,QAAQ,EAAE;YACZ,OAAO,CAAC,IAAI,CAAC,2BAA2B,GAAG,kBAAkB,QAAQ,IAAI,CAAC,CAAC;YAC3E,OAAO,KAAK,QAAQ,IAAI,GAAG,IAAI,CAAC;SACjC;aAAM;YACL,OAAO,EAAE,CAAC;SACX;KACF;AACH,CAAC;AAED,SAAS,aAAa,CAAmB,OAAe,EAAE,SAAY;IACpE,OAAO,OAAO,CAAC,OAAO,CAAC,6BAA6B,EAAE,CAAC,MAAc,EAAE,EAAU,EAAE,EAAE;QACnF,OAAO,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAa,SAAS;IACpB;;OAEG;IACH,YACS,QAA8B,EAC9B,QAAgB,EAChB,SAAwB,EACvB,WAAW,eAAe;QAH3B,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,aAAQ,GAAR,QAAQ,CAAQ;QAChB,cAAS,GAAT,SAAS,CAAe;QACvB,aAAQ,GAAR,QAAQ,CAAkB;IACjC,CAAC;IAEJ;;;;OAIG;IACI,cAAc,CAAmB,GAAW,EAAE,SAAa;QAChE,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;OAMG;IACI,aAAa,CAAmB,aAAmC,EAAE,GAAW,EAAE,SAAa;QACpG,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAErE,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;SAC1C;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,YAAY,CAAmB,GAAW,EAAE,SAAa;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAErE,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC1C;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,gBAAgB,CAAmB,QAA8B,EAAE,GAAW,EAAE,SAAa;QACnG,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,YAAY,GAAG,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,YAAY,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QACtD,OAAO,WAAW,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC1F,CAAC;CACF;AArDD,8BAqDC"}
|
package/lib/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Disposable } from 'piral-core';
|
|
2
|
+
import type { ComponentType } from 'react';
|
|
2
3
|
declare module 'piral-core/lib/types/custom' {
|
|
3
4
|
interface PiletCustomApi extends PiletLocaleApi {
|
|
4
5
|
}
|
|
@@ -97,8 +98,8 @@ export interface Localizable {
|
|
|
97
98
|
messages: LocalizationMessages;
|
|
98
99
|
language: string;
|
|
99
100
|
languages: Array<string>;
|
|
100
|
-
localizeGlobal<T>(key: string, variables?: T): string;
|
|
101
|
-
localizeLocal<T>(localMessages: LocalizationMessages, key: string, variables?: T): string;
|
|
101
|
+
localizeGlobal<T extends object>(key: string, variables?: T): string;
|
|
102
|
+
localizeLocal<T extends object>(localMessages: LocalizationMessages, key: string, variables?: T): string;
|
|
102
103
|
}
|
|
103
104
|
export interface LocalizationMessages {
|
|
104
105
|
/**
|
|
@@ -107,13 +108,32 @@ export interface LocalizationMessages {
|
|
|
107
108
|
[lang: string]: Translations;
|
|
108
109
|
}
|
|
109
110
|
export interface PiletLocaleApi {
|
|
111
|
+
/**
|
|
112
|
+
* Adds a list of translations to the existing translations.
|
|
113
|
+
*
|
|
114
|
+
* Internally, setTranslations is used, which means the translations will be exclusively used for
|
|
115
|
+
* retrieving translations for the pilet.
|
|
116
|
+
*
|
|
117
|
+
* @param messagesList The list of messages that extend the existing translations
|
|
118
|
+
* @param [isOverriding=true] Indicates whether the new translations overwrite the existing translations
|
|
119
|
+
*/
|
|
120
|
+
addTranslations(messagesList: LocalizationMessages[], isOverriding?: boolean): void;
|
|
121
|
+
/**
|
|
122
|
+
* Gets the currently selected language directly.
|
|
123
|
+
*/
|
|
124
|
+
getCurrentLanguage(): string;
|
|
125
|
+
/**
|
|
126
|
+
* Gets the currently selected language in a callback that is also invoked when the
|
|
127
|
+
* selected language changes. Returns a disposable to stop the notifications.
|
|
128
|
+
*/
|
|
129
|
+
getCurrentLanguage(cb: (currently: string) => void): Disposable;
|
|
110
130
|
/**
|
|
111
131
|
* Translates the given tag (using the optional variables) into a string using the current language.
|
|
112
132
|
* The used template can contain placeholders in form of `{{variableName}}`.
|
|
113
133
|
* @param tag The tag to translate.
|
|
114
134
|
* @param variables The optional variables to fill into the temnplate.
|
|
115
135
|
*/
|
|
116
|
-
translate<T = Record<string, string>>(tag: string, variables?: T): string;
|
|
136
|
+
translate<T extends object = Record<string, string>>(tag: string, variables?: T): string;
|
|
117
137
|
/**
|
|
118
138
|
* Provides translations to the application.
|
|
119
139
|
* The translations will be exclusively used for retrieving translations for the pilet.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "piral-translate",
|
|
3
|
-
"version": "1.0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Plugin for providing translated messages in Piral.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"piral",
|
|
@@ -22,11 +22,29 @@
|
|
|
22
22
|
"module": "esm/index.js",
|
|
23
23
|
"main": "lib/index.js",
|
|
24
24
|
"typings": "lib/index.d.ts",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"import": "./esm/index.js",
|
|
28
|
+
"require": "./lib/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./esm/*": {
|
|
31
|
+
"import": "./esm/*"
|
|
32
|
+
},
|
|
33
|
+
"./lib/*": {
|
|
34
|
+
"require": "./lib/*"
|
|
35
|
+
},
|
|
36
|
+
"./_/*": {
|
|
37
|
+
"import": "./esm/*.js",
|
|
38
|
+
"require": "./lib/*.js"
|
|
39
|
+
},
|
|
40
|
+
"./package.json": "./package.json"
|
|
41
|
+
},
|
|
25
42
|
"sideEffects": false,
|
|
26
43
|
"files": [
|
|
27
44
|
"esm",
|
|
28
45
|
"lib",
|
|
29
|
-
"src"
|
|
46
|
+
"src",
|
|
47
|
+
"piral-translate.min.js"
|
|
30
48
|
],
|
|
31
49
|
"repository": {
|
|
32
50
|
"type": "git",
|
|
@@ -36,17 +54,26 @@
|
|
|
36
54
|
"url": "https://github.com/smapiot/piral/issues"
|
|
37
55
|
},
|
|
38
56
|
"scripts": {
|
|
39
|
-
"
|
|
57
|
+
"cleanup": "rimraf esm lib piral-translate.min.js",
|
|
58
|
+
"build": "yarn build:bundle && yarn build:commonjs && yarn build:esnext",
|
|
59
|
+
"build:bundle": "esbuild src/index.ts --outfile=piral-translate.min.js --bundle --external:piral-core --external:react --minify --global-name=piralTranslate",
|
|
40
60
|
"build:commonjs": "tsc --project tsconfig.json --outDir lib --module commonjs",
|
|
41
61
|
"build:esnext": "tsc --project tsconfig.json --outDir esm --module esnext",
|
|
42
62
|
"typedoc": "typedoc --json ../../../docs/types/piral-translate.json src --exclude \"src/**/*.test.*\"",
|
|
43
63
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
|
44
64
|
},
|
|
65
|
+
"dependencies": {
|
|
66
|
+
"deepmerge": "^4.2.2"
|
|
67
|
+
},
|
|
45
68
|
"devDependencies": {
|
|
46
|
-
"
|
|
69
|
+
"@types/deepmerge": "^2.2.0",
|
|
70
|
+
"@types/react": "^18.0.0",
|
|
71
|
+
"piral-core": "^1.0.0",
|
|
72
|
+
"react": "^18.0.0"
|
|
47
73
|
},
|
|
48
74
|
"peerDependencies": {
|
|
49
|
-
"piral-core": "
|
|
75
|
+
"piral-core": "0.14.x || 0.15.x",
|
|
76
|
+
"react": ">=16.8.0"
|
|
50
77
|
},
|
|
51
|
-
"gitHead": "
|
|
78
|
+
"gitHead": "67d9a2920bd5231baf10bc87ae8985666b18fa3a"
|
|
52
79
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var piralTranslate=(()=>{var F=Object.create;var u=Object.defineProperty,U=Object.defineProperties,$=Object.getOwnPropertyDescriptor,D=Object.getOwnPropertyDescriptors,N=Object.getOwnPropertyNames,x=Object.getOwnPropertySymbols,B=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty,V=Object.prototype.propertyIsEnumerable;var O=(e,t,r)=>t in e?u(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,c=(e,t)=>{for(var r in t||(t={}))h.call(t,r)&&O(e,r,t[r]);if(x)for(var r of x(t))V.call(t,r)&&O(e,r,t[r]);return e},f=(e,t)=>U(e,D(t)),j=e=>u(e,"__esModule",{value:!0});var l=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(t,r)=>(typeof require!="undefined"?require:t)[r]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var K=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Y=(e,t)=>{j(e);for(var r in t)u(e,r,{get:t[r],enumerable:!0})},Z=(e,t,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of N(t))!h.call(e,a)&&a!=="default"&&u(e,a,{get:()=>t[a],enumerable:!(r=$(t,a))||r.enumerable});return e},i=e=>Z(j(u(e!=null?F(B(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var z=K((ye,v)=>{"use strict";var q=function(t){return H(t)&&!J(t)};function H(e){return!!e&&typeof e=="object"}function J(e){var t=Object.prototype.toString.call(e);return t==="[object RegExp]"||t==="[object Date]"||X(e)}var Q=typeof Symbol=="function"&&Symbol.for,W=Q?Symbol.for("react.element"):60103;function X(e){return e.$$typeof===W}function ee(e){return Array.isArray(e)?[]:{}}function p(e,t){return t.clone!==!1&&t.isMergeableObject(e)?g(ee(e),e,t):e}function te(e,t,r){return e.concat(t).map(function(a){return p(a,r)})}function re(e,t){if(!t.customMerge)return g;var r=t.customMerge(e);return typeof r=="function"?r:g}function ae(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter(function(t){return e.propertyIsEnumerable(t)}):[]}function A(e){return Object.keys(e).concat(ae(e))}function S(e,t){try{return t in e}catch{return!1}}function ne(e,t){return S(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))}function se(e,t,r){var a={};return r.isMergeableObject(e)&&A(e).forEach(function(n){a[n]=p(e[n],r)}),A(t).forEach(function(n){ne(e,n)||(S(e,n)&&r.isMergeableObject(t[n])?a[n]=re(n,r)(e[n],t[n],r):a[n]=p(t[n],r))}),a}function g(e,t,r){r=r||{},r.arrayMerge=r.arrayMerge||te,r.isMergeableObject=r.isMergeableObject||q,r.cloneUnlessOtherwiseSpecified=p;var a=Array.isArray(t),n=Array.isArray(e),s=a===n;return s?a?r.arrayMerge(e,t,r):se(e,t,r):p(t,r)}g.all=function(t,r){if(!Array.isArray(t))throw new Error("first argument should be an array");return t.reduce(function(a,n){return g(a,n,r)},{})};var oe=g;v.exports=oe});var be={};Y(be,{Languages:()=>me,PiralLanguagesPicker:()=>T,createLocaleApi:()=>ce,getUserLocale:()=>ue,setupLocalizer:()=>w,useDynamicLanguage:()=>fe,useTranslate:()=>pe});var P=i(l("piral-core")),T=(0,P.getPiralComponent)("LanguagesPicker");var k=i(z());function E(e){return{selectLanguage(t,r){t.dispatch(a=>{e.language=r;let n=a.language.selected,s=r;return setTimeout(()=>{t.emit("select-language",{previousLanguage:n,currentLanguage:s})},0),f(c({},a),{language:f(c({},a.language),{loading:r===void 0,selected:r})})})},translate(t,r,a){return e&&e.localizeGlobal(r,a)},setTranslations(t,r,a){e.messages[r]=a.global;for(let n of a.locals){let s=t.apis[n.name];if(s){let o=s.getTranslations();o[r]=n.value,s.setTranslations(o)}}},getTranslations(t,r){return{global:e.messages[r],locals:Object.keys(t.apis).map(a=>({name:a,value:t.apis[a].getTranslations()[r]}))}}}}function ie(e,t){return t?"...":""}function le(e,t){return e.replace(/{{\s*([A-Za-z0-9_.]+)\s*}}/g,(r,a)=>a in t?t[a]||"":`{{${a}}}`)}var M=class{constructor(t,r,a,n=ie){this.messages=t;this.language=r;this.languages=a;this.fallback=n}localizeGlobal(t,r){return this.localizeBase(t,r)}localizeLocal(t,r,a){let n=this.translateMessage(t,r,a);return n===void 0?this.localizeBase(r,a):n}localizeBase(t,r){let a=this.translateMessage(this.messages,t,r);return a===void 0?this.fallback(t,this.language):a}translateMessage(t,r,a){let n=this.language,s=n&&t[n],o=s&&s[r];return o&&(a?le(o,a):o)}};var C=i(l("piral-core")),_=e=>(0,C.defaultRender)(void 0);function w(e={}){let t=e.messages||{},r=Object.keys(t),a=r[0]||"en",n=e.language,o=(typeof n=="function"?n(r,a,"en"):n)||a;return new M(t,o,r.length?r:[o],e.fallback)}function ce(e=w()){return t=>(t.defineActions(E(e)),t.dispatch(r=>f(c({},r),{components:c({LanguagesPicker:_},r.components),language:{loading:!1,available:e.languages,selected:e.language}})),r=>{let a={};return{addTranslations(n,s=!0){let o=n;s?o.unshift(e.messages):o.push(e.messages),this.setTranslations(k.all(o))},getCurrentLanguage(n){let s=t.readState(o=>o.language.selected);if(n){n(s);let o=b=>{n(b.currentLanguage)};return r.on("select-language",o),()=>r.off("select-language",o)}return s},setTranslations(n){a=n},getTranslations(){return a},translate(n,s){return e.localizeLocal(a,n,s)}}})}var d=i(l("piral-core"));function ge(e,t){let r=d.cookie.getItem("_culture")||d.storage.getItem("locale");return r||(t?t.toLowerCase().substring(0,2):navigator.language?navigator.language.substring(0,2):e)}function ue(e,t,r){let a=ge(t,r||"");return e.indexOf(a)!==-1?a:t}var L=i(l("react")),m=i(l("piral-core"));function fe(e,t){let[r,a]=(0,L.useState)(e),{selectLanguage:n,setTranslations:s,getTranslations:o}=(0,m.useActions)();return(0,L.useEffect)(()=>{let b=!0,R=o(r);return n(void 0),t(r,R).then(y=>{b&&(s(r,y),n(r))},y=>console.error(y)),()=>{b=!1}},[r]),[r,a]}function pe(){let{translate:e}=(0,m.useActions)();return(0,m.useGlobalState)(t=>t.language.selected),e}var G=i(l("react")),I=i(l("piral-core"));var me=()=>{let{available:e,selected:t}=(0,I.useGlobalState)(r=>r.language);return G.createElement(T,{selected:t,available:e})};return be;})();
|