@andre1502/react-utilities 0.9.4 → 0.9.5

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/README.md CHANGED
@@ -364,13 +364,16 @@ import { EnvironmentEnum, initI18n } from '@andre1502/react-utilities/i18n';
364
364
 
365
365
  const localLang = 'en-US';
366
366
  const fallbackLang = 'en-US';
367
- const langCacheExpiredTimeMs = 60 * 60 * 1000;
367
+ const langCacheExpiredTimeMs = 24 * 60 * 60 * 1000;
368
368
 
369
369
  // translation language from json file.
370
370
  const resources = {
371
371
  'en-US': { translation: enUS },
372
372
  };
373
373
 
374
+ // determine whether need to use backend support to load resources.
375
+ const useBackend = false;
376
+
374
377
  // optional, if false or undefined will use resources value
375
378
  const withLocalstorageBackend = false;
376
379
 
@@ -381,15 +384,16 @@ const cdnUrl = 'http://cdnurl.com';
381
384
  // optional, if false or undefined disable debug mode
382
385
  const debug = false;
383
386
 
384
- initI18n(
385
- initReactI18next,
386
- localLang,
387
- fallbackLang,
388
- langCacheExpiredTimeMs,
389
- resources,
390
- version,
391
- withLocalstorageBackend,
392
- cdnUrl,
393
- debug,
394
- );
387
+ initI18n({
388
+ initReactI18next: initReactI18next,
389
+ localLang: localLang,
390
+ fallbackLang: fallbackLang,
391
+ langCacheExpiredTimeMs: langCacheExpiredTimeMs,
392
+ resources: resources,
393
+ version: version,
394
+ useBackend: useBackend,
395
+ withLocalstorageBackend: withLocalstorageBackend,
396
+ cdnUrl: cdnUrl,
397
+ debug: debug,
398
+ });
395
399
  ```
@@ -1,6 +1,18 @@
1
1
  import { ThirdPartyModule } from 'i18next';
2
2
  declare const getV: (divider: number) => number;
3
- declare const initI18n: (initReactI18next: ThirdPartyModule, lang: string, fallbackLang: string, langCacheExpiredTimeMs: number, resources: {
4
- [key: string]: any;
5
- }, version: string, withLocalstorageBackend?: boolean, cdnUrl?: string, debug?: boolean) => void;
3
+ export interface InitI18nProps {
4
+ initReactI18next: ThirdPartyModule;
5
+ lang: string;
6
+ fallbackLang: string;
7
+ langCacheExpiredTimeMs: number;
8
+ resources: {
9
+ [key: string]: any;
10
+ };
11
+ version: string;
12
+ useBackend: boolean;
13
+ withLocalstorageBackend?: boolean;
14
+ cdnUrl?: string;
15
+ debug?: boolean;
16
+ }
17
+ declare const initI18n: ({ initReactI18next, lang, fallbackLang, langCacheExpiredTimeMs, resources, version, useBackend, withLocalstorageBackend, cdnUrl, debug, }: InitI18nProps) => void;
6
18
  export { getV, initI18n };
package/dist/I18n/I18n.js CHANGED
@@ -11,19 +11,34 @@ var _i18nextLocalstorageBackend = _interopRequireDefault(require("i18next-locals
11
11
  var _i18nextResourcesToBackend = _interopRequireDefault(require("i18next-resources-to-backend"));
12
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
13
13
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
14
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
16
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
15
17
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
16
18
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
17
19
  var getV = exports.getV = function getV(divider) {
18
20
  return Math.floor(Date.now() / divider);
19
21
  };
20
- var initI18n = exports.initI18n = function initI18n(initReactI18next, lang, fallbackLang, langCacheExpiredTimeMs, resources, version, withLocalstorageBackend, cdnUrl, debug) {
22
+ var initI18n = exports.initI18n = function initI18n(_ref) {
23
+ var initReactI18next = _ref.initReactI18next,
24
+ lang = _ref.lang,
25
+ fallbackLang = _ref.fallbackLang,
26
+ langCacheExpiredTimeMs = _ref.langCacheExpiredTimeMs,
27
+ resources = _ref.resources,
28
+ version = _ref.version,
29
+ useBackend = _ref.useBackend,
30
+ _ref$withLocalstorage = _ref.withLocalstorageBackend,
31
+ withLocalstorageBackend = _ref$withLocalstorage === void 0 ? false : _ref$withLocalstorage,
32
+ _ref$cdnUrl = _ref.cdnUrl,
33
+ cdnUrl = _ref$cdnUrl === void 0 ? '' : _ref$cdnUrl,
34
+ _ref$debug = _ref.debug,
35
+ debug = _ref$debug === void 0 ? false : _ref$debug;
21
36
  var backends = [];
22
37
  var backendOptions = [];
23
38
  var langs = Object.keys(resources);
24
39
 
25
40
  // https://www.i18next.com/how-to/backend-fallback
26
- if (withLocalstorageBackend) {
41
+ if (useBackend && withLocalstorageBackend) {
27
42
  var versions = {};
28
43
  langs.forEach(function (value) {
29
44
  return Object.assign(versions, _defineProperty({}, value, version));
@@ -38,7 +53,7 @@ var initI18n = exports.initI18n = function initI18n(initReactI18next, lang, fall
38
53
  versions: versions
39
54
  });
40
55
  }
41
- if (cdnUrl) {
56
+ if (useBackend && cdnUrl) {
42
57
  backends.push(_i18nextHttpBackend["default"]);
43
58
  backendOptions.push({
44
59
  // load resources from url path
@@ -50,7 +65,9 @@ var initI18n = exports.initI18n = function initI18n(initReactI18next, lang, fall
50
65
  reloadInterval: langCacheExpiredTimeMs // can be used to reload resources in a specific interval (milliseconds) (useful in server environments)
51
66
  });
52
67
  }
53
- backends.push((0, _i18nextResourcesToBackend["default"])(resources));
68
+ if (useBackend) {
69
+ backends.push((0, _i18nextResourcesToBackend["default"])(resources));
70
+ }
54
71
 
55
72
  // https://www.i18next.com/misc/creating-own-plugins#languagedetector
56
73
  var languageDetector = {
@@ -65,7 +82,7 @@ var initI18n = exports.initI18n = function initI18n(initReactI18next, lang, fall
65
82
  }
66
83
  };
67
84
  var config = {
68
- debug: debug !== null && debug !== void 0 ? debug : false,
85
+ debug: debug,
69
86
  compatibilityJSON: 'v4',
70
87
  ns: ['translation'],
71
88
  defaultNS: 'translation',
@@ -74,20 +91,24 @@ var initI18n = exports.initI18n = function initI18n(initReactI18next, lang, fall
74
91
  load: 'currentOnly',
75
92
  keySeparator: false,
76
93
  nonExplicitSupportedLngs: true,
77
- backend: {
78
- backends: backends,
79
- backendOptions: backendOptions,
80
- cacheHitMode: 'refreshAndUpdateStore',
81
- reloadInterval: langCacheExpiredTimeMs,
82
- refreshExpirationTime: langCacheExpiredTimeMs // only after determined time it should trigger a refresh if necessary
83
- },
84
- react: {
85
- bindI18nStore: 'added' // this way, when the HttpBackend delivers new translations (thanks to refreshAndUpdateStore), the UI gets updated
86
- },
87
94
  interpolation: {
88
95
  escapeValue: false // react already safes from xss
89
96
  }
90
97
  };
98
+ if (useBackend) {
99
+ config = _objectSpread(_objectSpread({}, config), {}, {
100
+ backend: {
101
+ backends: backends,
102
+ backendOptions: backendOptions,
103
+ cacheHitMode: 'refreshAndUpdateStore',
104
+ reloadInterval: langCacheExpiredTimeMs,
105
+ refreshExpirationTime: langCacheExpiredTimeMs // only after determined time it should trigger a refresh if necessary
106
+ },
107
+ react: {
108
+ bindI18nStore: 'added' // this way, when the HttpBackend delivers new translations (thanks to refreshAndUpdateStore), the UI gets updated
109
+ }
110
+ });
111
+ }
91
112
  if (!_i18next["default"].isInitialized) {
92
113
  _i18next["default"].use(_i18nextChainedBackend["default"]).use(languageDetector).use(initReactI18next) // passes i18n down to react-i18next
93
114
  .init(config, function (ex, t) {
@@ -1 +1 @@
1
- {"version":3,"file":"I18n.js","names":["_i18next","_interopRequireDefault","require","_i18nextChainedBackend","_i18nextHttpBackend","_i18nextLocalstorageBackend","_i18nextResourcesToBackend","e","__esModule","_typeof","o","Symbol","iterator","constructor","prototype","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","toPrimitive","call","TypeError","String","Number","getV","exports","divider","Math","floor","Date","now","initI18n","initReactI18next","lang","fallbackLang","langCacheExpiredTimeMs","resources","version","withLocalstorageBackend","cdnUrl","debug","backends","backendOptions","langs","keys","versions","forEach","assign","push","LocalStorageBackend","prefix","expirationTime","HttpBackend","loadPath","concat","queryStringParams","v","reloadInterval","ResourcesToBackend","languageDetector","type","name","async","init","detect","callback","config","compatibilityJSON","ns","defaultNS","lng","fallbackLng","load","keySeparator","nonExplicitSupportedLngs","backend","cacheHitMode","refreshExpirationTime","react","bindI18nStore","interpolation","escapeValue","i18next","isInitialized","use","ChainedBackend","ex","console","error"],"sources":["../../src/I18n/I18n.ts"],"sourcesContent":["import i18next, { InitOptions, ThirdPartyModule } from 'i18next';\nimport ChainedBackend from 'i18next-chained-backend';\nimport HttpBackend from 'i18next-http-backend';\nimport LocalStorageBackend from 'i18next-localstorage-backend';\nimport ResourcesToBackend from 'i18next-resources-to-backend';\n\nconst getV = (divider: number): number => {\n return Math.floor(Date.now() / divider);\n};\n\nconst initI18n = (\n initReactI18next: ThirdPartyModule,\n lang: string,\n fallbackLang: string,\n langCacheExpiredTimeMs: number,\n resources: { [key: string]: any },\n version: string,\n withLocalstorageBackend?: boolean,\n cdnUrl?: string,\n debug?: boolean,\n) => {\n let backends: Array<any> = [];\n let backendOptions: Array<any> = [];\n const langs = Object.keys(resources);\n\n // https://www.i18next.com/how-to/backend-fallback\n if (withLocalstorageBackend) {\n const versions: { [key: string]: string } = {};\n\n langs.forEach((value) => Object.assign(versions, { [value]: version }));\n\n backends.push(LocalStorageBackend);\n backendOptions.push({\n // prefix for stored languages\n prefix: `i18next_res_`,\n\n // expiration\n expirationTime: langCacheExpiredTimeMs,\n\n // language versions\n versions: versions,\n });\n }\n\n if (cdnUrl) {\n backends.push(HttpBackend);\n backendOptions.push({\n // load resources from url path\n loadPath: `${cdnUrl}/locales/{{lng}}.json`,\n // adds parameters to resource URL. 'example.com' -> 'example.com?v=1.3.5'\n queryStringParams: {\n v: `${version}.${getV(langCacheExpiredTimeMs)}`,\n },\n\n reloadInterval: langCacheExpiredTimeMs, // can be used to reload resources in a specific interval (milliseconds) (useful in server environments)\n });\n }\n\n backends.push(ResourcesToBackend(resources));\n\n // https://www.i18next.com/misc/creating-own-plugins#languagedetector\n const languageDetector: any = {\n type: 'languageDetector',\n name: 'customDetector',\n async: false,\n init: () => {\n /* use services and options */\n },\n detect: (callback: any) => {\n return lang;\n },\n };\n\n const config: InitOptions = {\n debug: debug ?? false,\n compatibilityJSON: 'v4',\n ns: ['translation'],\n defaultNS: 'translation',\n lng: lang,\n fallbackLng: fallbackLang,\n load: 'currentOnly',\n keySeparator: false,\n nonExplicitSupportedLngs: true,\n backend: {\n backends: backends,\n backendOptions: backendOptions,\n cacheHitMode: 'refreshAndUpdateStore',\n reloadInterval: langCacheExpiredTimeMs,\n refreshExpirationTime: langCacheExpiredTimeMs, // only after determined time it should trigger a refresh if necessary\n },\n react: {\n bindI18nStore: 'added', // this way, when the HttpBackend delivers new translations (thanks to refreshAndUpdateStore), the UI gets updated\n },\n interpolation: {\n escapeValue: false, // react already safes from xss\n },\n };\n\n if (!i18next.isInitialized) {\n i18next\n .use(ChainedBackend)\n .use(languageDetector)\n .use(initReactI18next) // passes i18n down to react-i18next\n .init(config, (ex, t) => {\n if (ex) {\n console.error(`Error when i18n init`, ex);\n return;\n }\n });\n }\n};\n\nexport { getV, initI18n };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"I18n.js","names":["_i18next","_interopRequireDefault","require","_i18nextChainedBackend","_i18nextHttpBackend","_i18nextLocalstorageBackend","_i18nextResourcesToBackend","e","__esModule","_typeof","o","Symbol","iterator","constructor","prototype","ownKeys","r","t","Object","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","toPrimitive","call","TypeError","String","Number","getV","exports","divider","Math","floor","Date","now","initI18n","_ref","initReactI18next","lang","fallbackLang","langCacheExpiredTimeMs","resources","version","useBackend","_ref$withLocalstorage","withLocalstorageBackend","_ref$cdnUrl","cdnUrl","_ref$debug","debug","backends","backendOptions","langs","versions","assign","LocalStorageBackend","prefix","expirationTime","HttpBackend","loadPath","concat","queryStringParams","v","reloadInterval","ResourcesToBackend","languageDetector","type","name","async","init","detect","callback","config","compatibilityJSON","ns","defaultNS","lng","fallbackLng","load","keySeparator","nonExplicitSupportedLngs","interpolation","escapeValue","backend","cacheHitMode","refreshExpirationTime","react","bindI18nStore","i18next","isInitialized","use","ChainedBackend","ex","console","error"],"sources":["../../src/I18n/I18n.ts"],"sourcesContent":["import i18next, { InitOptions, ThirdPartyModule } from 'i18next';\nimport ChainedBackend from 'i18next-chained-backend';\nimport HttpBackend from 'i18next-http-backend';\nimport LocalStorageBackend from 'i18next-localstorage-backend';\nimport ResourcesToBackend from 'i18next-resources-to-backend';\n\nconst getV = (divider: number): number => {\n return Math.floor(Date.now() / divider);\n};\n\nexport interface InitI18nProps {\n initReactI18next: ThirdPartyModule;\n lang: string;\n fallbackLang: string;\n langCacheExpiredTimeMs: number;\n resources: { [key: string]: any };\n version: string;\n useBackend: boolean;\n withLocalstorageBackend?: boolean;\n cdnUrl?: string;\n debug?: boolean;\n}\n\nconst initI18n = ({\n initReactI18next,\n lang,\n fallbackLang,\n langCacheExpiredTimeMs,\n resources,\n version,\n useBackend,\n withLocalstorageBackend = false,\n cdnUrl = '',\n debug = false,\n}: InitI18nProps) => {\n let backends: Array<any> = [];\n let backendOptions: Array<any> = [];\n const langs = Object.keys(resources);\n\n // https://www.i18next.com/how-to/backend-fallback\n if (useBackend && withLocalstorageBackend) {\n const versions: { [key: string]: string } = {};\n\n langs.forEach((value) => Object.assign(versions, { [value]: version }));\n\n backends.push(LocalStorageBackend);\n backendOptions.push({\n // prefix for stored languages\n prefix: `i18next_res_`,\n\n // expiration\n expirationTime: langCacheExpiredTimeMs,\n\n // language versions\n versions: versions,\n });\n }\n\n if (useBackend && cdnUrl) {\n backends.push(HttpBackend);\n backendOptions.push({\n // load resources from url path\n loadPath: `${cdnUrl}/locales/{{lng}}.json`,\n // adds parameters to resource URL. 'example.com' -> 'example.com?v=1.3.5'\n queryStringParams: {\n v: `${version}.${getV(langCacheExpiredTimeMs)}`,\n },\n\n reloadInterval: langCacheExpiredTimeMs, // can be used to reload resources in a specific interval (milliseconds) (useful in server environments)\n });\n }\n\n if (useBackend) {\n backends.push(ResourcesToBackend(resources));\n }\n\n // https://www.i18next.com/misc/creating-own-plugins#languagedetector\n const languageDetector: any = {\n type: 'languageDetector',\n name: 'customDetector',\n async: false,\n init: () => {\n /* use services and options */\n },\n detect: (callback: any) => {\n return lang;\n },\n };\n\n let config: InitOptions = {\n debug: debug,\n compatibilityJSON: 'v4',\n ns: ['translation'],\n defaultNS: 'translation',\n lng: lang,\n fallbackLng: fallbackLang,\n load: 'currentOnly',\n keySeparator: false,\n nonExplicitSupportedLngs: true,\n interpolation: {\n escapeValue: false, // react already safes from xss\n },\n };\n\n if (useBackend) {\n config = {\n ...config,\n backend: {\n backends: backends,\n backendOptions: backendOptions,\n cacheHitMode: 'refreshAndUpdateStore',\n reloadInterval: langCacheExpiredTimeMs,\n refreshExpirationTime: langCacheExpiredTimeMs, // only after determined time it should trigger a refresh if necessary\n },\n react: {\n bindI18nStore: 'added', // this way, when the HttpBackend delivers new translations (thanks to refreshAndUpdateStore), the UI gets updated\n },\n };\n }\n\n if (!i18next.isInitialized) {\n i18next\n .use(ChainedBackend)\n .use(languageDetector)\n .use(initReactI18next) // passes i18n down to react-i18next\n .init(config, (ex, t) => {\n if (ex) {\n console.error(`Error when i18n init`, ex);\n return;\n }\n });\n }\n};\n\nexport { getV, initI18n };\n"],"mappings":"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","ignoreList":[]}
@@ -3201,12 +3201,24 @@ var resourcesToBackend = function resourcesToBackend(res) {
3201
3201
  const getV = divider => {
3202
3202
  return Math.floor(Date.now() / divider);
3203
3203
  };
3204
- const initI18n = (initReactI18next, lang, fallbackLang, langCacheExpiredTimeMs, resources, version, withLocalstorageBackend, cdnUrl, debug) => {
3204
+ const initI18n = _ref => {
3205
+ let {
3206
+ initReactI18next,
3207
+ lang,
3208
+ fallbackLang,
3209
+ langCacheExpiredTimeMs,
3210
+ resources,
3211
+ version,
3212
+ useBackend,
3213
+ withLocalstorageBackend = false,
3214
+ cdnUrl = '',
3215
+ debug = false
3216
+ } = _ref;
3205
3217
  let backends = [];
3206
3218
  let backendOptions = [];
3207
3219
  const langs = Object.keys(resources);
3208
3220
  // https://www.i18next.com/how-to/backend-fallback
3209
- if (withLocalstorageBackend) {
3221
+ if (useBackend && withLocalstorageBackend) {
3210
3222
  const versions = {};
3211
3223
  langs.forEach(value => Object.assign(versions, {
3212
3224
  [value]: version
@@ -3221,7 +3233,7 @@ const initI18n = (initReactI18next, lang, fallbackLang, langCacheExpiredTimeMs,
3221
3233
  versions: versions
3222
3234
  });
3223
3235
  }
3224
- if (cdnUrl) {
3236
+ if (useBackend && cdnUrl) {
3225
3237
  backends.push(Backend);
3226
3238
  backendOptions.push({
3227
3239
  // load resources from url path
@@ -3233,7 +3245,9 @@ const initI18n = (initReactI18next, lang, fallbackLang, langCacheExpiredTimeMs,
3233
3245
  reloadInterval: langCacheExpiredTimeMs // can be used to reload resources in a specific interval (milliseconds) (useful in server environments)
3234
3246
  });
3235
3247
  }
3236
- backends.push(resourcesToBackend(resources));
3248
+ if (useBackend) {
3249
+ backends.push(resourcesToBackend(resources));
3250
+ }
3237
3251
  // https://www.i18next.com/misc/creating-own-plugins#languagedetector
3238
3252
  const languageDetector = {
3239
3253
  type: 'languageDetector',
@@ -3246,8 +3260,8 @@ const initI18n = (initReactI18next, lang, fallbackLang, langCacheExpiredTimeMs,
3246
3260
  return lang;
3247
3261
  }
3248
3262
  };
3249
- const config = {
3250
- debug: debug ?? false,
3263
+ let config = {
3264
+ debug: debug,
3251
3265
  compatibilityJSON: 'v4',
3252
3266
  ns: ['translation'],
3253
3267
  defaultNS: 'translation',
@@ -3256,20 +3270,25 @@ const initI18n = (initReactI18next, lang, fallbackLang, langCacheExpiredTimeMs,
3256
3270
  load: 'currentOnly',
3257
3271
  keySeparator: false,
3258
3272
  nonExplicitSupportedLngs: true,
3259
- backend: {
3260
- backends: backends,
3261
- backendOptions: backendOptions,
3262
- cacheHitMode: 'refreshAndUpdateStore',
3263
- reloadInterval: langCacheExpiredTimeMs,
3264
- refreshExpirationTime: langCacheExpiredTimeMs // only after determined time it should trigger a refresh if necessary
3265
- },
3266
- react: {
3267
- bindI18nStore: 'added' // this way, when the HttpBackend delivers new translations (thanks to refreshAndUpdateStore), the UI gets updated
3268
- },
3269
3273
  interpolation: {
3270
3274
  escapeValue: false // react already safes from xss
3271
3275
  }
3272
3276
  };
3277
+ if (useBackend) {
3278
+ config = {
3279
+ ...config,
3280
+ backend: {
3281
+ backends: backends,
3282
+ backendOptions: backendOptions,
3283
+ cacheHitMode: 'refreshAndUpdateStore',
3284
+ reloadInterval: langCacheExpiredTimeMs,
3285
+ refreshExpirationTime: langCacheExpiredTimeMs // only after determined time it should trigger a refresh if necessary
3286
+ },
3287
+ react: {
3288
+ bindI18nStore: 'added' // this way, when the HttpBackend delivers new translations (thanks to refreshAndUpdateStore), the UI gets updated
3289
+ }
3290
+ };
3291
+ }
3273
3292
  if (!instance.isInitialized) {
3274
3293
  instance.use(Backend$1).use(languageDetector).use(initReactI18next) // passes i18n down to react-i18next
3275
3294
  .init(config, (ex, t) => {
@@ -3282,4 +3301,4 @@ const initI18n = (initReactI18next, lang, fallbackLang, langCacheExpiredTimeMs,
3282
3301
  };
3283
3302
 
3284
3303
  export { getV as g, initI18n as i };
3285
- //# sourceMappingURL=I18n-BXs9DtEN.js.map
3304
+ //# sourceMappingURL=I18n-DDRri5uR.js.map