@prosopo/locale 3.1.2 → 3.1.21

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.
Files changed (80) hide show
  1. package/CHANGELOG.md +137 -0
  2. package/coverage/base.css +224 -0
  3. package/coverage/block-navigation.js +87 -0
  4. package/coverage/clover.xml +260 -0
  5. package/coverage/coverage-final.json +11 -0
  6. package/coverage/favicon.png +0 -0
  7. package/coverage/i18SharedOptions.ts.html +151 -0
  8. package/coverage/i18nBackend.ts.html +244 -0
  9. package/coverage/i18nFrontend.ts.html +328 -0
  10. package/coverage/i18nMiddleware.ts.html +160 -0
  11. package/coverage/index.html +251 -0
  12. package/coverage/index.ts.html +151 -0
  13. package/coverage/loadI18next.ts.html +232 -0
  14. package/coverage/prettify.css +1 -0
  15. package/coverage/prettify.js +2 -0
  16. package/coverage/sort-arrow-sprite.png +0 -0
  17. package/coverage/sorter.js +210 -0
  18. package/coverage/translationKey.ts.html +229 -0
  19. package/coverage/translations.ts.html +247 -0
  20. package/coverage/useTranslation.ts.html +181 -0
  21. package/coverage/util.ts.html +160 -0
  22. package/dist/cjs/i18nBackend.cjs +2 -1
  23. package/dist/cjs/locales/en/translation.json.cjs +1 -1
  24. package/dist/i18SharedOptions.js +8 -10
  25. package/dist/i18SharedOptions.js.map +1 -0
  26. package/dist/i18nBackend.js +24 -26
  27. package/dist/i18nBackend.js.map +1 -0
  28. package/dist/i18nFrontend.js +43 -47
  29. package/dist/i18nFrontend.js.map +1 -0
  30. package/dist/i18nMiddleware.js +4 -5
  31. package/dist/i18nMiddleware.js.map +1 -0
  32. package/dist/index.js +7 -15
  33. package/dist/index.js.map +1 -0
  34. package/dist/loadI18next.js +29 -26
  35. package/dist/loadI18next.js.map +1 -0
  36. package/dist/locales/ar/translation.json +441 -440
  37. package/dist/locales/az/translation.json +441 -440
  38. package/dist/locales/cs/translation.json +441 -440
  39. package/dist/locales/de/translation.json +441 -440
  40. package/dist/locales/el/translation.json +441 -440
  41. package/dist/locales/en/translation.json +441 -440
  42. package/dist/locales/en/translation.json.js +1 -1
  43. package/dist/locales/es/translation.json +441 -440
  44. package/dist/locales/fi/translation.json +441 -440
  45. package/dist/locales/fr/translation.json +441 -440
  46. package/dist/locales/hi/translation.json +441 -440
  47. package/dist/locales/hu/translation.json +441 -440
  48. package/dist/locales/id/translation.json +441 -440
  49. package/dist/locales/it/translation.json +441 -440
  50. package/dist/locales/ja/translation.json +441 -440
  51. package/dist/locales/jv/translation.json +441 -440
  52. package/dist/locales/ko/translation.json +441 -440
  53. package/dist/locales/ml/translation.json +441 -440
  54. package/dist/locales/ms/translation.json +441 -440
  55. package/dist/locales/nl/translation.json +441 -440
  56. package/dist/locales/no/translation.json +441 -440
  57. package/dist/locales/pl/translation.json +441 -440
  58. package/dist/locales/pt/translation.json +441 -440
  59. package/dist/locales/pt-BR/translation.json +441 -440
  60. package/dist/locales/ro/translation.json +441 -440
  61. package/dist/locales/ru/translation.json +441 -440
  62. package/dist/locales/sr/translation.json +441 -440
  63. package/dist/locales/sv/translation.json +441 -440
  64. package/dist/locales/th/translation.json +441 -440
  65. package/dist/locales/tr/translation.json +441 -440
  66. package/dist/locales/uk/translation.json +441 -440
  67. package/dist/locales/vi/translation.json +441 -440
  68. package/dist/locales/zh-CN/translation.json +441 -440
  69. package/dist/tests/locales.unit.test.js +49 -0
  70. package/dist/tests/locales.unit.test.js.map +1 -0
  71. package/dist/translationKey.d.ts.map +1 -1
  72. package/dist/translationKey.js +15 -21
  73. package/dist/translationKey.js.map +1 -0
  74. package/dist/translations.js +35 -40
  75. package/dist/translations.js.map +1 -0
  76. package/dist/useTranslation.js +6 -7
  77. package/dist/useTranslation.js.map +1 -0
  78. package/dist/util.js +7 -8
  79. package/dist/util.js.map +1 -0
  80. package/package.json +11 -14
@@ -0,0 +1,160 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for util.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="prettify.css" />
9
+ <link rel="stylesheet" href="base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="index.html">All files</a> util.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">22.22% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>2/9</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">100% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/0</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/2</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">22.22% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>2/9</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
92
+ <span class="cline-any cline-neutral">&nbsp;</span>
93
+ <span class="cline-any cline-neutral">&nbsp;</span>
94
+ <span class="cline-any cline-neutral">&nbsp;</span>
95
+ <span class="cline-any cline-neutral">&nbsp;</span>
96
+ <span class="cline-any cline-neutral">&nbsp;</span>
97
+ <span class="cline-any cline-neutral">&nbsp;</span>
98
+ <span class="cline-any cline-neutral">&nbsp;</span>
99
+ <span class="cline-any cline-neutral">&nbsp;</span>
100
+ <span class="cline-any cline-neutral">&nbsp;</span>
101
+ <span class="cline-any cline-neutral">&nbsp;</span>
102
+ <span class="cline-any cline-neutral">&nbsp;</span>
103
+ <span class="cline-any cline-neutral">&nbsp;</span>
104
+ <span class="cline-any cline-neutral">&nbsp;</span>
105
+ <span class="cline-any cline-yes">1x</span>
106
+ <span class="cline-any cline-no">&nbsp;</span>
107
+ <span class="cline-any cline-no">&nbsp;</span>
108
+ <span class="cline-any cline-no">&nbsp;</span>
109
+ <span class="cline-any cline-no">&nbsp;</span>
110
+ <span class="cline-any cline-neutral">&nbsp;</span>
111
+ <span class="cline-any cline-no">&nbsp;</span>
112
+ <span class="cline-any cline-neutral">&nbsp;</span>
113
+ <span class="cline-any cline-yes">1x</span>
114
+ <span class="cline-any cline-no">&nbsp;</span>
115
+ <span class="cline-any cline-no">&nbsp;</span>
116
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">// Copyright 2021-2025 Prosopo (UK) Ltd.
117
+ //
118
+ // Licensed under the Apache License, Version 2.0 (the "License");
119
+ // you may not use this file except in compliance with the License.
120
+ // You may obtain a copy of the License at
121
+ //
122
+ // http://www.apache.org/licenses/LICENSE-2.0
123
+ //
124
+ // Unless required by applicable law or agreed to in writing, software
125
+ // distributed under the License is distributed on an "AS IS" BASIS,
126
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
127
+ // See the License for the specific language governing permissions and
128
+ // limitations under the License.
129
+ &nbsp;
130
+ export const isClientSide = <span class="fstat-no" title="function not covered" >(): boolean =&gt; {</span>
131
+ <span class="cstat-no" title="statement not covered" > return !!(</span>
132
+ <span class="cstat-no" title="statement not covered" > typeof window !== "undefined" &amp;&amp;</span>
133
+ <span class="cstat-no" title="statement not covered" > window.document &amp;&amp;</span>
134
+ <span class="cstat-no" title="statement not covered" > window.document.createElement</span>
135
+ );
136
+ <span class="cstat-no" title="statement not covered" >};</span>
137
+ &nbsp;
138
+ export const isServerSide = <span class="fstat-no" title="function not covered" >(): boolean =&gt; {</span>
139
+ <span class="cstat-no" title="statement not covered" > return !isClientSide();</span>
140
+ <span class="cstat-no" title="statement not covered" >};</span>
141
+ &nbsp;</pre></td></tr></table></pre>
142
+
143
+ <div class='push'></div><!-- for sticky footer -->
144
+ </div><!-- /wrapper -->
145
+ <div class='footer quiet pad2 space-top1 center small'>
146
+ Code coverage generated by
147
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
148
+ at 2025-09-29T09:25:02.939Z
149
+ </div>
150
+ <script src="prettify.js"></script>
151
+ <script>
152
+ window.onload = function () {
153
+ prettyPrint();
154
+ };
155
+ </script>
156
+ <script src="sorter.js"></script>
157
+ <script src="block-navigation.js"></script>
158
+ </body>
159
+ </html>
160
+
@@ -6,7 +6,8 @@ const FSBackend = require("i18next-fs-backend/cjs");
6
6
  const i18nextHttpMiddleware = require("i18next-http-middleware");
7
7
  const i18SharedOptions = require("./i18SharedOptions.cjs");
8
8
  const util = require("./util.cjs");
9
- const loadPath = `${path.dirname(module)}/locales/{{lng}}/{{ns}}.json`.replace(
9
+ var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
10
+ const loadPath = `${path.dirname(typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("i18nBackend.cjs", document.baseURI).href)}/locales/{{lng}}/{{ns}}.json`.replace(
10
11
  "file://",
11
12
  ""
12
13
  );
@@ -7,7 +7,7 @@ const CONTRACT = { "INVALID_ADDRESS": "Failed to encode invalid address", "CAPTC
7
7
  const CONFIG = { "UNKNOWN_ENVIRONMENT": "Unknown environment requested", "INVALID_CAPTCHA_NUMBER": "Please configure captchas configurations correctly", "INVALID_LOG_LEVEL": "Invalid log level", "INVALID_PACKAGE_DIR": "Invalid package directory" };
8
8
  const DATASET = { "DATASET_PARSE_ERROR": "Error parsing dataset", "SOLUTION_PARSE_ERROR": "Error parsing dataset", "HASH_ERROR": "Error hashing dataset", "DATASET_ID_UNDEFINED": "Dataset id undefined", "NOT_ENOUGH_LABELS": "Not enough labels", "NOT_ENOUGH_IMAGES": "Not enough images", "CAPTCHAS_COUNT_LESS_THAN_CONFIGURED": "Number of captchas in dataset is less than configured number of captchas", "SOLUTIONS_COUNT_LESS_THAN_CONFIGURED": "Number of solutions in dataset is less than configured number of solutions", "DUPLICATE_IMAGE": "duplicate image detected", "MERKLE_ERROR": "Error creating merkle tree" };
9
9
  const DATABASE = { "DATABASE_IMPORT_FAILED": "Failed to import database engine", "DATABASE_UNDEFINED": "Database client is not connected", "DATABASE_HOST_UNDEFINED": "Database host address is not defined", "DATASET_LOAD_FAILED": "Data set load failed", "DATASET_GET_FAILED": "Failed to get dataset", "CAPTCHA_GET_FAILED": "Failed to get captcha", "CAPTCHA_UPDATE_FAILED": "Failed to update captcha", "IMAGE_GET_FAILED": "Failed to get image", "PENDING_RECORD_NOT_FOUND": "No pending record found", "INVALID_HASH": "Invalid hash", "SOLUTION_GET_FAILED": "Failed to get solution", "DATASET_WITH_SOLUTIONS_GET_FAILED": "No datasets found with required number of solutions", "SOLUTION_APPROVE_FAILED": "Failed to approve solution", "SOLUTION_FLAG_FAILED": "Failed to flag solution as processed", "TABLES_UNDEFINED": "Tables undefined", "CONNECTION_UNDEFINED": "Connection undefined", "COMMITMENT_FLAG_FAILED": "Failed to flag commitment as processed", "UNKNOWN": "Unknown database error" };
10
- const CAPTCHA = { "PARSE_ERROR": "Error parsing captcha", "INVALID_CAPTCHA_ID": "Invalid captcha id", "INVALID_ITEM_FORMAT": "Only image and text item types allowed", "INVALID_SOLUTION_TYPE": "Invalid solution type", "INVALID_ITEM_HASH": "Invalid item hash", "DIFFERENT_DATASET_IDS": "Dataset ids do not match", "ID_MISMATCH": "captcha id mismatch", "MISSING_ITEM_HASH": "missing item hash", "INVALID_CAPTCHA_CHALLENGE": "Invalid captcha challenge", "DAPP_USER_SOLUTION_NOT_FOUND": "Dapp user solution not found", "NO_CAPTCHA": "No captcha found", "NO_SESSION_FOUND": "No session found", "INVALID_TOKEN": "Invalid token", "INVALID_SOLUTION": "Invalid solution", "DECRYPTION_ERROR": "Error decrypting" };
10
+ const CAPTCHA = { "PARSE_ERROR": "Error parsing captcha", "INVALID_CAPTCHA_ID": "Invalid captcha id", "INVALID_ITEM_FORMAT": "Only image and text item types allowed", "INVALID_SOLUTION_TYPE": "Invalid solution type", "INVALID_ITEM_HASH": "Invalid item hash", "DIFFERENT_DATASET_IDS": "Dataset ids do not match", "ID_MISMATCH": "captcha id mismatch", "MISSING_ITEM_HASH": "missing item hash", "INVALID_CAPTCHA_CHALLENGE": "Invalid captcha challenge", "DAPP_USER_SOLUTION_NOT_FOUND": "Dapp user solution not found", "NO_CAPTCHA": "No captcha found", "NO_SESSION_FOUND": "No session found", "IP_ADDRESS_MISMATCH": "IP address mismatch detected", "INVALID_TOKEN": "Invalid token", "INVALID_SOLUTION": "Invalid solution", "DECRYPTION_ERROR": "Error decrypting" };
11
11
  const API = { "CAPTCHA_FAILED": "You answered one or more captchas incorrectly. Please try again", "CAPTCHA_PASSED": "You correctly answered the captchas", "BAD_REQUEST": "BadRequest", "USER_VERIFIED": "User verified", "USER_NOT_VERIFIED": "User not verified", "USER_NOT_VERIFIED_TIME_EXPIRED": "User not verified. Captcha solution has expired.", "USER_NOT_VERIFIED_NO_SOLUTION": "User not verified. No captcha solution found.", "USER_ALREADY_VERIFIED": "This solution has already been verified. User should complete a new captcha.", "UNKNOWN": "Unknown API error", "SITE_KEY_NOT_REGISTERED": "Site key not registered", "INCORRECT_CAPTCHA_TYPE": "Incorrect CAPTCHA type", "INSUFFICIENT_PERMISSIONS": "Insufficient permissions to perform this action", "INVALID_SITE_KEY": "Invalid site key", "UNAUTHORIZED_ORIGIN_URL": "Unauthorized origin URL", "UNAUTHORIZED": "Unauthorized", "INVALID_IP": "Invalid IP", "INVALID_URL": "Invalid URL", "INVALID_BODY": "Invalid body", "MISSING_BODY": "Missing body", "MISSING_QUERY_PARAMETERS": "Missing query parameters", "MISSING_AUTHORIZATION_HEADER": "Missing authorization header", "PARSE_ERROR": "Error parsing request", "NO_CONTENT_TYPE_HEADER": "No content-type header. Assumed JSON encoded body but failed to parse.", "TIMESTAMP_TOO_OLD": "Timestamp too old", "FORBIDDEN": "Forbidden", "PROVIDER_VERIFY_FAILED": "Provider verification failed" };
12
12
  const PORTAL = { "CANNOT_MODIFY_OWNER_USER": "Cannot modify owner user", "CANNOT_DELETE_OWN_USER": "Cannot delete your own account", "CANNOT_DELETE_LAST_USER": "Cannot delete last user", "USER_ALREADY_EXISTS": "User already exists", "NO_SUGGESTIONS_FOUND": "No suggestions found", "CANNOT_DEACTIVATE_LAST_SITE": "Cannot deactivate the last active site" };
13
13
  const CLI = { "PARAMETER_ERROR": "Invalid parameter" };
@@ -1,11 +1,9 @@
1
- import { Languages, LanguageSchema } from "./translations.js";
2
- const i18nSharedOptions = {
3
- debug: process.env.PROSOPO_LOG_LEVEL === "debug",
4
- fallbackLng: LanguageSchema.enum.en,
5
- namespace: "translation",
6
- supportedLngs: Object.values(Languages),
7
- nonExplicitSupportedLngs: false
8
- };
9
- export {
10
- i18nSharedOptions
1
+ import { LanguageSchema, Languages } from "./translations.js";
2
+ export const i18nSharedOptions = {
3
+ debug: process.env.PROSOPO_LOG_LEVEL === "debug",
4
+ fallbackLng: LanguageSchema.enum.en,
5
+ namespace: "translation",
6
+ supportedLngs: Object.values(Languages),
7
+ nonExplicitSupportedLngs: false,
11
8
  };
9
+ //# sourceMappingURL=i18SharedOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18SharedOptions.js","sourceRoot":"","sources":["../src/i18SharedOptions.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,OAAO;IAChD,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE;IACnC,SAAS,EAAE,aAAa;IACxB,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;IACvC,wBAAwB,EAAE,KAAK;CAC/B,CAAC"}
@@ -1,32 +1,30 @@
1
1
  import path from "node:path";
2
2
  import i18n from "i18next";
3
3
  import FSBackend from "i18next-fs-backend/cjs";
4
- import { LanguageDetector } from "i18next-http-middleware";
4
+ import { LanguageDetector as MiddlewareLanguageDetector } from "i18next-http-middleware";
5
5
  import { i18nSharedOptions } from "./i18SharedOptions.js";
6
6
  import { isServerSide } from "./util.js";
7
- const loadPath = `${path.dirname(import.meta.url)}/locales/{{lng}}/{{ns}}.json`.replace(
8
- "file://",
9
- ""
10
- );
11
- function initializeI18n(i18nLoadedCallback) {
12
- if (!i18n.isInitialized && isServerSide()) {
13
- const lngDetector = new LanguageDetector(null, {
14
- order: ["header", "query", "cookie"]
15
- });
16
- i18n.use(FSBackend).use(lngDetector).init({
17
- ...i18nSharedOptions,
18
- ns: ["translation"],
19
- backend: {
20
- loadPath
21
- }
22
- });
23
- i18n.on("loaded", () => {
24
- i18nLoadedCallback?.(i18n);
25
- });
26
- }
27
- return i18n;
7
+ const loadPath = `${path.dirname(import.meta.url)}/locales/{{lng}}/{{ns}}.json`.replace("file://", "");
8
+ export function initializeI18n(i18nLoadedCallback) {
9
+ if (!i18n.isInitialized && isServerSide()) {
10
+ const lngDetector = new MiddlewareLanguageDetector(null, {
11
+ order: ["header", "query", "cookie"],
12
+ });
13
+ i18n
14
+ .use(FSBackend)
15
+ .use(lngDetector)
16
+ .init({
17
+ ...i18nSharedOptions,
18
+ ns: ["translation"],
19
+ backend: {
20
+ loadPath,
21
+ },
22
+ });
23
+ i18n.on("loaded", () => {
24
+ i18nLoadedCallback?.(i18n);
25
+ });
26
+ }
27
+ return i18n;
28
28
  }
29
- export {
30
- initializeI18n as default,
31
- initializeI18n
32
- };
29
+ export default initializeI18n;
30
+ //# sourceMappingURL=i18nBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18nBackend.js","sourceRoot":"","sources":["../src/i18nBackend.ts"],"names":[],"mappings":"AAcA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,IAAI,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,QAAQ,GACb,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC,OAAO,CACrE,SAAS,EACT,EAAE,CACF,CAAC;AAEH,MAAM,UAAU,cAAc,CAC7B,kBAAiD;IAEjD,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,YAAY,EAAE,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,IAAI,0BAA0B,CAAC,IAAI,EAAE;YACxD,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC;QACH,IAAI;aAEF,GAAG,CAAC,SAAS,CAAC;aACd,GAAG,CAAC,WAAW,CAAC;aAChB,IAAI,CAAC;YACL,GAAG,iBAAiB;YACpB,EAAE,EAAE,CAAC,aAAa,CAAC;YACnB,OAAO,EAAE;gBACR,QAAQ;aACR;SACD,CAAC,CAAC;QACJ,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,eAAe,cAAc,CAAC"}
@@ -6,54 +6,50 @@ import resourcesToBackend from "i18next-resources-to-backend";
6
6
  import { initReactI18next } from "react-i18next";
7
7
  import { i18nSharedOptions } from "./i18SharedOptions.js";
8
8
  const reactOptions = {
9
- react: {
10
- useSuspense: true
11
- },
12
- detection: {
13
- order: ["navigator", "htmlTag", "path", "subdomain"],
14
- caches: ["localStorage", "cookie"]
15
- }
9
+ react: {
10
+ useSuspense: true,
11
+ },
12
+ detection: {
13
+ order: ["navigator", "htmlTag", "path", "subdomain"],
14
+ caches: ["localStorage", "cookie"],
15
+ },
16
16
  };
17
17
  const getLoadPath = (language, namespace) => {
18
- const filename = import.meta.url.split("/").pop();
19
- return `${import.meta.url.replace(`/${filename}`, "")}/locales/${language}/${namespace}.json`;
18
+ const filename = import.meta.url.split("/").pop();
19
+ return `${import.meta.url.replace(`/${filename}`, "")}/locales/${language}/${namespace}.json`;
20
20
  };
21
- function initializeI18n(i18nLoadedCallback) {
22
- if (!i18n.isInitialized) {
23
- i18n.use(ChainedBackend).use(
24
- new I18nextBrowserLanguageDetector(null, {
25
- order: ["cookie", "localStorage", "navigator"],
26
- lookupQuerystring: "lng",
27
- lookupCookie: "i18next",
28
- lookupLocalStorage: "i18nextLng",
29
- caches: ["localStorage", "cookie"]
30
- })
31
- ).use(initReactI18next).init({
32
- ...i18nSharedOptions,
33
- backend: {
34
- backends: [
35
- HttpBackend,
36
- // if a namespace can't be loaded via normal http-backend loadPath, then the inMemoryLocalBackend will try to return the correct resources
37
- // with dynamic import, you have to use the "default" key of the module ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#importing_defaults )
38
- resourcesToBackend(
39
- (language, namespace) => import(getLoadPath(language, namespace))
40
- )
41
- ],
42
- backendOptions: [
43
- {
44
- loadPath: getLoadPath("{{lng}}", "{{ns}}")
45
- }
46
- ]
47
- },
48
- ...reactOptions
49
- });
50
- i18n.on("loaded", () => {
51
- i18nLoadedCallback?.(i18n);
52
- });
53
- }
54
- return i18n;
21
+ export function initializeI18n(i18nLoadedCallback) {
22
+ if (!i18n.isInitialized) {
23
+ i18n
24
+ .use(ChainedBackend)
25
+ .use(new I18nextBrowserLanguageDetector(null, {
26
+ order: ["cookie", "localStorage", "navigator"],
27
+ lookupQuerystring: "lng",
28
+ lookupCookie: "i18next",
29
+ lookupLocalStorage: "i18nextLng",
30
+ caches: ["localStorage", "cookie"],
31
+ }))
32
+ .use(initReactI18next)
33
+ .init({
34
+ ...i18nSharedOptions,
35
+ backend: {
36
+ backends: [
37
+ HttpBackend,
38
+ resourcesToBackend((language, namespace) => import(getLoadPath(language, namespace))),
39
+ ],
40
+ backendOptions: [
41
+ {
42
+ loadPath: getLoadPath("{{lng}}", "{{ns}}"),
43
+ },
44
+ ],
45
+ },
46
+ ...reactOptions,
47
+ });
48
+ i18n.on("loaded", () => {
49
+ i18nLoadedCallback?.(i18n);
50
+ });
51
+ }
52
+ return i18n;
55
53
  }
56
- export {
57
- initializeI18n as default,
58
- initializeI18n
59
- };
54
+ export default initializeI18n;
55
+ //# sourceMappingURL=i18nFrontend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18nFrontend.js","sourceRoot":"","sources":["../src/i18nFrontend.ts"],"names":[],"mappings":"AAcA,OAAO,IAA0B,MAAM,SAAS,CAAC;AACjD,OAAO,8BAA8B,MAAM,kCAAkC,CAAC;AAC9E,OAAO,cAAc,MAAM,yBAAyB,CAAC;AACrD,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,kBAAkB,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,YAAY,GAAgB;IACjC,KAAK,EAAE;QACN,WAAW,EAAE,IAAI;KACjB;IACD,SAAS,EAAE;QACV,KAAK,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC;QACpD,MAAM,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC;KAClC;CACD,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAE,SAAiB,EAAE,EAAE;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAClD,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,QAAQ,EAAE,EAAE,EAAE,CAAC,YAAY,QAAQ,IAAI,SAAS,OAAO,CAAC;AAC/F,CAAC,CAAC;AAEF,MAAM,UAAU,cAAc,CAC7B,kBAAiD;IAEjD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI;aAEF,GAAG,CAAC,cAAc,CAAC;aACnB,GAAG,CACH,IAAI,8BAA8B,CAAC,IAAI,EAAE;YACxC,KAAK,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,WAAW,CAAC;YAC9C,iBAAiB,EAAE,KAAK;YACxB,YAAY,EAAE,SAAS;YACvB,kBAAkB,EAAE,YAAY;YAChC,MAAM,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC;SAClC,CAAC,CACF;aACA,GAAG,CAAC,gBAAgB,CAAC;aACrB,IAAI,CAAC;YACL,GAAG,iBAAiB;YACpB,OAAO,EAAE;gBACR,QAAQ,EAAE;oBACT,WAAW;oBAEX,kBAAkB,CACjB,CAAC,QAAgB,EAAE,SAAiB,EAAE,EAAE,CACvC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CACzC;iBACD;gBACD,cAAc,EAAE;oBACf;wBACC,QAAQ,EAAE,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC;qBAC1C;iBACD;aACD;YACD,GAAG,YAAY;SACA,CAAC,CAAC;QACnB,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,eAAe,cAAc,CAAC"}
@@ -1,9 +1,8 @@
1
1
  import { handle } from "i18next-http-middleware";
2
2
  import loadI18next from "./loadI18next.js";
3
3
  async function i18nMiddleware(options) {
4
- const i18n = await loadI18next(true);
5
- return handle(i18n, { ...options });
4
+ const i18n = await loadI18next(true);
5
+ return handle(i18n, { ...options });
6
6
  }
7
- export {
8
- i18nMiddleware as default
9
- };
7
+ export default i18nMiddleware;
8
+ //# sourceMappingURL=i18nMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18nMiddleware.js","sourceRoot":"","sources":["../src/i18nMiddleware.ts"],"names":[],"mappings":"AAcA,OAAO,EAAsB,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAE3C,KAAK,UAAU,cAAc,CAC5B,OAAsB;IAEtB,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,eAAe,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -1,15 +1,7 @@
1
- import { default as default2 } from "./i18nMiddleware.js";
2
- import { default as default3 } from "./loadI18next.js";
3
- import { LanguageSchema, Languages } from "./translations.js";
4
- import { isClientSide } from "./util.js";
5
- import { TranslationKeysSchema } from "./translationKey.js";
6
- import { default as default4 } from "./useTranslation.js";
7
- export {
8
- LanguageSchema,
9
- Languages,
10
- TranslationKeysSchema,
11
- default2 as i18nMiddleware,
12
- isClientSide,
13
- default3 as loadI18next,
14
- default4 as useTranslation
15
- };
1
+ export { default as i18nMiddleware } from "./i18nMiddleware.js";
2
+ export { default as loadI18next } from "./loadI18next.js";
3
+ export { Languages, LanguageSchema } from "./translations.js";
4
+ export { isClientSide } from "./util.js";
5
+ export { TranslationKeysSchema } from "./translationKey.js";
6
+ export { default as useTranslation } from "./useTranslation.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,29 +1,32 @@
1
1
  let i18nInstance;
2
2
  async function loadI18next(backend) {
3
- return new Promise((resolve, reject) => {
4
- try {
5
- if (backend) {
6
- import("./i18nBackend.js").then(({ default: initializeI18n }) => {
7
- if (!i18nInstance) {
8
- i18nInstance = initializeI18n(resolve);
9
- } else {
10
- resolve(i18nInstance);
11
- }
12
- });
13
- } else {
14
- import("./i18nFrontend.js").then(({ default: initializeI18n }) => {
15
- if (!i18nInstance) {
16
- i18nInstance = initializeI18n(resolve);
17
- } else {
18
- resolve(i18nInstance);
19
- }
20
- });
21
- }
22
- } catch (e) {
23
- reject(e);
24
- }
25
- });
3
+ return new Promise((resolve, reject) => {
4
+ try {
5
+ if (backend) {
6
+ import("./i18nBackend.js").then(({ default: initializeI18n }) => {
7
+ if (!i18nInstance) {
8
+ i18nInstance = initializeI18n(resolve);
9
+ }
10
+ else {
11
+ resolve(i18nInstance);
12
+ }
13
+ });
14
+ }
15
+ else {
16
+ import("./i18nFrontend.js").then(({ default: initializeI18n }) => {
17
+ if (!i18nInstance) {
18
+ i18nInstance = initializeI18n(resolve);
19
+ }
20
+ else {
21
+ resolve(i18nInstance);
22
+ }
23
+ });
24
+ }
25
+ }
26
+ catch (e) {
27
+ reject(e);
28
+ }
29
+ });
26
30
  }
27
- export {
28
- loadI18next as default
29
- };
31
+ export default loadI18next;
32
+ //# sourceMappingURL=loadI18next.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadI18next.js","sourceRoot":"","sources":["../src/loadI18next.ts"],"names":[],"mappings":"AAeA,IAAI,YAAkB,CAAC;AACvB,KAAK,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,IAAI,CAAC;YACJ,IAAI,OAAO,EAAE,CAAC;gBACb,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE;oBAC/D,IAAI,CAAC,YAAY,EAAE,CAAC;wBAEnB,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;oBACxC,CAAC;yBAAM,CAAC;wBAEP,OAAO,CAAC,YAAY,CAAC,CAAC;oBACvB,CAAC;gBACF,CAAC,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE;oBAChE,IAAI,CAAC,YAAY,EAAE,CAAC;wBAEnB,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;oBACxC,CAAC;yBAAM,CAAC;wBAEP,OAAO,CAAC,YAAY,CAAC,CAAC;oBACvB,CAAC;gBACF,CAAC,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,CAAC,CAAC,CAAC,CAAC;QACX,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC;AAID,eAAe,WAAW,CAAC"}