@modern-js/plugin-i18n 2.69.5 → 3.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/cjs/cli/index.cjs +154 -0
- package/dist/cjs/runtime/I18nLink.cjs +68 -0
- package/dist/cjs/runtime/context.cjs +138 -0
- package/dist/cjs/runtime/hooks.cjs +189 -0
- package/dist/cjs/runtime/i18n/backend/config.cjs +39 -0
- package/dist/cjs/runtime/i18n/backend/defaults.cjs +56 -0
- package/dist/cjs/runtime/i18n/backend/defaults.node.cjs +56 -0
- package/dist/cjs/runtime/i18n/backend/index.cjs +108 -0
- package/dist/cjs/runtime/i18n/backend/middleware.cjs +54 -0
- package/dist/cjs/runtime/i18n/backend/middleware.common.cjs +105 -0
- package/dist/cjs/runtime/i18n/backend/middleware.node.cjs +58 -0
- package/dist/cjs/runtime/i18n/backend/sdk-backend.cjs +171 -0
- package/dist/cjs/runtime/i18n/detection/config.cjs +63 -0
- package/dist/cjs/runtime/i18n/detection/index.cjs +309 -0
- package/dist/cjs/runtime/i18n/detection/middleware.cjs +185 -0
- package/dist/cjs/runtime/i18n/detection/middleware.node.cjs +74 -0
- package/dist/cjs/runtime/i18n/index.cjs +43 -0
- package/dist/cjs/runtime/i18n/instance.cjs +132 -0
- package/dist/cjs/runtime/i18n/utils.cjs +185 -0
- package/dist/cjs/runtime/index.cjs +162 -0
- package/dist/cjs/runtime/types.cjs +18 -0
- package/dist/cjs/runtime/utils.cjs +134 -0
- package/dist/cjs/server/index.cjs +178 -0
- package/dist/cjs/shared/deepMerge.cjs +54 -0
- package/dist/cjs/shared/detection.cjs +105 -0
- package/dist/cjs/shared/type.cjs +18 -0
- package/dist/cjs/shared/utils.cjs +78 -0
- package/dist/esm/cli/index.js +106 -0
- package/dist/esm/runtime/I18nLink.js +31 -0
- package/dist/esm/runtime/context.js +101 -0
- package/dist/esm/runtime/hooks.js +146 -0
- package/dist/esm/runtime/i18n/backend/config.js +5 -0
- package/dist/esm/runtime/i18n/backend/defaults.js +19 -0
- package/dist/esm/runtime/i18n/backend/defaults.node.js +19 -0
- package/dist/esm/runtime/i18n/backend/index.js +74 -0
- package/dist/esm/runtime/i18n/backend/middleware.common.js +61 -0
- package/dist/esm/runtime/i18n/backend/middleware.js +7 -0
- package/dist/esm/runtime/i18n/backend/middleware.node.js +8 -0
- package/dist/esm/runtime/i18n/backend/sdk-backend.js +137 -0
- package/dist/esm/runtime/i18n/detection/config.js +26 -0
- package/dist/esm/runtime/i18n/detection/index.js +260 -0
- package/dist/esm/runtime/i18n/detection/middleware.js +132 -0
- package/dist/esm/runtime/i18n/detection/middleware.node.js +31 -0
- package/dist/esm/runtime/i18n/index.js +3 -0
- package/dist/esm/runtime/i18n/instance.js +77 -0
- package/dist/esm/runtime/i18n/utils.js +136 -0
- package/dist/esm/runtime/index.js +119 -0
- package/dist/esm/runtime/types.js +0 -0
- package/dist/esm/runtime/utils.js +82 -0
- package/dist/esm/server/index.js +168 -0
- package/dist/esm/shared/deepMerge.js +20 -0
- package/dist/esm/shared/detection.js +71 -0
- package/dist/esm/shared/type.js +0 -0
- package/dist/esm/shared/utils.js +35 -0
- package/dist/esm-node/cli/index.js +106 -0
- package/dist/esm-node/runtime/I18nLink.js +31 -0
- package/dist/esm-node/runtime/context.js +101 -0
- package/dist/esm-node/runtime/hooks.js +146 -0
- package/dist/esm-node/runtime/i18n/backend/config.js +5 -0
- package/dist/esm-node/runtime/i18n/backend/defaults.js +19 -0
- package/dist/esm-node/runtime/i18n/backend/defaults.node.js +19 -0
- package/dist/esm-node/runtime/i18n/backend/index.js +74 -0
- package/dist/esm-node/runtime/i18n/backend/middleware.common.js +61 -0
- package/dist/esm-node/runtime/i18n/backend/middleware.js +7 -0
- package/dist/esm-node/runtime/i18n/backend/middleware.node.js +8 -0
- package/dist/esm-node/runtime/i18n/backend/sdk-backend.js +137 -0
- package/dist/esm-node/runtime/i18n/detection/config.js +26 -0
- package/dist/esm-node/runtime/i18n/detection/index.js +260 -0
- package/dist/esm-node/runtime/i18n/detection/middleware.js +132 -0
- package/dist/esm-node/runtime/i18n/detection/middleware.node.js +31 -0
- package/dist/esm-node/runtime/i18n/index.js +3 -0
- package/dist/esm-node/runtime/i18n/instance.js +77 -0
- package/dist/esm-node/runtime/i18n/utils.js +136 -0
- package/dist/esm-node/runtime/index.js +119 -0
- package/dist/esm-node/runtime/types.js +0 -0
- package/dist/esm-node/runtime/utils.js +82 -0
- package/dist/esm-node/server/index.js +168 -0
- package/dist/esm-node/shared/deepMerge.js +20 -0
- package/dist/esm-node/shared/detection.js +71 -0
- package/dist/esm-node/shared/type.js +0 -0
- package/dist/esm-node/shared/utils.js +35 -0
- package/dist/types/cli/index.d.ts +21 -0
- package/dist/types/runtime/I18nLink.d.ts +8 -0
- package/dist/types/runtime/context.d.ts +38 -0
- package/dist/types/runtime/hooks.d.ts +28 -0
- package/dist/types/runtime/i18n/backend/config.d.ts +2 -0
- package/dist/types/runtime/i18n/backend/defaults.d.ts +13 -0
- package/dist/types/runtime/i18n/backend/defaults.node.d.ts +8 -0
- package/dist/types/runtime/i18n/backend/index.d.ts +3 -0
- package/dist/types/runtime/i18n/backend/middleware.common.d.ts +14 -0
- package/dist/types/runtime/i18n/backend/middleware.d.ts +12 -0
- package/dist/types/runtime/i18n/backend/middleware.node.d.ts +13 -0
- package/dist/types/runtime/i18n/backend/sdk-backend.d.ts +52 -0
- package/dist/types/runtime/i18n/detection/config.d.ts +11 -0
- package/dist/types/runtime/i18n/detection/index.d.ts +50 -0
- package/dist/types/runtime/i18n/detection/middleware.d.ts +24 -0
- package/dist/types/runtime/i18n/detection/middleware.node.d.ts +17 -0
- package/dist/types/runtime/i18n/index.d.ts +3 -0
- package/dist/types/runtime/i18n/instance.d.ts +93 -0
- package/dist/types/runtime/i18n/utils.d.ts +29 -0
- package/dist/types/runtime/index.d.ts +19 -0
- package/dist/types/runtime/types.d.ts +15 -0
- package/dist/types/runtime/utils.d.ts +33 -0
- package/dist/types/server/index.d.ts +8 -0
- package/dist/types/shared/deepMerge.d.ts +1 -0
- package/dist/types/shared/detection.d.ts +11 -0
- package/dist/types/shared/type.d.ts +156 -0
- package/dist/types/shared/utils.d.ts +5 -0
- package/package.json +100 -34
- package/rslib.config.mts +4 -0
- package/src/cli/index.ts +245 -0
- package/src/runtime/I18nLink.tsx +76 -0
- package/src/runtime/context.tsx +256 -0
- package/src/runtime/hooks.ts +274 -0
- package/src/runtime/i18n/backend/config.ts +10 -0
- package/src/runtime/i18n/backend/defaults.node.ts +31 -0
- package/src/runtime/i18n/backend/defaults.ts +37 -0
- package/src/runtime/i18n/backend/index.ts +181 -0
- package/src/runtime/i18n/backend/middleware.common.ts +116 -0
- package/src/runtime/i18n/backend/middleware.node.ts +32 -0
- package/src/runtime/i18n/backend/middleware.ts +28 -0
- package/src/runtime/i18n/backend/sdk-backend.ts +292 -0
- package/src/runtime/i18n/detection/config.ts +32 -0
- package/src/runtime/i18n/detection/index.ts +641 -0
- package/src/runtime/i18n/detection/middleware.node.ts +84 -0
- package/src/runtime/i18n/detection/middleware.ts +251 -0
- package/src/runtime/i18n/index.ts +8 -0
- package/src/runtime/i18n/instance.ts +227 -0
- package/src/runtime/i18n/utils.ts +333 -0
- package/src/runtime/index.tsx +275 -0
- package/src/runtime/types.ts +17 -0
- package/src/runtime/utils.ts +151 -0
- package/src/server/index.ts +336 -0
- package/src/shared/deepMerge.ts +38 -0
- package/src/shared/detection.ts +131 -0
- package/src/shared/type.ts +170 -0
- package/src/shared/utils.ts +82 -0
- package/tsconfig.json +12 -0
- package/dist/cjs/index.js +0 -73
- package/dist/cjs/languageDetector.js +0 -51
- package/dist/cjs/utils/index.js +0 -39
- package/dist/esm/index.js +0 -61
- package/dist/esm/languageDetector.js +0 -33
- package/dist/esm/utils/index.js +0 -16
- package/dist/esm-node/index.js +0 -49
- package/dist/esm-node/languageDetector.js +0 -26
- package/dist/esm-node/utils/index.js +0 -15
- package/dist/types/index.d.ts +0 -34
- package/dist/types/languageDetector.d.ts +0 -6
- package/dist/types/utils/index.d.ts +0 -5
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
exportServerLngToWindow: ()=>exportServerLngToWindow,
|
|
28
|
+
buildInitOptions: ()=>buildInitOptions,
|
|
29
|
+
mergeDetectionOptions: ()=>mergeDetectionOptions,
|
|
30
|
+
getLanguageFromSSRData: ()=>getLanguageFromSSRData,
|
|
31
|
+
detectLanguageWithPriority: ()=>detectLanguageWithPriority,
|
|
32
|
+
cacheUserLanguage: ()=>external_middleware_cjs_namespaceObject.cacheUserLanguage
|
|
33
|
+
});
|
|
34
|
+
const runtime_namespaceObject = require("@modern-js/runtime");
|
|
35
|
+
const external_utils_cjs_namespaceObject = require("../../utils.cjs");
|
|
36
|
+
const external_instance_cjs_namespaceObject = require("../instance.cjs");
|
|
37
|
+
const external_config_cjs_namespaceObject = require("./config.cjs");
|
|
38
|
+
const external_middleware_cjs_namespaceObject = require("./middleware.cjs");
|
|
39
|
+
const detectorInstanceCache = new WeakMap();
|
|
40
|
+
const DETECTOR_SAFE_OPTION_KEYS = [
|
|
41
|
+
'lowerCaseLng',
|
|
42
|
+
'nonExplicitSupportedLngs',
|
|
43
|
+
'load',
|
|
44
|
+
'partialBundledLanguages',
|
|
45
|
+
'returnNull',
|
|
46
|
+
'returnEmptyString',
|
|
47
|
+
'returnObjects',
|
|
48
|
+
'joinArrays',
|
|
49
|
+
'keySeparator',
|
|
50
|
+
'nsSeparator',
|
|
51
|
+
'pluralSeparator',
|
|
52
|
+
'contextSeparator',
|
|
53
|
+
'fallbackNS',
|
|
54
|
+
'ns',
|
|
55
|
+
'defaultNS',
|
|
56
|
+
'debug'
|
|
57
|
+
];
|
|
58
|
+
const stableStringify = (value)=>{
|
|
59
|
+
if (null == value) return JSON.stringify(value);
|
|
60
|
+
if ('object' != typeof value) return JSON.stringify(value);
|
|
61
|
+
if (Array.isArray(value)) return `[${value.map((item)=>stableStringify(item)).join(',')}]`;
|
|
62
|
+
const sortedKeys = Object.keys(value).sort();
|
|
63
|
+
const sortedEntries = sortedKeys.map((key)=>{
|
|
64
|
+
const stringifiedValue = stableStringify(value[key]);
|
|
65
|
+
return `${JSON.stringify(key)}:${stringifiedValue}`;
|
|
66
|
+
});
|
|
67
|
+
return `{${sortedEntries.join(',')}}`;
|
|
68
|
+
};
|
|
69
|
+
const buildDetectorConfigKey = (languages, fallbackLanguage, mergedDetection)=>stableStringify({
|
|
70
|
+
languages,
|
|
71
|
+
fallbackLanguage,
|
|
72
|
+
detection: mergedDetection
|
|
73
|
+
});
|
|
74
|
+
const pickSafeDetectionOptions = (userInitOptions)=>{
|
|
75
|
+
if (!userInitOptions) return {};
|
|
76
|
+
const safeOptions = {};
|
|
77
|
+
for (const key of DETECTOR_SAFE_OPTION_KEYS){
|
|
78
|
+
const value = userInitOptions[key];
|
|
79
|
+
if (void 0 !== value) safeOptions[key] = value;
|
|
80
|
+
}
|
|
81
|
+
if (userInitOptions.interpolation) safeOptions.interpolation = {
|
|
82
|
+
...userInitOptions.interpolation
|
|
83
|
+
};
|
|
84
|
+
return safeOptions;
|
|
85
|
+
};
|
|
86
|
+
const cleanupDetectorCacheEntry = (entry)=>{
|
|
87
|
+
if (!entry || !entry.isTemporary) return;
|
|
88
|
+
const instance = entry.instance;
|
|
89
|
+
try {
|
|
90
|
+
instance?.removeAllListeners?.();
|
|
91
|
+
} catch (error) {}
|
|
92
|
+
try {
|
|
93
|
+
instance?.off?.('*');
|
|
94
|
+
} catch (error) {}
|
|
95
|
+
try {
|
|
96
|
+
instance?.services?.backendConnector?.backend?.stop?.();
|
|
97
|
+
} catch (error) {}
|
|
98
|
+
try {
|
|
99
|
+
instance?.services?.backendConnector?.backend?.close?.();
|
|
100
|
+
} catch (error) {}
|
|
101
|
+
};
|
|
102
|
+
function exportServerLngToWindow(context, lng) {
|
|
103
|
+
context.__i18nData__ = {
|
|
104
|
+
lng
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const getLanguageFromSSRData = (window1)=>{
|
|
108
|
+
try {
|
|
109
|
+
const ssrData = window1._SSR_DATA;
|
|
110
|
+
if (!ssrData || !ssrData.data || !ssrData.data.i18nData) return;
|
|
111
|
+
const lng = ssrData.data.i18nData.lng;
|
|
112
|
+
return 'string' == typeof lng && '' !== lng.trim() ? lng : void 0;
|
|
113
|
+
} catch (error) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const normalizeLanguageCode = (language)=>{
|
|
118
|
+
if (!language) return language;
|
|
119
|
+
const baseLang = language.split('-')[0];
|
|
120
|
+
return baseLang;
|
|
121
|
+
};
|
|
122
|
+
const isLanguageSupported = (language, supportedLanguages)=>{
|
|
123
|
+
if (!language) return false;
|
|
124
|
+
if (0 === supportedLanguages.length) return true;
|
|
125
|
+
if (supportedLanguages.includes(language)) return true;
|
|
126
|
+
const baseLang = normalizeLanguageCode(language);
|
|
127
|
+
if (baseLang !== language && supportedLanguages.includes(baseLang)) return true;
|
|
128
|
+
return false;
|
|
129
|
+
};
|
|
130
|
+
const getSupportedLanguage = (language, supportedLanguages)=>{
|
|
131
|
+
if (!language) return;
|
|
132
|
+
if (0 === supportedLanguages.length) return language;
|
|
133
|
+
if (supportedLanguages.includes(language)) return language;
|
|
134
|
+
const baseLang = normalizeLanguageCode(language);
|
|
135
|
+
if (baseLang !== language && supportedLanguages.includes(baseLang)) return baseLang;
|
|
136
|
+
};
|
|
137
|
+
const detectLanguageFromSSR = (languages)=>{
|
|
138
|
+
if (!(0, runtime_namespaceObject.isBrowser)()) return;
|
|
139
|
+
try {
|
|
140
|
+
const ssrLanguage = getLanguageFromSSRData(window);
|
|
141
|
+
if (ssrLanguage && isLanguageSupported(ssrLanguage, languages)) return ssrLanguage;
|
|
142
|
+
} catch (error) {}
|
|
143
|
+
};
|
|
144
|
+
const detectLanguageFromPathPriority = (pathname, languages, localePathRedirect)=>{
|
|
145
|
+
if (!localePathRedirect) return;
|
|
146
|
+
if (!languages || 0 === languages.length) return;
|
|
147
|
+
if (!pathname || '' === pathname.trim()) return;
|
|
148
|
+
try {
|
|
149
|
+
const pathDetection = (0, external_utils_cjs_namespaceObject.detectLanguageFromPath)(pathname, languages, localePathRedirect);
|
|
150
|
+
if (true === pathDetection.detected && pathDetection.language) return pathDetection.language;
|
|
151
|
+
} catch (error) {}
|
|
152
|
+
};
|
|
153
|
+
const createDetectorInstance = (baseInstance, configKey)=>{
|
|
154
|
+
const cached = detectorInstanceCache.get(baseInstance);
|
|
155
|
+
if (cached && cached.configKey === configKey) return {
|
|
156
|
+
instance: cached.instance,
|
|
157
|
+
isTemporary: cached.isTemporary
|
|
158
|
+
};
|
|
159
|
+
if (cached) {
|
|
160
|
+
cleanupDetectorCacheEntry(cached);
|
|
161
|
+
detectorInstanceCache.delete(baseInstance);
|
|
162
|
+
}
|
|
163
|
+
const createNewInstance = ()=>{
|
|
164
|
+
if ('function' == typeof baseInstance.createInstance) try {
|
|
165
|
+
const created = baseInstance.createInstance();
|
|
166
|
+
if (created) return {
|
|
167
|
+
instance: created,
|
|
168
|
+
isTemporary: true
|
|
169
|
+
};
|
|
170
|
+
} catch (error) {}
|
|
171
|
+
if ('function' == typeof baseInstance.cloneInstance) try {
|
|
172
|
+
const cloned = baseInstance.cloneInstance();
|
|
173
|
+
if (cloned) return {
|
|
174
|
+
instance: cloned,
|
|
175
|
+
isTemporary: true
|
|
176
|
+
};
|
|
177
|
+
} catch (error) {}
|
|
178
|
+
return {
|
|
179
|
+
instance: baseInstance,
|
|
180
|
+
isTemporary: false
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
const created = createNewInstance();
|
|
184
|
+
if (created.isTemporary) detectorInstanceCache.set(baseInstance, {
|
|
185
|
+
instance: created.instance,
|
|
186
|
+
isTemporary: true,
|
|
187
|
+
configKey
|
|
188
|
+
});
|
|
189
|
+
return created;
|
|
190
|
+
};
|
|
191
|
+
const initializeI18nForDetector = async (i18nInstance, options)=>{
|
|
192
|
+
const mergedDetection = mergeDetectionOptions(options.i18nextDetector, options.detection, options.localePathRedirect, options.userInitOptions);
|
|
193
|
+
const configKey = buildDetectorConfigKey(options.languages, options.fallbackLanguage, mergedDetection);
|
|
194
|
+
const { instance, isTemporary } = createDetectorInstance(i18nInstance, configKey);
|
|
195
|
+
const safeUserOptions = pickSafeDetectionOptions(options.userInitOptions);
|
|
196
|
+
const initOptions = {
|
|
197
|
+
...safeUserOptions,
|
|
198
|
+
fallbackLng: options.fallbackLanguage,
|
|
199
|
+
supportedLngs: options.languages,
|
|
200
|
+
detection: mergedDetection,
|
|
201
|
+
initImmediate: true,
|
|
202
|
+
interpolation: {
|
|
203
|
+
...safeUserOptions?.interpolation || {},
|
|
204
|
+
escapeValue: safeUserOptions?.interpolation?.escapeValue ?? false
|
|
205
|
+
},
|
|
206
|
+
react: {
|
|
207
|
+
useSuspense: false
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
(0, external_middleware_cjs_namespaceObject.useI18nextLanguageDetector)(instance);
|
|
211
|
+
if (instance.isInitialized) {
|
|
212
|
+
if (isTemporary) await instance.init(initOptions);
|
|
213
|
+
} else await instance.init(initOptions);
|
|
214
|
+
return {
|
|
215
|
+
detectorInstance: instance,
|
|
216
|
+
isTemporary
|
|
217
|
+
};
|
|
218
|
+
};
|
|
219
|
+
const detectLanguageFromI18nextDetector = async (i18nInstance, options)=>{
|
|
220
|
+
if (!options.i18nextDetector) return;
|
|
221
|
+
const mergedDetection = mergeDetectionOptions(options.i18nextDetector, options.detection, options.localePathRedirect, options.userInitOptions);
|
|
222
|
+
const { detectorInstance, isTemporary } = await initializeI18nForDetector(i18nInstance, options);
|
|
223
|
+
try {
|
|
224
|
+
const request = options.ssrContext?.request;
|
|
225
|
+
if (!(0, runtime_namespaceObject.isBrowser)() && !request) return;
|
|
226
|
+
const detectorLang = (0, external_middleware_cjs_namespaceObject.detectLanguage)(detectorInstance, request, mergedDetection);
|
|
227
|
+
if (detectorLang) {
|
|
228
|
+
const supportedLang = getSupportedLanguage(detectorLang, options.languages);
|
|
229
|
+
if (supportedLang) return supportedLang;
|
|
230
|
+
}
|
|
231
|
+
if (detectorInstance.isInitialized && detectorInstance.language) {
|
|
232
|
+
const currentLang = detectorInstance.language;
|
|
233
|
+
if (isLanguageSupported(currentLang, options.languages)) return currentLang;
|
|
234
|
+
}
|
|
235
|
+
} catch (error) {} finally{
|
|
236
|
+
if (isTemporary && detectorInstance !== i18nInstance) detectorInstanceCache.set(i18nInstance, {
|
|
237
|
+
instance: detectorInstance,
|
|
238
|
+
isTemporary: true,
|
|
239
|
+
configKey: buildDetectorConfigKey(options.languages, options.fallbackLanguage, mergedDetection)
|
|
240
|
+
});
|
|
241
|
+
else if (detectorInstance === i18nInstance) {
|
|
242
|
+
i18nInstance.isInitialized = false;
|
|
243
|
+
delete i18nInstance.language;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
const detectLanguageWithPriority = async (i18nInstance, options)=>{
|
|
248
|
+
const { languages, fallbackLanguage, localePathRedirect, i18nextDetector, detection, userInitOptions, pathname, ssrContext } = options;
|
|
249
|
+
let detectedLanguage;
|
|
250
|
+
detectedLanguage = detectLanguageFromSSR(languages);
|
|
251
|
+
if (!detectedLanguage) detectedLanguage = detectLanguageFromPathPriority(pathname, languages, localePathRedirect);
|
|
252
|
+
if (!detectedLanguage && i18nextDetector) detectedLanguage = (0, external_instance_cjs_namespaceObject.isI18nWrapperInstance)(i18nInstance) ? (0, external_middleware_cjs_namespaceObject.readLanguageFromStorage)(mergeDetectionOptions(i18nextDetector, detection, localePathRedirect, userInitOptions)) : await detectLanguageFromI18nextDetector(i18nInstance, {
|
|
253
|
+
languages,
|
|
254
|
+
fallbackLanguage,
|
|
255
|
+
localePathRedirect,
|
|
256
|
+
i18nextDetector,
|
|
257
|
+
detection,
|
|
258
|
+
userInitOptions,
|
|
259
|
+
mergedBackend: options.mergedBackend,
|
|
260
|
+
ssrContext
|
|
261
|
+
});
|
|
262
|
+
const finalLanguage = detectedLanguage || userInitOptions?.lng || fallbackLanguage;
|
|
263
|
+
return {
|
|
264
|
+
detectedLanguage,
|
|
265
|
+
finalLanguage
|
|
266
|
+
};
|
|
267
|
+
};
|
|
268
|
+
const buildInitOptions = (params)=>{
|
|
269
|
+
const { finalLanguage, fallbackLanguage, languages, userInitOptions, mergedDetection, mergeBackend } = params;
|
|
270
|
+
return {
|
|
271
|
+
...userInitOptions || {},
|
|
272
|
+
lng: finalLanguage,
|
|
273
|
+
fallbackLng: fallbackLanguage,
|
|
274
|
+
supportedLngs: languages,
|
|
275
|
+
detection: mergedDetection,
|
|
276
|
+
backend: mergeBackend,
|
|
277
|
+
interpolation: {
|
|
278
|
+
...userInitOptions?.interpolation || {},
|
|
279
|
+
escapeValue: userInitOptions?.interpolation?.escapeValue ?? false
|
|
280
|
+
},
|
|
281
|
+
react: {
|
|
282
|
+
useSuspense: (0, runtime_namespaceObject.isBrowser)()
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
};
|
|
286
|
+
const mergeDetectionOptions = (i18nextDetector, detection, localePathRedirect, userInitOptions)=>{
|
|
287
|
+
let mergedDetection;
|
|
288
|
+
mergedDetection = i18nextDetector ? (0, external_config_cjs_namespaceObject.mergeDetectionOptions)(detection, userInitOptions?.detection) : userInitOptions?.detection || {};
|
|
289
|
+
if (!mergedDetection || 'object' != typeof mergedDetection) mergedDetection = {};
|
|
290
|
+
if (localePathRedirect && mergedDetection.order) mergedDetection.order = mergedDetection.order.filter((item)=>'path' !== item);
|
|
291
|
+
return mergedDetection;
|
|
292
|
+
};
|
|
293
|
+
exports.buildInitOptions = __webpack_exports__.buildInitOptions;
|
|
294
|
+
exports.cacheUserLanguage = __webpack_exports__.cacheUserLanguage;
|
|
295
|
+
exports.detectLanguageWithPriority = __webpack_exports__.detectLanguageWithPriority;
|
|
296
|
+
exports.exportServerLngToWindow = __webpack_exports__.exportServerLngToWindow;
|
|
297
|
+
exports.getLanguageFromSSRData = __webpack_exports__.getLanguageFromSSRData;
|
|
298
|
+
exports.mergeDetectionOptions = __webpack_exports__.mergeDetectionOptions;
|
|
299
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
300
|
+
"buildInitOptions",
|
|
301
|
+
"cacheUserLanguage",
|
|
302
|
+
"detectLanguageWithPriority",
|
|
303
|
+
"exportServerLngToWindow",
|
|
304
|
+
"getLanguageFromSSRData",
|
|
305
|
+
"mergeDetectionOptions"
|
|
306
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
307
|
+
Object.defineProperty(exports, '__esModule', {
|
|
308
|
+
value: true
|
|
309
|
+
});
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.n = (module)=>{
|
|
5
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
+
__webpack_require__.d(getter, {
|
|
7
|
+
a: getter
|
|
8
|
+
});
|
|
9
|
+
return getter;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
12
|
+
(()=>{
|
|
13
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
14
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: definition[key]
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
})();
|
|
20
|
+
(()=>{
|
|
21
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
22
|
+
})();
|
|
23
|
+
(()=>{
|
|
24
|
+
__webpack_require__.r = (exports1)=>{
|
|
25
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
26
|
+
value: 'Module'
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
29
|
+
value: true
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
})();
|
|
33
|
+
var __webpack_exports__ = {};
|
|
34
|
+
__webpack_require__.r(__webpack_exports__);
|
|
35
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
36
|
+
detectLanguage: ()=>detectLanguage,
|
|
37
|
+
useI18nextLanguageDetector: ()=>useI18nextLanguageDetector,
|
|
38
|
+
readLanguageFromStorage: ()=>readLanguageFromStorage,
|
|
39
|
+
cacheUserLanguage: ()=>cacheUserLanguage
|
|
40
|
+
});
|
|
41
|
+
const runtime_namespaceObject = require("@modern-js/runtime");
|
|
42
|
+
const external_i18next_browser_languagedetector_namespaceObject = require("i18next-browser-languagedetector");
|
|
43
|
+
var external_i18next_browser_languagedetector_default = /*#__PURE__*/ __webpack_require__.n(external_i18next_browser_languagedetector_namespaceObject);
|
|
44
|
+
const external_instance_cjs_namespaceObject = require("../instance.cjs");
|
|
45
|
+
const useI18nextLanguageDetector = (i18nInstance)=>{
|
|
46
|
+
if (!i18nInstance.isInitialized) {
|
|
47
|
+
if ((0, external_instance_cjs_namespaceObject.isI18nWrapperInstance)(i18nInstance)) {
|
|
48
|
+
const actualInstance = (0, external_instance_cjs_namespaceObject.getActualI18nextInstance)(i18nInstance);
|
|
49
|
+
if (actualInstance && !actualInstance.isInitialized) actualInstance.use(external_i18next_browser_languagedetector_default());
|
|
50
|
+
}
|
|
51
|
+
return i18nInstance.use(external_i18next_browser_languagedetector_default());
|
|
52
|
+
}
|
|
53
|
+
return i18nInstance;
|
|
54
|
+
};
|
|
55
|
+
const readLanguageFromStorage = (detectionOptions)=>{
|
|
56
|
+
try {
|
|
57
|
+
const options = detectionOptions || {};
|
|
58
|
+
const order = options.order || [
|
|
59
|
+
'querystring',
|
|
60
|
+
'cookie',
|
|
61
|
+
'localStorage',
|
|
62
|
+
'navigator',
|
|
63
|
+
'htmlTag',
|
|
64
|
+
'path',
|
|
65
|
+
'subdomain'
|
|
66
|
+
];
|
|
67
|
+
for (const method of order)switch(method){
|
|
68
|
+
case 'querystring':
|
|
69
|
+
{
|
|
70
|
+
const lookupKey = options.lookupQuerystring || 'lng';
|
|
71
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
72
|
+
const lang = urlParams.get(lookupKey);
|
|
73
|
+
if (lang) return lang;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
case 'cookie':
|
|
77
|
+
{
|
|
78
|
+
const lookupKey = options.lookupCookie || 'i18next';
|
|
79
|
+
const cookies = document.cookie.split(';').reduce((acc, item)=>{
|
|
80
|
+
const [key, value] = item.trim().split('=');
|
|
81
|
+
if (key && value) acc[key] = decodeURIComponent(value);
|
|
82
|
+
return acc;
|
|
83
|
+
}, {});
|
|
84
|
+
if (cookies[lookupKey]) return cookies[lookupKey];
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
case 'localStorage':
|
|
88
|
+
{
|
|
89
|
+
const lookupKey = options.lookupLocalStorage || 'i18nextLng';
|
|
90
|
+
const keysToCheck = [
|
|
91
|
+
lookupKey
|
|
92
|
+
];
|
|
93
|
+
if ('i18nextLng' === lookupKey) keysToCheck.push('i18next');
|
|
94
|
+
for (const key of keysToCheck){
|
|
95
|
+
const stored = localStorage.getItem(key);
|
|
96
|
+
if (stored) return stored;
|
|
97
|
+
}
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
case 'navigator':
|
|
101
|
+
if (navigator.language) return navigator.language.split('-')[0];
|
|
102
|
+
break;
|
|
103
|
+
case 'htmlTag':
|
|
104
|
+
{
|
|
105
|
+
const htmlLang = document.documentElement.lang;
|
|
106
|
+
if (htmlLang) return htmlLang.split('-')[0];
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
} catch (error) {}
|
|
111
|
+
};
|
|
112
|
+
const detectLanguage = (i18nInstance, _request, detectionOptions)=>{
|
|
113
|
+
try {
|
|
114
|
+
const actualInstance = (0, external_instance_cjs_namespaceObject.isI18nWrapperInstance)(i18nInstance) ? (0, external_instance_cjs_namespaceObject.getActualI18nextInstance)(i18nInstance) : i18nInstance;
|
|
115
|
+
const isInitialized = i18nInstance.isInitialized || actualInstance?.isInitialized;
|
|
116
|
+
const detector = actualInstance?.services?.languageDetector || i18nInstance.services?.languageDetector;
|
|
117
|
+
if (detector && 'function' == typeof detector.detect) {
|
|
118
|
+
const result = detector.detect();
|
|
119
|
+
if ('string' == typeof result) return result;
|
|
120
|
+
if (Array.isArray(result) && result.length > 0) return result[0];
|
|
121
|
+
}
|
|
122
|
+
if ((0, runtime_namespaceObject.isBrowser)()) {
|
|
123
|
+
const directRead = readLanguageFromStorage(detectionOptions);
|
|
124
|
+
if (directRead) return directRead;
|
|
125
|
+
}
|
|
126
|
+
if (isInitialized) {
|
|
127
|
+
const servicesToUse = actualInstance?.services || i18nInstance.services;
|
|
128
|
+
const optionsToUse = actualInstance?.options || i18nInstance.options;
|
|
129
|
+
if (servicesToUse && optionsToUse) {
|
|
130
|
+
const manualDetector = new (external_i18next_browser_languagedetector_default())();
|
|
131
|
+
const mergedOptions = detectionOptions ? {
|
|
132
|
+
...optionsToUse,
|
|
133
|
+
detection: detectionOptions
|
|
134
|
+
} : optionsToUse;
|
|
135
|
+
manualDetector.init(servicesToUse, mergedOptions);
|
|
136
|
+
const result = manualDetector.detect();
|
|
137
|
+
if ('string' == typeof result) return result;
|
|
138
|
+
if (Array.isArray(result) && result.length > 0) return result[0];
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
} catch (error) {}
|
|
142
|
+
};
|
|
143
|
+
const cacheUserLanguage = (i18nInstance, language, detectionOptions)=>{
|
|
144
|
+
if ("u" < typeof window) return;
|
|
145
|
+
try {
|
|
146
|
+
const actualInstance = (0, external_instance_cjs_namespaceObject.isI18nWrapperInstance)(i18nInstance) ? (0, external_instance_cjs_namespaceObject.getActualI18nextInstance)(i18nInstance) : i18nInstance;
|
|
147
|
+
const detector = actualInstance?.services?.languageDetector || i18nInstance.services?.languageDetector;
|
|
148
|
+
if (detector && 'function' == typeof detector.cacheUserLanguage) try {
|
|
149
|
+
detector.cacheUserLanguage(language);
|
|
150
|
+
return;
|
|
151
|
+
} catch (error) {
|
|
152
|
+
if ('development' === process.env.NODE_ENV) console.warn('[i18n] Failed to cache via detector, falling back to manual cache:', error);
|
|
153
|
+
}
|
|
154
|
+
const isInitialized = i18nInstance.isInitialized || actualInstance?.isInitialized;
|
|
155
|
+
const servicesToUse = actualInstance?.services || i18nInstance.services;
|
|
156
|
+
const optionsToUse = actualInstance?.options || i18nInstance.options;
|
|
157
|
+
if (isInitialized && servicesToUse && optionsToUse) try {
|
|
158
|
+
const userOptions = detectionOptions || optionsToUse?.detection;
|
|
159
|
+
const mergedOptions = userOptions ? {
|
|
160
|
+
...optionsToUse,
|
|
161
|
+
detection: userOptions
|
|
162
|
+
} : optionsToUse;
|
|
163
|
+
const manualDetector = new (external_i18next_browser_languagedetector_default())();
|
|
164
|
+
manualDetector.init(servicesToUse, mergedOptions);
|
|
165
|
+
if ('function' == typeof manualDetector.cacheUserLanguage) return void manualDetector.cacheUserLanguage(language);
|
|
166
|
+
} catch (error) {
|
|
167
|
+
if ('development' === process.env.NODE_ENV) console.warn('[i18n] Failed to create manual detector:', error);
|
|
168
|
+
}
|
|
169
|
+
} catch (error) {
|
|
170
|
+
if ('development' === process.env.NODE_ENV) console.error('Failed to cache user language:', error);
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
exports.cacheUserLanguage = __webpack_exports__.cacheUserLanguage;
|
|
174
|
+
exports.detectLanguage = __webpack_exports__.detectLanguage;
|
|
175
|
+
exports.readLanguageFromStorage = __webpack_exports__.readLanguageFromStorage;
|
|
176
|
+
exports.useI18nextLanguageDetector = __webpack_exports__.useI18nextLanguageDetector;
|
|
177
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
178
|
+
"cacheUserLanguage",
|
|
179
|
+
"detectLanguage",
|
|
180
|
+
"readLanguageFromStorage",
|
|
181
|
+
"useI18nextLanguageDetector"
|
|
182
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
183
|
+
Object.defineProperty(exports, '__esModule', {
|
|
184
|
+
value: true
|
|
185
|
+
});
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
detectLanguage: ()=>detectLanguage,
|
|
28
|
+
useI18nextLanguageDetector: ()=>useI18nextLanguageDetector,
|
|
29
|
+
readLanguageFromStorage: ()=>readLanguageFromStorage,
|
|
30
|
+
cacheUserLanguage: ()=>cacheUserLanguage
|
|
31
|
+
});
|
|
32
|
+
const external_i18next_http_middleware_namespaceObject = require("i18next-http-middleware");
|
|
33
|
+
const cacheUserLanguage = (_i18nInstance, _language, _detectionOptions)=>{};
|
|
34
|
+
const readLanguageFromStorage = (_detectionOptions)=>{};
|
|
35
|
+
const useI18nextLanguageDetector = (i18nInstance)=>{
|
|
36
|
+
if (!i18nInstance.isInitialized) return i18nInstance.use(external_i18next_http_middleware_namespaceObject.LanguageDetector);
|
|
37
|
+
return i18nInstance;
|
|
38
|
+
};
|
|
39
|
+
const detectLanguage = (i18nInstance, request, detectionOptions)=>{
|
|
40
|
+
if (!request) return;
|
|
41
|
+
try {
|
|
42
|
+
const detector = i18nInstance.services?.languageDetector;
|
|
43
|
+
if (detector && 'function' == typeof detector.detect) {
|
|
44
|
+
const result = detector.detect(request, {});
|
|
45
|
+
if ('string' == typeof result) return result;
|
|
46
|
+
if (Array.isArray(result) && result.length > 0) return result[0];
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (i18nInstance.isInitialized && i18nInstance.services && i18nInstance.options) {
|
|
50
|
+
const manualDetector = new external_i18next_http_middleware_namespaceObject.LanguageDetector();
|
|
51
|
+
const optionsToUse = detectionOptions ? {
|
|
52
|
+
...i18nInstance.options,
|
|
53
|
+
detection: detectionOptions
|
|
54
|
+
} : i18nInstance.options;
|
|
55
|
+
manualDetector.init(i18nInstance.services, optionsToUse);
|
|
56
|
+
const result = manualDetector.detect(request, {}, void 0);
|
|
57
|
+
if ('string' == typeof result) return result;
|
|
58
|
+
if (Array.isArray(result) && result.length > 0) return result[0];
|
|
59
|
+
}
|
|
60
|
+
} catch (error) {}
|
|
61
|
+
};
|
|
62
|
+
exports.cacheUserLanguage = __webpack_exports__.cacheUserLanguage;
|
|
63
|
+
exports.detectLanguage = __webpack_exports__.detectLanguage;
|
|
64
|
+
exports.readLanguageFromStorage = __webpack_exports__.readLanguageFromStorage;
|
|
65
|
+
exports.useI18nextLanguageDetector = __webpack_exports__.useI18nextLanguageDetector;
|
|
66
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
67
|
+
"cacheUserLanguage",
|
|
68
|
+
"detectLanguage",
|
|
69
|
+
"readLanguageFromStorage",
|
|
70
|
+
"useI18nextLanguageDetector"
|
|
71
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
72
|
+
Object.defineProperty(exports, '__esModule', {
|
|
73
|
+
value: true
|
|
74
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
getI18nInstance: ()=>external_instance_cjs_namespaceObject.getI18nInstance,
|
|
28
|
+
isI18nInstance: ()=>external_instance_cjs_namespaceObject.isI18nInstance,
|
|
29
|
+
assertI18nInstance: ()=>external_utils_cjs_namespaceObject.assertI18nInstance
|
|
30
|
+
});
|
|
31
|
+
const external_instance_cjs_namespaceObject = require("./instance.cjs");
|
|
32
|
+
const external_utils_cjs_namespaceObject = require("./utils.cjs");
|
|
33
|
+
exports.assertI18nInstance = __webpack_exports__.assertI18nInstance;
|
|
34
|
+
exports.getI18nInstance = __webpack_exports__.getI18nInstance;
|
|
35
|
+
exports.isI18nInstance = __webpack_exports__.isI18nInstance;
|
|
36
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
37
|
+
"assertI18nInstance",
|
|
38
|
+
"getI18nInstance",
|
|
39
|
+
"isI18nInstance"
|
|
40
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
41
|
+
Object.defineProperty(exports, '__esModule', {
|
|
42
|
+
value: true
|
|
43
|
+
});
|