react-i18next 14.1.3 → 15.0.1
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 +11 -0
- package/dist/amd/react-i18next.js +36 -54
- package/dist/amd/react-i18next.min.js +1 -1
- package/dist/commonjs/Trans.js +2 -2
- package/dist/commonjs/TransWithoutContext.js +10 -10
- package/dist/commonjs/Translation.js +6 -5
- package/dist/commonjs/context.js +6 -4
- package/dist/commonjs/useSSR.js +1 -1
- package/dist/commonjs/useTranslation.js +6 -6
- package/dist/commonjs/utils.js +9 -29
- package/dist/es/I18nextProvider.js +5 -6
- package/dist/es/Trans.js +18 -19
- package/dist/es/TransWithoutContext.js +26 -27
- package/dist/es/Translation.js +6 -7
- package/dist/es/context.js +6 -4
- package/dist/es/defaults.js +1 -2
- package/dist/es/package.json +1 -1
- package/dist/es/useSSR.js +2 -3
- package/dist/es/useTranslation.js +7 -8
- package/dist/es/utils.js +7 -34
- package/dist/es/withSSR.js +5 -6
- package/dist/es/withTranslation.js +27 -31
- package/dist/umd/react-i18next.js +36 -54
- package/dist/umd/react-i18next.min.js +1 -1
- package/icu.macro.d.ts +5 -5
- package/index.d.ts +2 -2
- package/package.json +23 -30
- package/react-i18next.js +36 -54
- package/react-i18next.min.js +1 -1
- package/src/Trans.js +2 -3
- package/src/TransWithoutContext.js +12 -15
- package/src/Translation.js +2 -3
- package/src/context.js +6 -6
- package/src/useSSR.js +1 -1
- package/src/useTranslation.js +6 -6
- package/src/utils.js +7 -60
- package/vitest.workspace.typescript.mts +11 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
### 15.0.1
|
|
2
|
+
|
|
3
|
+
- revert arrow function in class property to address [this](https://github.com/i18next/react-i18next/commit/46e8ea5ff69325b73087811a2ce6a2b1faffa971#r145061161)
|
|
4
|
+
|
|
5
|
+
### 15.0.0
|
|
6
|
+
|
|
7
|
+
- use optional chaining, nullish coalescing and nullish coalescing assignment [1774](https://github.com/i18next/react-i18next/pull/1774)
|
|
8
|
+
- Build config and optimizations [1769](https://github.com/i18next/react-i18next/pull/1769)
|
|
9
|
+
- some dependency updates [1768](https://github.com/i18next/react-i18next/pull/1768)
|
|
10
|
+
- use modern hasLoadedNamespace code (now requires at least i18next > v19.4.5 (introduced in june 2020))
|
|
11
|
+
|
|
1
12
|
### 14.1.3
|
|
2
13
|
|
|
3
14
|
- create a isObject helper function [1766](https://github.com/i18next/react-i18next/pull/1766)
|
|
@@ -114,24 +114,24 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
114
114
|
}
|
|
115
115
|
};
|
|
116
116
|
|
|
117
|
-
function
|
|
118
|
-
if (console
|
|
117
|
+
const warn = function () {
|
|
118
|
+
if (console?.warn) {
|
|
119
119
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
120
120
|
args[_key] = arguments[_key];
|
|
121
121
|
}
|
|
122
122
|
if (isString(args[0])) args[0] = `react-i18next:: ${args[0]}`;
|
|
123
123
|
console.warn(...args);
|
|
124
124
|
}
|
|
125
|
-
}
|
|
125
|
+
};
|
|
126
126
|
const alreadyWarned = {};
|
|
127
|
-
function
|
|
127
|
+
const warnOnce = function () {
|
|
128
128
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
129
129
|
args[_key2] = arguments[_key2];
|
|
130
130
|
}
|
|
131
131
|
if (isString(args[0]) && alreadyWarned[args[0]]) return;
|
|
132
132
|
if (isString(args[0])) alreadyWarned[args[0]] = new Date();
|
|
133
133
|
warn(...args);
|
|
134
|
-
}
|
|
134
|
+
};
|
|
135
135
|
const loadedClb = (i18n, cb) => () => {
|
|
136
136
|
if (i18n.isInitialized) {
|
|
137
137
|
cb();
|
|
@@ -155,36 +155,16 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
155
155
|
});
|
|
156
156
|
i18n.loadLanguages(lng, loadedClb(i18n, cb));
|
|
157
157
|
};
|
|
158
|
-
const oldI18nextHasLoadedNamespace = function (ns, i18n) {
|
|
159
|
-
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
160
|
-
const lng = i18n.languages[0];
|
|
161
|
-
const fallbackLng = i18n.options ? i18n.options.fallbackLng : false;
|
|
162
|
-
const lastLng = i18n.languages[i18n.languages.length - 1];
|
|
163
|
-
if (lng.toLowerCase() === 'cimode') return true;
|
|
164
|
-
const loadNotPending = (l, n) => {
|
|
165
|
-
const loadState = i18n.services.backendConnector.state[`${l}|${n}`];
|
|
166
|
-
return loadState === -1 || loadState === 2;
|
|
167
|
-
};
|
|
168
|
-
if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns)) return false;
|
|
169
|
-
if (i18n.hasResourceBundle(lng, ns)) return true;
|
|
170
|
-
if (!i18n.services.backendConnector.backend || i18n.options.resources && !i18n.options.partialBundledLanguages) return true;
|
|
171
|
-
if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;
|
|
172
|
-
return false;
|
|
173
|
-
};
|
|
174
158
|
const hasLoadedNamespace = function (ns, i18n) {
|
|
175
159
|
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
176
160
|
if (!i18n.languages || !i18n.languages.length) {
|
|
177
161
|
warnOnce('i18n.languages were undefined or empty', i18n.languages);
|
|
178
162
|
return true;
|
|
179
163
|
}
|
|
180
|
-
const isNewerI18next = i18n.options.ignoreJSONStructure !== undefined;
|
|
181
|
-
if (!isNewerI18next) {
|
|
182
|
-
return oldI18nextHasLoadedNamespace(ns, i18n, options);
|
|
183
|
-
}
|
|
184
164
|
return i18n.hasLoadedNamespace(ns, {
|
|
185
165
|
lng: options.lng,
|
|
186
166
|
precheck: (i18nInstance, loadNotPending) => {
|
|
187
|
-
if (options.bindI18n
|
|
167
|
+
if (options.bindI18n?.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;
|
|
188
168
|
}
|
|
189
169
|
});
|
|
190
170
|
};
|
|
@@ -245,14 +225,14 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
245
225
|
|
|
246
226
|
const hasChildren = (node, checkLength) => {
|
|
247
227
|
if (!node) return false;
|
|
248
|
-
const base = node.props
|
|
228
|
+
const base = node.props?.children ?? node.children;
|
|
249
229
|
if (checkLength) return base.length > 0;
|
|
250
230
|
return !!base;
|
|
251
231
|
};
|
|
252
232
|
const getChildren = node => {
|
|
253
233
|
if (!node) return [];
|
|
254
|
-
const children = node.props
|
|
255
|
-
return node.props
|
|
234
|
+
const children = node.props?.children ?? node.children;
|
|
235
|
+
return node.props?.i18nIsDynamicList ? getAsArray(children) : children;
|
|
256
236
|
};
|
|
257
237
|
const hasValidReactChildren = children => Array.isArray(children) && children.every(react.isValidElement);
|
|
258
238
|
const getAsArray = data => Array.isArray(data) ? data : [data];
|
|
@@ -267,7 +247,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
267
247
|
if (!children) return '';
|
|
268
248
|
let stringNode = '';
|
|
269
249
|
const childrenArray = getAsArray(children);
|
|
270
|
-
const keepArray = i18nOptions
|
|
250
|
+
const keepArray = i18nOptions?.transSupportBasicHtmlNodes ? i18nOptions.transKeepBasicHtmlNodesFor ?? [] : [];
|
|
271
251
|
childrenArray.forEach((child, childIndex) => {
|
|
272
252
|
if (isString(child)) {
|
|
273
253
|
stringNode += `${child}`;
|
|
@@ -331,7 +311,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
331
311
|
const renderInner = (child, node, rootReactNode) => {
|
|
332
312
|
const childs = getChildren(child);
|
|
333
313
|
const mappedChildren = mapAST(childs, node.children, rootReactNode);
|
|
334
|
-
return hasValidReactChildren(childs) && mappedChildren.length === 0 || child.props
|
|
314
|
+
return hasValidReactChildren(childs) && mappedChildren.length === 0 || child.props?.i18nIsDynamicList ? childs : mappedChildren;
|
|
335
315
|
};
|
|
336
316
|
const pushTranslatedJSX = (child, inner, mem, i, isVoid) => {
|
|
337
317
|
if (child.dummy) {
|
|
@@ -357,7 +337,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
357
337
|
const reactNodes = getAsArray(reactNode);
|
|
358
338
|
const astNodes = getAsArray(astNode);
|
|
359
339
|
return astNodes.reduce((mem, node, i) => {
|
|
360
|
-
const translationContent = node.children
|
|
340
|
+
const translationContent = node.children?.[0]?.content && i18n.services.interpolator.interpolate(node.children[0].content, opts, i18n.language);
|
|
361
341
|
if (node.type === 'tag') {
|
|
362
342
|
let tmp = reactNodes[parseInt(node.name, 10)];
|
|
363
343
|
if (rootReactNode.length === 1 && !tmp) tmp = rootReactNode[0][node.name];
|
|
@@ -450,9 +430,9 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
450
430
|
const t = tFromProps || i18n.t.bind(i18n) || (k => k);
|
|
451
431
|
const reactI18nextOptions = {
|
|
452
432
|
...getDefaults(),
|
|
453
|
-
...
|
|
433
|
+
...i18n.options?.react
|
|
454
434
|
};
|
|
455
|
-
let namespaces = ns || t.ns || i18n.options
|
|
435
|
+
let namespaces = ns || t.ns || i18n.options?.defaultNS;
|
|
456
436
|
namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];
|
|
457
437
|
const nodeAsString = nodesToString(children, reactI18nextOptions);
|
|
458
438
|
const defaultValue = defaults || nodeAsString || reactI18nextOptions.transEmptyNodeValue || i18nKey;
|
|
@@ -460,7 +440,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
460
440
|
hashTransKey
|
|
461
441
|
} = reactI18nextOptions;
|
|
462
442
|
const key = i18nKey || (hashTransKey ? hashTransKey(nodeAsString || defaultValue) : nodeAsString || defaultValue);
|
|
463
|
-
if (i18n.options
|
|
443
|
+
if (i18n.options?.interpolation?.defaultVariables) {
|
|
464
444
|
values = values && Object.keys(values).length > 0 ? {
|
|
465
445
|
...values,
|
|
466
446
|
...i18n.options.interpolation.defaultVariables
|
|
@@ -496,7 +476,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
496
476
|
});
|
|
497
477
|
}
|
|
498
478
|
const content = renderNodes(components || children, translation, i18n, reactI18nextOptions, combinedTOpts, shouldUnescape);
|
|
499
|
-
const useAsParent = parent
|
|
479
|
+
const useAsParent = parent ?? reactI18nextOptions.defaultTransParent;
|
|
500
480
|
return useAsParent ? react.createElement(useAsParent, additionalProps, content) : content;
|
|
501
481
|
}
|
|
502
482
|
|
|
@@ -515,13 +495,15 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
515
495
|
}
|
|
516
496
|
addUsedNamespaces(namespaces) {
|
|
517
497
|
namespaces.forEach(ns => {
|
|
518
|
-
|
|
498
|
+
this.usedNamespaces[ns] ??= true;
|
|
519
499
|
});
|
|
520
500
|
}
|
|
521
|
-
getUsedNamespaces
|
|
501
|
+
getUsedNamespaces() {
|
|
502
|
+
return Object.keys(this.usedNamespaces);
|
|
503
|
+
}
|
|
522
504
|
}
|
|
523
505
|
const composeInitialProps = ForComponent => async ctx => {
|
|
524
|
-
const componentsInitialProps =
|
|
506
|
+
const componentsInitialProps = (await ForComponent.getInitialProps?.(ctx)) ?? {};
|
|
525
507
|
const i18nInitialProps = getInitialProps();
|
|
526
508
|
return {
|
|
527
509
|
...componentsInitialProps,
|
|
@@ -530,7 +512,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
530
512
|
};
|
|
531
513
|
const getInitialProps = () => {
|
|
532
514
|
const i18n = getI18n();
|
|
533
|
-
const namespaces = i18n.reportNamespaces
|
|
515
|
+
const namespaces = i18n.reportNamespaces?.getUsedNamespaces() ?? [];
|
|
534
516
|
const ret = {};
|
|
535
517
|
const initialI18nStore = {};
|
|
536
518
|
i18n.languages.forEach(l => {
|
|
@@ -566,7 +548,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
566
548
|
defaultNS: defaultNSFromContext
|
|
567
549
|
} = react.useContext(I18nContext) || {};
|
|
568
550
|
const i18n = i18nFromProps || i18nFromContext || getI18n();
|
|
569
|
-
const t = tFromProps || i18n
|
|
551
|
+
const t = tFromProps || i18n?.t.bind(i18n);
|
|
570
552
|
return Trans$1({
|
|
571
553
|
children,
|
|
572
554
|
count,
|
|
@@ -577,7 +559,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
577
559
|
values,
|
|
578
560
|
defaults,
|
|
579
561
|
components,
|
|
580
|
-
ns: ns || t
|
|
562
|
+
ns: ns || t?.ns || defaultNSFromContext || i18n?.options?.defaultNS,
|
|
581
563
|
i18n,
|
|
582
564
|
t: tFromProps,
|
|
583
565
|
shouldUnescape,
|
|
@@ -588,7 +570,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
588
570
|
const usePrevious = (value, ignore) => {
|
|
589
571
|
const ref = react.useRef();
|
|
590
572
|
react.useEffect(() => {
|
|
591
|
-
ref.current =
|
|
573
|
+
ref.current = value;
|
|
592
574
|
}, [value, ignore]);
|
|
593
575
|
return ref.current;
|
|
594
576
|
};
|
|
@@ -618,7 +600,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
618
600
|
retNotReady.ready = false;
|
|
619
601
|
return retNotReady;
|
|
620
602
|
}
|
|
621
|
-
if (i18n.options.react
|
|
603
|
+
if (i18n.options.react?.wait) warnOnce('It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.');
|
|
622
604
|
const i18nOptions = {
|
|
623
605
|
...getDefaults(),
|
|
624
606
|
...i18n.options.react,
|
|
@@ -628,9 +610,9 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
628
610
|
useSuspense,
|
|
629
611
|
keyPrefix
|
|
630
612
|
} = i18nOptions;
|
|
631
|
-
let namespaces = ns || defaultNSFromContext || i18n.options
|
|
613
|
+
let namespaces = ns || defaultNSFromContext || i18n.options?.defaultNS;
|
|
632
614
|
namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];
|
|
633
|
-
|
|
615
|
+
i18n.reportNamespaces.addUsedNamespaces?.(namespaces);
|
|
634
616
|
const ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));
|
|
635
617
|
const memoGetT = useMemoizedT(i18n, props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);
|
|
636
618
|
const getT = () => memoGetT;
|
|
@@ -663,11 +645,11 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
663
645
|
const boundReset = () => {
|
|
664
646
|
if (isMounted.current) setT(getNewT);
|
|
665
647
|
};
|
|
666
|
-
if (bindI18n
|
|
667
|
-
if (bindI18nStore
|
|
648
|
+
if (bindI18n) i18n?.on(bindI18n, boundReset);
|
|
649
|
+
if (bindI18nStore) i18n?.store.on(bindI18nStore, boundReset);
|
|
668
650
|
return () => {
|
|
669
651
|
isMounted.current = false;
|
|
670
|
-
if (
|
|
652
|
+
if (i18n) bindI18n?.split(' ').forEach(e => i18n.off(e, boundReset));
|
|
671
653
|
if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, boundReset));
|
|
672
654
|
};
|
|
673
655
|
}, [i18n, joinedNS]);
|
|
@@ -725,18 +707,18 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
725
707
|
};
|
|
726
708
|
};
|
|
727
709
|
|
|
728
|
-
|
|
729
|
-
|
|
710
|
+
const Translation = _ref => {
|
|
711
|
+
let {
|
|
730
712
|
ns,
|
|
731
713
|
children,
|
|
732
714
|
...options
|
|
733
|
-
} =
|
|
715
|
+
} = _ref;
|
|
734
716
|
const [t, i18n, ready] = useTranslation(ns, options);
|
|
735
717
|
return children(t, {
|
|
736
718
|
i18n,
|
|
737
719
|
lng: i18n.language
|
|
738
720
|
}, ready);
|
|
739
|
-
}
|
|
721
|
+
};
|
|
740
722
|
|
|
741
723
|
function I18nextProvider(_ref) {
|
|
742
724
|
let {
|
|
@@ -762,7 +744,7 @@ define(['exports', 'react'], (function (exports, react) { 'use strict';
|
|
|
762
744
|
i18n: i18nFromContext
|
|
763
745
|
} = react.useContext(I18nContext) || {};
|
|
764
746
|
const i18n = i18nFromProps || i18nFromContext || getI18n();
|
|
765
|
-
if (i18n.options
|
|
747
|
+
if (i18n.options?.isClone) return;
|
|
766
748
|
if (initialI18nStore && !i18n.initializedStoreOnce) {
|
|
767
749
|
i18n.services.resourceStore.data = initialI18nStore;
|
|
768
750
|
i18n.options.ns = Object.values(initialI18nStore).reduce((mem, lngResources) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
define(["exports","react"],(function(e,n){"use strict";function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var s=t({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}),a=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function i(e){var n={type:"tag",name:"",voidElement:!1,attrs:{},children:[]},t=e.match(/<\/?([^\s]+?)[/\s>]/);if(t&&(n.name=t[1],(s[t[1]]||"/"===e.charAt(e.length-2))&&(n.voidElement=!0),n.name.startsWith("!--"))){var i=e.indexOf("--\x3e");return{type:"comment",comment:-1!==i?e.slice(4,i):""}}for(var r=new RegExp(a),o=null;null!==(o=r.exec(e));)if(o[0].trim())if(o[1]){var l=o[1].trim(),c=[l,""];l.indexOf("=")>-1&&(c=l.split("=")),n.attrs[c[0]]=c[1],r.lastIndex--}else o[2]&&(n.attrs[o[2]]=o[3].trim().substring(1,o[3].length-1));return n}var r=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,o=/^\s*$/,l=Object.create(null);var c=function(e,n){n||(n={}),n.components||(n.components=l);var t,s=[],a=[],c=-1,u=!1;if(0!==e.indexOf("<")){var p=e.indexOf("<");s.push({type:"text",content:-1===p?e:e.substring(0,p)})}return e.replace(r,(function(r,l){if(u){if(r!=="</"+t.name+">")return;u=!1}var p,d="/"!==r.charAt(1),f=r.startsWith("\x3c!--"),g=l+r.length,h=e.charAt(g);if(f){var m=i(r);return c<0?(s.push(m),s):((p=a[c]).children.push(m),s)}if(d&&(c++,"tag"===(t=i(r)).type&&n.components[t.name]&&(t.type="component",u=!0),t.voidElement||u||!h||"<"===h||t.children.push({type:"text",content:e.slice(g,e.indexOf("<",g))}),0===c&&s.push(t),(p=a[c-1])&&p.children.push(t),a[c]=t),(!d||t.voidElement)&&(c>-1&&(t.voidElement||t.name===r.slice(2,-1))&&(c--,t=-1===c?s:a[c]),!u&&"<"!==h&&h)){p=-1===c?s:a[c].children;var y=e.indexOf("<",g),v=e.slice(g,-1===y?void 0:y);o.test(v)&&(v=" "),(y>-1&&c+p.length>=0||" "!==v)&&p.push({type:"text",content:v})}})),s};function u(){if(console&&console.warn){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];y(n[0])&&(n[0]=`react-i18next:: ${n[0]}`),console.warn(...n)}}const p={};function d(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];y(n[0])&&p[n[0]]||(y(n[0])&&(p[n[0]]=new Date),u(...n))}const f=(e,n)=>()=>{if(e.isInitialized)n();else{const t=()=>{setTimeout((()=>{e.off("initialized",t)}),0),n()};e.on("initialized",t)}},g=(e,n,t)=>{e.loadNamespaces(n,f(e,t))},h=(e,n,t,s)=>{y(t)&&(t=[t]),t.forEach((n=>{e.options.ns.indexOf(n)<0&&e.options.ns.push(n)})),e.loadLanguages(n,f(e,s))},m=e=>e.displayName||e.name||(y(e)&&e.length>0?e:"Unknown"),y=e=>"string"==typeof e,v=e=>"object"==typeof e&&null!==e,b=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,x={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},E=e=>x[e];let N={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:e=>e.replace(b,E)};const O=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};N={...N,...e}},$=()=>N;let k;const w=e=>{k=e},I=()=>k,S=(e,n)=>{if(!e)return!1;const t=e.props?e.props.children:e.children;return n?t.length>0:!!t},C=e=>{if(!e)return[];const n=e.props?e.props.children:e.children;return e.props&&e.props.i18nIsDynamicList?j(n):n},j=e=>Array.isArray(e)?e:[e],R=(e,t)=>{if(!e)return"";let s="";const a=j(e),i=t.transSupportBasicHtmlNodes&&t.transKeepBasicHtmlNodesFor?t.transKeepBasicHtmlNodesFor:[];return a.forEach(((e,a)=>{if(y(e))s+=`${e}`;else if(n.isValidElement(e)){const{props:n,type:r}=e,o=Object.keys(n).length,l=i.indexOf(r)>-1,c=n.children;if(c||!l||o)if(!c&&(!l||o)||n.i18nIsDynamicList)s+=`<${a}></${a}>`;else if(l&&1===o&&y(c))s+=`<${r}>${c}</${r}>`;else{const e=R(c,t);s+=`<${a}>${e}</${a}>`}else s+=`<${r}/>`}else if(null===e)u("Trans: the passed in value is invalid - seems you passed in a null child.");else if(v(e)){const{format:n,...t}=e,a=Object.keys(t);if(1===a.length){const e=n?`${a[0]}, ${n}`:a[0];s+=`{{${e}}}`}else u("react-i18next: the passed in object contained more than one variable - the object should look like {{ value, format }} where format is optional.",e)}else u("Trans: the passed in value is invalid - seems you passed in a variable like {number} - please pass in variables for interpolation as full objects like {{number}}.",e)})),s},L=(e,t,s,a,i,r)=>{if(""===t)return[];const o=a.transKeepBasicHtmlNodesFor||[],l=t&&new RegExp(o.map((e=>`<${e}`)).join("|")).test(t);if(!e&&!l&&!r)return[t];const u={},p=e=>{j(e).forEach((e=>{y(e)||(S(e)?p(C(e)):v(e)&&!n.isValidElement(e)&&Object.assign(u,e))}))};p(e);const d=c(`<0>${t}</0>`),f={...u,...i},g=(e,t,s)=>{const a=C(e),i=m(a,t.children,s);return(e=>Array.isArray(e)&&e.every(n.isValidElement))(a)&&0===i.length||e.props&&e.props.i18nIsDynamicList?a:i},h=(e,t,s,a,i)=>{e.dummy?(e.children=t,s.push(n.cloneElement(e,{key:a},i?void 0:t))):s.push(...n.Children.map([e],(e=>{const s={...e.props};return delete s.i18nIsDynamicList,n.createElement(e.type,{...s,key:a,ref:e.ref},i?null:t)})))},m=(t,i,c)=>{const u=j(t);return j(i).reduce(((t,i,p)=>{const d=i.children&&i.children[0]&&i.children[0].content&&s.services.interpolator.interpolate(i.children[0].content,f,s.language);if("tag"===i.type){let r=u[parseInt(i.name,10)];1!==c.length||r||(r=c[0][i.name]),r||(r={});const b=0!==Object.keys(i.attrs).length?((e,n)=>{const t={...n};return t.props=Object.assign(e.props,n.props),t})({props:i.attrs},r):r,x=n.isValidElement(b),E=x&&S(i,!0)&&!i.voidElement,N=l&&v(b)&&b.dummy&&!x,O=v(e)&&Object.hasOwnProperty.call(e,i.name);if(y(b)){const e=s.services.interpolator.interpolate(b,f,s.language);t.push(e)}else if(S(b)||E){const e=g(b,i,c);h(b,e,t,p)}else if(N){const e=m(u,i.children,c);h(b,e,t,p)}else if(Number.isNaN(parseFloat(i.name)))if(O){const e=g(b,i,c);h(b,e,t,p,i.voidElement)}else if(a.transSupportBasicHtmlNodes&&o.indexOf(i.name)>-1)if(i.voidElement)t.push(n.createElement(i.name,{key:`${i.name}-${p}`}));else{const e=m(u,i.children,c);t.push(n.createElement(i.name,{key:`${i.name}-${p}`},e))}else if(i.voidElement)t.push(`<${i.name} />`);else{const e=m(u,i.children,c);t.push(`<${i.name}>${e}</${i.name}>`)}else if(v(b)&&!x){const e=i.children[0]?d:null;e&&t.push(e)}else h(b,d,t,p,1!==i.children.length||!d)}else if("text"===i.type){const e=a.transWrapTextNodes,o=r?a.unescape(s.services.interpolator.interpolate(i.content,f,s.language)):s.services.interpolator.interpolate(i.content,f,s.language);e?t.push(n.createElement(e,{key:`${i.name}-${p}`},o)):t.push(o)}return t}),[])},b=m([{dummy:!0,children:e||[]}],d,j(e||[]));return C(b[0])};function T(e){let{children:t,count:s,parent:a,i18nKey:i,context:r,tOptions:o={},values:l,defaults:c,components:u,ns:p,i18n:f,t:g,shouldUnescape:h,...m}=e;const v=f||I();if(!v)return d("You will need to pass in an i18next instance by using i18nextReactModule"),t;const b=g||v.t.bind(v)||(e=>e),x={...$(),...v.options&&v.options.react};let E=p||b.ns||v.options&&v.options.defaultNS;E=y(E)?[E]:E||["translation"];const N=R(t,x),O=c||N||x.transEmptyNodeValue||i,{hashTransKey:k}=x,w=i||(k?k(N||O):N||O);v.options&&v.options.interpolation&&v.options.interpolation.defaultVariables&&(l=l&&Object.keys(l).length>0?{...l,...v.options.interpolation.defaultVariables}:{...v.options.interpolation.defaultVariables});const S=l||void 0!==s||!t?o.interpolation:{interpolation:{...o.interpolation,prefix:"#$?",suffix:"?$#"}},C={...o,context:r||o.context,count:s,...l,...S,defaultValue:O,ns:E},j=w?b(w,C):O;u&&Object.keys(u).forEach((e=>{const t=u[e];"function"==typeof t.type||!t.props||!t.props.children||j.indexOf(`${e}/>`)<0&&j.indexOf(`${e} />`)<0||(u[e]=n.createElement((function(){return n.createElement(n.Fragment,null,t)})))}));const T=L(u||t,j,v,x,C,h),P=void 0!==a?a:x.defaultTransParent;return P?n.createElement(P,m,T):T}const P={type:"3rdParty",init(e){O(e.options.react),w(e)}},A=n.createContext();class V{constructor(){this.usedNamespaces={}}addUsedNamespaces(e){e.forEach((e=>{this.usedNamespaces[e]||(this.usedNamespaces[e]=!0)}))}getUsedNamespaces=()=>Object.keys(this.usedNamespaces)}const z=e=>async n=>({...e.getInitialProps?await e.getInitialProps(n):{},...B()}),B=()=>{const e=I(),n=e.reportNamespaces?e.reportNamespaces.getUsedNamespaces():[],t={},s={};return e.languages.forEach((t=>{s[t]={},n.forEach((n=>{s[t][n]=e.getResourceBundle(t,n)||{}}))})),t.initialI18nStore=s,t.initialLanguage=e.language,t};const F=(e,n,t,s)=>e.getFixedT(n,t,s),U=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{i18n:s}=t,{i18n:a,defaultNS:i}=n.useContext(A)||{},r=s||a||I();if(r&&!r.reportNamespaces&&(r.reportNamespaces=new V),!r){d("You will need to pass in an i18next instance by using initReactI18next");const e=(e,n)=>y(n)?n:v(n)&&y(n.defaultValue)?n.defaultValue:Array.isArray(e)?e[e.length-1]:e,n=[e,{},!1];return n.t=e,n.i18n={},n.ready=!1,n}r.options.react&&void 0!==r.options.react.wait&&d("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");const o={...$(),...r.options.react,...t},{useSuspense:l,keyPrefix:c}=o;let u=e||i||r.options&&r.options.defaultNS;u=y(u)?[u]:u||["translation"],r.reportNamespaces.addUsedNamespaces&&r.reportNamespaces.addUsedNamespaces(u);const p=(r.isInitialized||r.initializedStoreOnce)&&u.every((e=>function(e,n){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.languages&&n.languages.length?void 0!==n.options.ignoreJSONStructure?n.hasLoadedNamespace(e,{lng:t.lng,precheck:(n,s)=>{if(t.bindI18n&&t.bindI18n.indexOf("languageChanging")>-1&&n.services.backendConnector.backend&&n.isLanguageChangingTo&&!s(n.isLanguageChangingTo,e))return!1}}):function(e,n){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const s=n.languages[0],a=!!n.options&&n.options.fallbackLng,i=n.languages[n.languages.length-1];if("cimode"===s.toLowerCase())return!0;const r=(e,t)=>{const s=n.services.backendConnector.state[`${e}|${t}`];return-1===s||2===s};return!(t.bindI18n&&t.bindI18n.indexOf("languageChanging")>-1&&n.services.backendConnector.backend&&n.isLanguageChangingTo&&!r(n.isLanguageChangingTo,e)||!n.hasResourceBundle(s,e)&&n.services.backendConnector.backend&&(!n.options.resources||n.options.partialBundledLanguages)&&(!r(s,e)||a&&!r(i,e)))}(e,n,t):(d("i18n.languages were undefined or empty",n.languages),!0)}(e,r,o))),f=((e,t,s,a)=>n.useCallback(F(e,t,s,a),[e,t,s,a]))(r,t.lng||null,"fallback"===o.nsMode?u:u[0],c),m=()=>f,b=()=>F(r,t.lng||null,"fallback"===o.nsMode?u:u[0],c),[x,E]=n.useState(m);let N=u.join();t.lng&&(N=`${t.lng}${N}`);const O=((e,t)=>{const s=n.useRef();return n.useEffect((()=>{s.current=t?s.current:e}),[e,t]),s.current})(N),k=n.useRef(!0);n.useEffect((()=>{const{bindI18n:e,bindI18nStore:n}=o;k.current=!0,p||l||(t.lng?h(r,t.lng,u,(()=>{k.current&&E(b)})):g(r,u,(()=>{k.current&&E(b)}))),p&&O&&O!==N&&k.current&&E(b);const s=()=>{k.current&&E(b)};return e&&r&&r.on(e,s),n&&r&&r.store.on(n,s),()=>{k.current=!1,e&&r&&e.split(" ").forEach((e=>r.off(e,s))),n&&r&&n.split(" ").forEach((e=>r.store.off(e,s)))}}),[r,N]),n.useEffect((()=>{k.current&&p&&E(m)}),[r,c,p]);const w=[x,r,p];if(w.t=x,w.i18n=r,w.ready=p,p)return w;if(!p&&!l)return w;throw new Promise((e=>{t.lng?h(r,t.lng,u,(()=>e())):g(r,u,(()=>e()))}))};const K=function(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{i18n:a}=s,{i18n:i}=n.useContext(A)||{},r=a||i||I();r.options&&r.options.isClone||(e&&!r.initializedStoreOnce&&(r.services.resourceStore.data=e,r.options.ns=Object.values(e).reduce(((e,n)=>(Object.keys(n).forEach((n=>{e.indexOf(n)<0&&e.push(n)})),e)),r.options.ns),r.initializedStoreOnce=!0,r.isInitialized=!0),t&&!r.initializedLanguageOnce&&(r.changeLanguage(t),r.initializedLanguageOnce=!0))};e.I18nContext=A,e.I18nextProvider=function(e){let{i18n:t,defaultNS:s,children:a}=e;const i=n.useMemo((()=>({i18n:t,defaultNS:s})),[t,s]);return n.createElement(A.Provider,{value:i},a)},e.Trans=function(e){let{children:t,count:s,parent:a,i18nKey:i,context:r,tOptions:o={},values:l,defaults:c,components:u,ns:p,i18n:d,t:f,shouldUnescape:g,...h}=e;const{i18n:m,defaultNS:y}=n.useContext(A)||{},v=d||m||I(),b=f||v&&v.t.bind(v);return T({children:t,count:s,parent:a,i18nKey:i,context:r,tOptions:o,values:l,defaults:c,components:u,ns:p||b&&b.ns||y||v&&v.options&&v.options.defaultNS,i18n:v,t:f,shouldUnescape:g,...h})},e.TransWithoutContext=T,e.Translation=function(e){const{ns:n,children:t,...s}=e,[a,i,r]=U(n,s);return t(a,{i18n:i,lng:i.language},r)},e.composeInitialProps=z,e.date=()=>"",e.getDefaults=$,e.getI18n=I,e.getInitialProps=B,e.initReactI18next=P,e.number=()=>"",e.plural=()=>"",e.select=()=>"",e.selectOrdinal=()=>"",e.setDefaults=O,e.setI18n=w,e.time=()=>"",e.useSSR=K,e.useTranslation=U,e.withSSR=()=>function(e){function t(t){let{initialI18nStore:s,initialLanguage:a,...i}=t;return K(s,a),n.createElement(e,{...i})}return t.getInitialProps=z(e),t.displayName=`withI18nextSSR(${m(e)})`,t.WrappedComponent=e,t},e.withTranslation=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(s){function a(a){let{forwardedRef:i,...r}=a;const[o,l,c]=U(e,{...r,keyPrefix:t.keyPrefix}),u={...r,t:o,i18n:l,tReady:c};return t.withRef&&i?u.ref=i:!t.withRef&&i&&(u.forwardedRef=i),n.createElement(s,u)}a.displayName=`withI18nextTranslation(${m(s)})`,a.WrappedComponent=s;return t.withRef?n.forwardRef(((e,t)=>n.createElement(a,Object.assign({},e,{forwardedRef:t})))):a}}}));
|
|
1
|
+
define(["exports","react"],(function(e,n){"use strict";function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var s=t({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}),a=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function i(e){var n={type:"tag",name:"",voidElement:!1,attrs:{},children:[]},t=e.match(/<\/?([^\s]+?)[/\s>]/);if(t&&(n.name=t[1],(s[t[1]]||"/"===e.charAt(e.length-2))&&(n.voidElement=!0),n.name.startsWith("!--"))){var i=e.indexOf("--\x3e");return{type:"comment",comment:-1!==i?e.slice(4,i):""}}for(var r=new RegExp(a),o=null;null!==(o=r.exec(e));)if(o[0].trim())if(o[1]){var l=o[1].trim(),c=[l,""];l.indexOf("=")>-1&&(c=l.split("=")),n.attrs[c[0]]=c[1],r.lastIndex--}else o[2]&&(n.attrs[o[2]]=o[3].trim().substring(1,o[3].length-1));return n}var r=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,o=/^\s*$/,l=Object.create(null);var c=function(e,n){n||(n={}),n.components||(n.components=l);var t,s=[],a=[],c=-1,u=!1;if(0!==e.indexOf("<")){var p=e.indexOf("<");s.push({type:"text",content:-1===p?e:e.substring(0,p)})}return e.replace(r,(function(r,l){if(u){if(r!=="</"+t.name+">")return;u=!1}var p,d="/"!==r.charAt(1),f=r.startsWith("\x3c!--"),h=l+r.length,m=e.charAt(h);if(f){var g=i(r);return c<0?(s.push(g),s):((p=a[c]).children.push(g),s)}if(d&&(c++,"tag"===(t=i(r)).type&&n.components[t.name]&&(t.type="component",u=!0),t.voidElement||u||!m||"<"===m||t.children.push({type:"text",content:e.slice(h,e.indexOf("<",h))}),0===c&&s.push(t),(p=a[c-1])&&p.children.push(t),a[c]=t),(!d||t.voidElement)&&(c>-1&&(t.voidElement||t.name===r.slice(2,-1))&&(c--,t=-1===c?s:a[c]),!u&&"<"!==m&&m)){p=-1===c?s:a[c].children;var y=e.indexOf("<",h),v=e.slice(h,-1===y?void 0:y);o.test(v)&&(v=" "),(y>-1&&c+p.length>=0||" "!==v)&&p.push({type:"text",content:v})}})),s};const u=function(){if(console?.warn){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];y(n[0])&&(n[0]=`react-i18next:: ${n[0]}`),console.warn(...n)}},p={},d=function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];y(n[0])&&p[n[0]]||(y(n[0])&&(p[n[0]]=new Date),u(...n))},f=(e,n)=>()=>{if(e.isInitialized)n();else{const t=()=>{setTimeout((()=>{e.off("initialized",t)}),0),n()};e.on("initialized",t)}},h=(e,n,t)=>{e.loadNamespaces(n,f(e,t))},m=(e,n,t,s)=>{y(t)&&(t=[t]),t.forEach((n=>{e.options.ns.indexOf(n)<0&&e.options.ns.push(n)})),e.loadLanguages(n,f(e,s))},g=e=>e.displayName||e.name||(y(e)&&e.length>0?e:"Unknown"),y=e=>"string"==typeof e,v=e=>"object"==typeof e&&null!==e,x=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,b={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},E=e=>b[e];let O={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:e=>e.replace(x,E)};const N=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};O={...O,...e}},$=()=>O;let w;const I=e=>{w=e},k=()=>w,S=(e,n)=>{if(!e)return!1;const t=e.props?.children??e.children;return n?t.length>0:!!t},j=e=>{if(!e)return[];const n=e.props?.children??e.children;return e.props?.i18nIsDynamicList?R(n):n},R=e=>Array.isArray(e)?e:[e],C=(e,t)=>{if(!e)return"";let s="";const a=R(e),i=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return a.forEach(((e,a)=>{if(y(e))s+=`${e}`;else if(n.isValidElement(e)){const{props:n,type:r}=e,o=Object.keys(n).length,l=i.indexOf(r)>-1,c=n.children;if(c||!l||o)if(!c&&(!l||o)||n.i18nIsDynamicList)s+=`<${a}></${a}>`;else if(l&&1===o&&y(c))s+=`<${r}>${c}</${r}>`;else{const e=C(c,t);s+=`<${a}>${e}</${a}>`}else s+=`<${r}/>`}else if(null===e)u("Trans: the passed in value is invalid - seems you passed in a null child.");else if(v(e)){const{format:n,...t}=e,a=Object.keys(t);if(1===a.length){const e=n?`${a[0]}, ${n}`:a[0];s+=`{{${e}}}`}else u("react-i18next: the passed in object contained more than one variable - the object should look like {{ value, format }} where format is optional.",e)}else u("Trans: the passed in value is invalid - seems you passed in a variable like {number} - please pass in variables for interpolation as full objects like {{number}}.",e)})),s},T=(e,t,s,a,i,r)=>{if(""===t)return[];const o=a.transKeepBasicHtmlNodesFor||[],l=t&&new RegExp(o.map((e=>`<${e}`)).join("|")).test(t);if(!e&&!l&&!r)return[t];const u={},p=e=>{R(e).forEach((e=>{y(e)||(S(e)?p(j(e)):v(e)&&!n.isValidElement(e)&&Object.assign(u,e))}))};p(e);const d=c(`<0>${t}</0>`),f={...u,...i},h=(e,t,s)=>{const a=j(e),i=g(a,t.children,s);return(e=>Array.isArray(e)&&e.every(n.isValidElement))(a)&&0===i.length||e.props?.i18nIsDynamicList?a:i},m=(e,t,s,a,i)=>{e.dummy?(e.children=t,s.push(n.cloneElement(e,{key:a},i?void 0:t))):s.push(...n.Children.map([e],(e=>{const s={...e.props};return delete s.i18nIsDynamicList,n.createElement(e.type,{...s,key:a,ref:e.ref},i?null:t)})))},g=(t,i,c)=>{const u=R(t);return R(i).reduce(((t,i,p)=>{const d=i.children?.[0]?.content&&s.services.interpolator.interpolate(i.children[0].content,f,s.language);if("tag"===i.type){let r=u[parseInt(i.name,10)];1!==c.length||r||(r=c[0][i.name]),r||(r={});const x=0!==Object.keys(i.attrs).length?((e,n)=>{const t={...n};return t.props=Object.assign(e.props,n.props),t})({props:i.attrs},r):r,b=n.isValidElement(x),E=b&&S(i,!0)&&!i.voidElement,O=l&&v(x)&&x.dummy&&!b,N=v(e)&&Object.hasOwnProperty.call(e,i.name);if(y(x)){const e=s.services.interpolator.interpolate(x,f,s.language);t.push(e)}else if(S(x)||E){const e=h(x,i,c);m(x,e,t,p)}else if(O){const e=g(u,i.children,c);m(x,e,t,p)}else if(Number.isNaN(parseFloat(i.name)))if(N){const e=h(x,i,c);m(x,e,t,p,i.voidElement)}else if(a.transSupportBasicHtmlNodes&&o.indexOf(i.name)>-1)if(i.voidElement)t.push(n.createElement(i.name,{key:`${i.name}-${p}`}));else{const e=g(u,i.children,c);t.push(n.createElement(i.name,{key:`${i.name}-${p}`},e))}else if(i.voidElement)t.push(`<${i.name} />`);else{const e=g(u,i.children,c);t.push(`<${i.name}>${e}</${i.name}>`)}else if(v(x)&&!b){const e=i.children[0]?d:null;e&&t.push(e)}else m(x,d,t,p,1!==i.children.length||!d)}else if("text"===i.type){const e=a.transWrapTextNodes,o=r?a.unescape(s.services.interpolator.interpolate(i.content,f,s.language)):s.services.interpolator.interpolate(i.content,f,s.language);e?t.push(n.createElement(e,{key:`${i.name}-${p}`},o)):t.push(o)}return t}),[])},x=g([{dummy:!0,children:e||[]}],d,R(e||[]));return j(x[0])};function P(e){let{children:t,count:s,parent:a,i18nKey:i,context:r,tOptions:o={},values:l,defaults:c,components:u,ns:p,i18n:f,t:h,shouldUnescape:m,...g}=e;const v=f||k();if(!v)return d("You will need to pass in an i18next instance by using i18nextReactModule"),t;const x=h||v.t.bind(v)||(e=>e),b={...$(),...v.options?.react};let E=p||x.ns||v.options?.defaultNS;E=y(E)?[E]:E||["translation"];const O=C(t,b),N=c||O||b.transEmptyNodeValue||i,{hashTransKey:w}=b,I=i||(w?w(O||N):O||N);v.options?.interpolation?.defaultVariables&&(l=l&&Object.keys(l).length>0?{...l,...v.options.interpolation.defaultVariables}:{...v.options.interpolation.defaultVariables});const S=l||void 0!==s||!t?o.interpolation:{interpolation:{...o.interpolation,prefix:"#$?",suffix:"?$#"}},j={...o,context:r||o.context,count:s,...l,...S,defaultValue:N,ns:E},R=I?x(I,j):N;u&&Object.keys(u).forEach((e=>{const t=u[e];"function"==typeof t.type||!t.props||!t.props.children||R.indexOf(`${e}/>`)<0&&R.indexOf(`${e} />`)<0||(u[e]=n.createElement((function(){return n.createElement(n.Fragment,null,t)})))}));const P=T(u||t,R,v,b,j,m),L=a??b.defaultTransParent;return L?n.createElement(L,g,P):P}const L={type:"3rdParty",init(e){N(e.options.react),I(e)}},A=n.createContext();class V{constructor(){this.usedNamespaces={}}addUsedNamespaces(e){e.forEach((e=>{this.usedNamespaces[e]??=!0}))}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const z=e=>async n=>({...await(e.getInitialProps?.(n))??{},...F()}),F=()=>{const e=k(),n=e.reportNamespaces?.getUsedNamespaces()??[],t={},s={};return e.languages.forEach((t=>{s[t]={},n.forEach((n=>{s[t][n]=e.getResourceBundle(t,n)||{}}))})),t.initialI18nStore=s,t.initialLanguage=e.language,t};const U=(e,n,t,s)=>e.getFixedT(n,t,s),B=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{i18n:s}=t,{i18n:a,defaultNS:i}=n.useContext(A)||{},r=s||a||k();if(r&&!r.reportNamespaces&&(r.reportNamespaces=new V),!r){d("You will need to pass in an i18next instance by using initReactI18next");const e=(e,n)=>y(n)?n:v(n)&&y(n.defaultValue)?n.defaultValue:Array.isArray(e)?e[e.length-1]:e,n=[e,{},!1];return n.t=e,n.i18n={},n.ready=!1,n}r.options.react?.wait&&d("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");const o={...$(),...r.options.react,...t},{useSuspense:l,keyPrefix:c}=o;let u=e||i||r.options?.defaultNS;u=y(u)?[u]:u||["translation"],r.reportNamespaces.addUsedNamespaces?.(u);const p=(r.isInitialized||r.initializedStoreOnce)&&u.every((e=>function(e,n){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.languages&&n.languages.length?n.hasLoadedNamespace(e,{lng:t.lng,precheck:(n,s)=>{if(t.bindI18n?.indexOf("languageChanging")>-1&&n.services.backendConnector.backend&&n.isLanguageChangingTo&&!s(n.isLanguageChangingTo,e))return!1}}):(d("i18n.languages were undefined or empty",n.languages),!0)}(e,r,o))),f=((e,t,s,a)=>n.useCallback(U(e,t,s,a),[e,t,s,a]))(r,t.lng||null,"fallback"===o.nsMode?u:u[0],c),g=()=>f,x=()=>U(r,t.lng||null,"fallback"===o.nsMode?u:u[0],c),[b,E]=n.useState(g);let O=u.join();t.lng&&(O=`${t.lng}${O}`);const N=((e,t)=>{const s=n.useRef();return n.useEffect((()=>{s.current=e}),[e,t]),s.current})(O),w=n.useRef(!0);n.useEffect((()=>{const{bindI18n:e,bindI18nStore:n}=o;w.current=!0,p||l||(t.lng?m(r,t.lng,u,(()=>{w.current&&E(x)})):h(r,u,(()=>{w.current&&E(x)}))),p&&N&&N!==O&&w.current&&E(x);const s=()=>{w.current&&E(x)};return e&&r?.on(e,s),n&&r?.store.on(n,s),()=>{w.current=!1,r&&e?.split(" ").forEach((e=>r.off(e,s))),n&&r&&n.split(" ").forEach((e=>r.store.off(e,s)))}}),[r,O]),n.useEffect((()=>{w.current&&p&&E(g)}),[r,c,p]);const I=[b,r,p];if(I.t=b,I.i18n=r,I.ready=p,p)return I;if(!p&&!l)return I;throw new Promise((e=>{t.lng?m(r,t.lng,u,(()=>e())):h(r,u,(()=>e()))}))};const D=function(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{i18n:a}=s,{i18n:i}=n.useContext(A)||{},r=a||i||k();r.options?.isClone||(e&&!r.initializedStoreOnce&&(r.services.resourceStore.data=e,r.options.ns=Object.values(e).reduce(((e,n)=>(Object.keys(n).forEach((n=>{e.indexOf(n)<0&&e.push(n)})),e)),r.options.ns),r.initializedStoreOnce=!0,r.isInitialized=!0),t&&!r.initializedLanguageOnce&&(r.changeLanguage(t),r.initializedLanguageOnce=!0))};e.I18nContext=A,e.I18nextProvider=function(e){let{i18n:t,defaultNS:s,children:a}=e;const i=n.useMemo((()=>({i18n:t,defaultNS:s})),[t,s]);return n.createElement(A.Provider,{value:i},a)},e.Trans=function(e){let{children:t,count:s,parent:a,i18nKey:i,context:r,tOptions:o={},values:l,defaults:c,components:u,ns:p,i18n:d,t:f,shouldUnescape:h,...m}=e;const{i18n:g,defaultNS:y}=n.useContext(A)||{},v=d||g||k(),x=f||v?.t.bind(v);return P({children:t,count:s,parent:a,i18nKey:i,context:r,tOptions:o,values:l,defaults:c,components:u,ns:p||x?.ns||y||v?.options?.defaultNS,i18n:v,t:f,shouldUnescape:h,...m})},e.TransWithoutContext=P,e.Translation=e=>{let{ns:n,children:t,...s}=e;const[a,i,r]=B(n,s);return t(a,{i18n:i,lng:i.language},r)},e.composeInitialProps=z,e.date=()=>"",e.getDefaults=$,e.getI18n=k,e.getInitialProps=F,e.initReactI18next=L,e.number=()=>"",e.plural=()=>"",e.select=()=>"",e.selectOrdinal=()=>"",e.setDefaults=N,e.setI18n=I,e.time=()=>"",e.useSSR=D,e.useTranslation=B,e.withSSR=()=>function(e){function t(t){let{initialI18nStore:s,initialLanguage:a,...i}=t;return D(s,a),n.createElement(e,{...i})}return t.getInitialProps=z(e),t.displayName=`withI18nextSSR(${g(e)})`,t.WrappedComponent=e,t},e.withTranslation=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(s){function a(a){let{forwardedRef:i,...r}=a;const[o,l,c]=B(e,{...r,keyPrefix:t.keyPrefix}),u={...r,t:o,i18n:l,tReady:c};return t.withRef&&i?u.ref=i:!t.withRef&&i&&(u.forwardedRef=i),n.createElement(s,u)}a.displayName=`withI18nextTranslation(${g(s)})`,a.WrappedComponent=s;return t.withRef?n.forwardRef(((e,t)=>n.createElement(a,Object.assign({},e,{forwardedRef:t})))):a}}}));
|
package/dist/commonjs/Trans.js
CHANGED
|
@@ -35,7 +35,7 @@ function Trans(_ref) {
|
|
|
35
35
|
defaultNS: defaultNSFromContext
|
|
36
36
|
} = (0, _react.useContext)(_context.I18nContext) || {};
|
|
37
37
|
const i18n = i18nFromProps || i18nFromContext || (0, _context.getI18n)();
|
|
38
|
-
const t = tFromProps || i18n
|
|
38
|
+
const t = tFromProps || i18n?.t.bind(i18n);
|
|
39
39
|
return (0, _TransWithoutContext.Trans)({
|
|
40
40
|
children,
|
|
41
41
|
count,
|
|
@@ -46,7 +46,7 @@ function Trans(_ref) {
|
|
|
46
46
|
values,
|
|
47
47
|
defaults,
|
|
48
48
|
components,
|
|
49
|
-
ns: ns || t
|
|
49
|
+
ns: ns || t?.ns || defaultNSFromContext || i18n?.options?.defaultNS,
|
|
50
50
|
i18n,
|
|
51
51
|
t: tFromProps,
|
|
52
52
|
shouldUnescape,
|
|
@@ -13,14 +13,14 @@ var _defaults = require("./defaults.js");
|
|
|
13
13
|
var _i18nInstance = require("./i18nInstance.js");
|
|
14
14
|
const hasChildren = (node, checkLength) => {
|
|
15
15
|
if (!node) return false;
|
|
16
|
-
const base = node.props
|
|
16
|
+
const base = node.props?.children ?? node.children;
|
|
17
17
|
if (checkLength) return base.length > 0;
|
|
18
18
|
return !!base;
|
|
19
19
|
};
|
|
20
20
|
const getChildren = node => {
|
|
21
21
|
if (!node) return [];
|
|
22
|
-
const children = node.props
|
|
23
|
-
return node.props
|
|
22
|
+
const children = node.props?.children ?? node.children;
|
|
23
|
+
return node.props?.i18nIsDynamicList ? getAsArray(children) : children;
|
|
24
24
|
};
|
|
25
25
|
const hasValidReactChildren = children => Array.isArray(children) && children.every(_react.isValidElement);
|
|
26
26
|
const getAsArray = data => Array.isArray(data) ? data : [data];
|
|
@@ -35,7 +35,7 @@ const nodesToString = (children, i18nOptions) => {
|
|
|
35
35
|
if (!children) return '';
|
|
36
36
|
let stringNode = '';
|
|
37
37
|
const childrenArray = getAsArray(children);
|
|
38
|
-
const keepArray = i18nOptions
|
|
38
|
+
const keepArray = i18nOptions?.transSupportBasicHtmlNodes ? i18nOptions.transKeepBasicHtmlNodesFor ?? [] : [];
|
|
39
39
|
childrenArray.forEach((child, childIndex) => {
|
|
40
40
|
if ((0, _utils.isString)(child)) {
|
|
41
41
|
stringNode += `${child}`;
|
|
@@ -100,7 +100,7 @@ const renderNodes = (children, targetString, i18n, i18nOptions, combinedTOpts, s
|
|
|
100
100
|
const renderInner = (child, node, rootReactNode) => {
|
|
101
101
|
const childs = getChildren(child);
|
|
102
102
|
const mappedChildren = mapAST(childs, node.children, rootReactNode);
|
|
103
|
-
return hasValidReactChildren(childs) && mappedChildren.length === 0 || child.props
|
|
103
|
+
return hasValidReactChildren(childs) && mappedChildren.length === 0 || child.props?.i18nIsDynamicList ? childs : mappedChildren;
|
|
104
104
|
};
|
|
105
105
|
const pushTranslatedJSX = (child, inner, mem, i, isVoid) => {
|
|
106
106
|
if (child.dummy) {
|
|
@@ -126,7 +126,7 @@ const renderNodes = (children, targetString, i18n, i18nOptions, combinedTOpts, s
|
|
|
126
126
|
const reactNodes = getAsArray(reactNode);
|
|
127
127
|
const astNodes = getAsArray(astNode);
|
|
128
128
|
return astNodes.reduce((mem, node, i) => {
|
|
129
|
-
const translationContent = node.children
|
|
129
|
+
const translationContent = node.children?.[0]?.content && i18n.services.interpolator.interpolate(node.children[0].content, opts, i18n.language);
|
|
130
130
|
if (node.type === 'tag') {
|
|
131
131
|
let tmp = reactNodes[parseInt(node.name, 10)];
|
|
132
132
|
if (rootReactNode.length === 1 && !tmp) tmp = rootReactNode[0][node.name];
|
|
@@ -219,9 +219,9 @@ function Trans(_ref) {
|
|
|
219
219
|
const t = tFromProps || i18n.t.bind(i18n) || (k => k);
|
|
220
220
|
const reactI18nextOptions = {
|
|
221
221
|
...(0, _defaults.getDefaults)(),
|
|
222
|
-
...
|
|
222
|
+
...i18n.options?.react
|
|
223
223
|
};
|
|
224
|
-
let namespaces = ns || t.ns || i18n.options
|
|
224
|
+
let namespaces = ns || t.ns || i18n.options?.defaultNS;
|
|
225
225
|
namespaces = (0, _utils.isString)(namespaces) ? [namespaces] : namespaces || ['translation'];
|
|
226
226
|
const nodeAsString = nodesToString(children, reactI18nextOptions);
|
|
227
227
|
const defaultValue = defaults || nodeAsString || reactI18nextOptions.transEmptyNodeValue || i18nKey;
|
|
@@ -229,7 +229,7 @@ function Trans(_ref) {
|
|
|
229
229
|
hashTransKey
|
|
230
230
|
} = reactI18nextOptions;
|
|
231
231
|
const key = i18nKey || (hashTransKey ? hashTransKey(nodeAsString || defaultValue) : nodeAsString || defaultValue);
|
|
232
|
-
if (i18n.options
|
|
232
|
+
if (i18n.options?.interpolation?.defaultVariables) {
|
|
233
233
|
values = values && Object.keys(values).length > 0 ? {
|
|
234
234
|
...values,
|
|
235
235
|
...i18n.options.interpolation.defaultVariables
|
|
@@ -265,6 +265,6 @@ function Trans(_ref) {
|
|
|
265
265
|
});
|
|
266
266
|
}
|
|
267
267
|
const content = renderNodes(components || children, translation, i18n, reactI18nextOptions, combinedTOpts, shouldUnescape);
|
|
268
|
-
const useAsParent = parent
|
|
268
|
+
const useAsParent = parent ?? reactI18nextOptions.defaultTransParent;
|
|
269
269
|
return useAsParent ? (0, _react.createElement)(useAsParent, additionalProps, content) : content;
|
|
270
270
|
}
|
|
@@ -3,17 +3,18 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.Translation =
|
|
6
|
+
exports.Translation = void 0;
|
|
7
7
|
var _useTranslation = require("./useTranslation.js");
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
const Translation = _ref => {
|
|
9
|
+
let {
|
|
10
10
|
ns,
|
|
11
11
|
children,
|
|
12
12
|
...options
|
|
13
|
-
} =
|
|
13
|
+
} = _ref;
|
|
14
14
|
const [t, i18n, ready] = (0, _useTranslation.useTranslation)(ns, options);
|
|
15
15
|
return children(t, {
|
|
16
16
|
i18n,
|
|
17
17
|
lng: i18n.language
|
|
18
18
|
}, ready);
|
|
19
|
-
}
|
|
19
|
+
};
|
|
20
|
+
exports.Translation = Translation;
|
package/dist/commonjs/context.js
CHANGED
|
@@ -46,14 +46,16 @@ class ReportNamespaces {
|
|
|
46
46
|
}
|
|
47
47
|
addUsedNamespaces(namespaces) {
|
|
48
48
|
namespaces.forEach(ns => {
|
|
49
|
-
|
|
49
|
+
this.usedNamespaces[ns] ??= true;
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
|
-
getUsedNamespaces
|
|
52
|
+
getUsedNamespaces() {
|
|
53
|
+
return Object.keys(this.usedNamespaces);
|
|
54
|
+
}
|
|
53
55
|
}
|
|
54
56
|
exports.ReportNamespaces = ReportNamespaces;
|
|
55
57
|
const composeInitialProps = ForComponent => async ctx => {
|
|
56
|
-
const componentsInitialProps =
|
|
58
|
+
const componentsInitialProps = (await ForComponent.getInitialProps?.(ctx)) ?? {};
|
|
57
59
|
const i18nInitialProps = getInitialProps();
|
|
58
60
|
return {
|
|
59
61
|
...componentsInitialProps,
|
|
@@ -63,7 +65,7 @@ const composeInitialProps = ForComponent => async ctx => {
|
|
|
63
65
|
exports.composeInitialProps = composeInitialProps;
|
|
64
66
|
const getInitialProps = () => {
|
|
65
67
|
const i18n = (0, _i18nInstance.getI18n)();
|
|
66
|
-
const namespaces = i18n.reportNamespaces
|
|
68
|
+
const namespaces = i18n.reportNamespaces?.getUsedNamespaces() ?? [];
|
|
67
69
|
const ret = {};
|
|
68
70
|
const initialI18nStore = {};
|
|
69
71
|
i18n.languages.forEach(l => {
|
package/dist/commonjs/useSSR.js
CHANGED
|
@@ -15,7 +15,7 @@ const useSSR = function (initialI18nStore, initialLanguage) {
|
|
|
15
15
|
i18n: i18nFromContext
|
|
16
16
|
} = (0, _react.useContext)(_context.I18nContext) || {};
|
|
17
17
|
const i18n = i18nFromProps || i18nFromContext || (0, _context.getI18n)();
|
|
18
|
-
if (i18n.options
|
|
18
|
+
if (i18n.options?.isClone) return;
|
|
19
19
|
if (initialI18nStore && !i18n.initializedStoreOnce) {
|
|
20
20
|
i18n.services.resourceStore.data = initialI18nStore;
|
|
21
21
|
i18n.options.ns = Object.values(initialI18nStore).reduce((mem, lngResources) => {
|
|
@@ -40,7 +40,7 @@ const useTranslation = function (ns) {
|
|
|
40
40
|
retNotReady.ready = false;
|
|
41
41
|
return retNotReady;
|
|
42
42
|
}
|
|
43
|
-
if (i18n.options.react
|
|
43
|
+
if (i18n.options.react?.wait) (0, _utils.warnOnce)('It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.');
|
|
44
44
|
const i18nOptions = {
|
|
45
45
|
...(0, _context.getDefaults)(),
|
|
46
46
|
...i18n.options.react,
|
|
@@ -50,9 +50,9 @@ const useTranslation = function (ns) {
|
|
|
50
50
|
useSuspense,
|
|
51
51
|
keyPrefix
|
|
52
52
|
} = i18nOptions;
|
|
53
|
-
let namespaces = ns || defaultNSFromContext || i18n.options
|
|
53
|
+
let namespaces = ns || defaultNSFromContext || i18n.options?.defaultNS;
|
|
54
54
|
namespaces = (0, _utils.isString)(namespaces) ? [namespaces] : namespaces || ['translation'];
|
|
55
|
-
|
|
55
|
+
i18n.reportNamespaces.addUsedNamespaces?.(namespaces);
|
|
56
56
|
const ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => (0, _utils.hasLoadedNamespace)(n, i18n, i18nOptions));
|
|
57
57
|
const memoGetT = useMemoizedT(i18n, props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);
|
|
58
58
|
const getT = () => memoGetT;
|
|
@@ -85,11 +85,11 @@ const useTranslation = function (ns) {
|
|
|
85
85
|
const boundReset = () => {
|
|
86
86
|
if (isMounted.current) setT(getNewT);
|
|
87
87
|
};
|
|
88
|
-
if (bindI18n
|
|
89
|
-
if (bindI18nStore
|
|
88
|
+
if (bindI18n) i18n?.on(bindI18n, boundReset);
|
|
89
|
+
if (bindI18nStore) i18n?.store.on(bindI18nStore, boundReset);
|
|
90
90
|
return () => {
|
|
91
91
|
isMounted.current = false;
|
|
92
|
-
if (
|
|
92
|
+
if (i18n) bindI18n?.split(' ').forEach(e => i18n.off(e, boundReset));
|
|
93
93
|
if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, boundReset));
|
|
94
94
|
};
|
|
95
95
|
}, [i18n, joinedNS]);
|
package/dist/commonjs/utils.js
CHANGED
|
@@ -3,27 +3,27 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.loadNamespaces = exports.loadLanguages = exports.isString = exports.isObject = exports.hasLoadedNamespace = exports.getDisplayName = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
function warn() {
|
|
10
|
-
if (console && console.warn) {
|
|
6
|
+
exports.warnOnce = exports.warn = exports.loadNamespaces = exports.loadLanguages = exports.isString = exports.isObject = exports.hasLoadedNamespace = exports.getDisplayName = void 0;
|
|
7
|
+
const warn = function () {
|
|
8
|
+
if (console?.warn) {
|
|
11
9
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
12
10
|
args[_key] = arguments[_key];
|
|
13
11
|
}
|
|
14
12
|
if (isString(args[0])) args[0] = `react-i18next:: ${args[0]}`;
|
|
15
13
|
console.warn(...args);
|
|
16
14
|
}
|
|
17
|
-
}
|
|
15
|
+
};
|
|
16
|
+
exports.warn = warn;
|
|
18
17
|
const alreadyWarned = {};
|
|
19
|
-
function
|
|
18
|
+
const warnOnce = function () {
|
|
20
19
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
21
20
|
args[_key2] = arguments[_key2];
|
|
22
21
|
}
|
|
23
22
|
if (isString(args[0]) && alreadyWarned[args[0]]) return;
|
|
24
23
|
if (isString(args[0])) alreadyWarned[args[0]] = new Date();
|
|
25
24
|
warn(...args);
|
|
26
|
-
}
|
|
25
|
+
};
|
|
26
|
+
exports.warnOnce = warnOnce;
|
|
27
27
|
const loadedClb = (i18n, cb) => () => {
|
|
28
28
|
if (i18n.isInitialized) {
|
|
29
29
|
cb();
|
|
@@ -49,36 +49,16 @@ const loadLanguages = (i18n, lng, ns, cb) => {
|
|
|
49
49
|
i18n.loadLanguages(lng, loadedClb(i18n, cb));
|
|
50
50
|
};
|
|
51
51
|
exports.loadLanguages = loadLanguages;
|
|
52
|
-
const oldI18nextHasLoadedNamespace = function (ns, i18n) {
|
|
53
|
-
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
54
|
-
const lng = i18n.languages[0];
|
|
55
|
-
const fallbackLng = i18n.options ? i18n.options.fallbackLng : false;
|
|
56
|
-
const lastLng = i18n.languages[i18n.languages.length - 1];
|
|
57
|
-
if (lng.toLowerCase() === 'cimode') return true;
|
|
58
|
-
const loadNotPending = (l, n) => {
|
|
59
|
-
const loadState = i18n.services.backendConnector.state[`${l}|${n}`];
|
|
60
|
-
return loadState === -1 || loadState === 2;
|
|
61
|
-
};
|
|
62
|
-
if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns)) return false;
|
|
63
|
-
if (i18n.hasResourceBundle(lng, ns)) return true;
|
|
64
|
-
if (!i18n.services.backendConnector.backend || i18n.options.resources && !i18n.options.partialBundledLanguages) return true;
|
|
65
|
-
if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;
|
|
66
|
-
return false;
|
|
67
|
-
};
|
|
68
52
|
const hasLoadedNamespace = function (ns, i18n) {
|
|
69
53
|
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
70
54
|
if (!i18n.languages || !i18n.languages.length) {
|
|
71
55
|
warnOnce('i18n.languages were undefined or empty', i18n.languages);
|
|
72
56
|
return true;
|
|
73
57
|
}
|
|
74
|
-
const isNewerI18next = i18n.options.ignoreJSONStructure !== undefined;
|
|
75
|
-
if (!isNewerI18next) {
|
|
76
|
-
return oldI18nextHasLoadedNamespace(ns, i18n, options);
|
|
77
|
-
}
|
|
78
58
|
return i18n.hasLoadedNamespace(ns, {
|
|
79
59
|
lng: options.lng,
|
|
80
60
|
precheck: (i18nInstance, loadNotPending) => {
|
|
81
|
-
if (options.bindI18n
|
|
61
|
+
if (options.bindI18n?.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;
|
|
82
62
|
}
|
|
83
63
|
});
|
|
84
64
|
};
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { createElement, useMemo } from 'react';
|
|
2
2
|
import { I18nContext } from './context.js';
|
|
3
|
-
export function I18nextProvider(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
} = _ref;
|
|
3
|
+
export function I18nextProvider({
|
|
4
|
+
i18n,
|
|
5
|
+
defaultNS,
|
|
6
|
+
children
|
|
7
|
+
}) {
|
|
9
8
|
const value = useMemo(() => ({
|
|
10
9
|
i18n,
|
|
11
10
|
defaultNS
|