@bleedingdev/modern-js-plugin-i18n 3.8.1-ultramodern.2 → 3.8.1-ultramodern.4
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/dist/cjs/runtime/i18n/detection/detector.js +1 -1
- package/dist/cjs/runtime/i18n/detection/index.js +0 -6
- package/dist/cjs/runtime/i18n/detection/initOptions.js +0 -22
- package/dist/cjs/runtime/i18n/detection/language.js +2 -14
- package/dist/cjs/runtime/i18n/detection/priority.js +0 -1
- package/dist/cjs/runtime/pluginSetup.js +0 -1
- package/dist/cjs/server/detectorOptions.js +1 -7
- package/dist/esm/runtime/i18n/detection/detector.mjs +2 -2
- package/dist/esm/runtime/i18n/detection/index.mjs +2 -2
- package/dist/esm/runtime/i18n/detection/initOptions.mjs +1 -20
- package/dist/esm/runtime/i18n/detection/language.mjs +1 -10
- package/dist/esm/runtime/i18n/detection/priority.mjs +0 -1
- package/dist/esm/runtime/pluginSetup.mjs +0 -1
- package/dist/esm/server/detectorOptions.mjs +1 -7
- package/dist/esm-node/runtime/i18n/detection/detector.mjs +2 -2
- package/dist/esm-node/runtime/i18n/detection/index.mjs +2 -2
- package/dist/esm-node/runtime/i18n/detection/initOptions.mjs +1 -20
- package/dist/esm-node/runtime/i18n/detection/language.mjs +1 -10
- package/dist/esm-node/runtime/i18n/detection/priority.mjs +0 -1
- package/dist/esm-node/runtime/pluginSetup.mjs +0 -1
- package/dist/esm-node/server/detectorOptions.mjs +1 -7
- package/dist/types/runtime/i18n/detection/index.d.ts +2 -3
- package/dist/types/runtime/i18n/detection/initOptions.d.ts +0 -5
- package/dist/types/runtime/i18n/detection/language.d.ts +0 -5
- package/dist/types/runtime/i18n/detection/types.d.ts +1 -13
- package/dist/types/server/detectorOptions.d.ts +1 -1
- package/package.json +10 -10
- package/src/runtime/i18n/detection/detector.ts +2 -2
- package/src/runtime/i18n/detection/index.ts +2 -8
- package/src/runtime/i18n/detection/initOptions.ts +0 -35
- package/src/runtime/i18n/detection/language.ts +0 -29
- package/src/runtime/i18n/detection/priority.ts +0 -1
- package/src/runtime/i18n/detection/types.ts +1 -18
- package/src/runtime/pluginSetup.ts +0 -1
- package/src/server/detectorOptions.ts +1 -10
|
@@ -77,7 +77,7 @@ const detectLanguageFromI18nextDetector = async (i18nInstance, options)=>{
|
|
|
77
77
|
}
|
|
78
78
|
if (detectorInstance.isInitialized && detectorInstance.language) {
|
|
79
79
|
const currentLang = detectorInstance.language;
|
|
80
|
-
if ((0, external_language_js_namespaceObject.
|
|
80
|
+
if ((0, external_language_js_namespaceObject.getSupportedLanguage)(currentLang, options.languages)) return currentLang;
|
|
81
81
|
}
|
|
82
82
|
} catch (error) {} finally{
|
|
83
83
|
if (isTemporary && detectorInstance !== i18nInstance) external_cache_js_namespaceObject.detectorInstanceCache.set(i18nInstance, {
|
|
@@ -28,29 +28,23 @@ var __webpack_require__ = {};
|
|
|
28
28
|
var __webpack_exports__ = {};
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
-
buildInitOptions: ()=>external_initOptions_js_namespaceObject.buildInitOptions,
|
|
32
31
|
cacheUserLanguage: ()=>external_middleware_js_namespaceObject.cacheUserLanguage,
|
|
33
32
|
detectLanguageWithPriority: ()=>external_priority_js_namespaceObject.detectLanguageWithPriority,
|
|
34
33
|
exportServerLngToWindow: ()=>external_ssr_js_namespaceObject.exportServerLngToWindow,
|
|
35
|
-
getLanguageFromSSRData: ()=>external_ssr_js_namespaceObject.getLanguageFromSSRData,
|
|
36
34
|
mergeDetectionOptions: ()=>external_initOptions_js_namespaceObject.mergeDetectionOptions
|
|
37
35
|
});
|
|
38
36
|
const external_initOptions_js_namespaceObject = require("./initOptions.js");
|
|
39
37
|
const external_middleware_js_namespaceObject = require("./middleware.js");
|
|
40
38
|
const external_priority_js_namespaceObject = require("./priority.js");
|
|
41
39
|
const external_ssr_js_namespaceObject = require("./ssr.js");
|
|
42
|
-
exports.buildInitOptions = __webpack_exports__.buildInitOptions;
|
|
43
40
|
exports.cacheUserLanguage = __webpack_exports__.cacheUserLanguage;
|
|
44
41
|
exports.detectLanguageWithPriority = __webpack_exports__.detectLanguageWithPriority;
|
|
45
42
|
exports.exportServerLngToWindow = __webpack_exports__.exportServerLngToWindow;
|
|
46
|
-
exports.getLanguageFromSSRData = __webpack_exports__.getLanguageFromSSRData;
|
|
47
43
|
exports.mergeDetectionOptions = __webpack_exports__.mergeDetectionOptions;
|
|
48
44
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
49
|
-
"buildInitOptions",
|
|
50
45
|
"cacheUserLanguage",
|
|
51
46
|
"detectLanguageWithPriority",
|
|
52
47
|
"exportServerLngToWindow",
|
|
53
|
-
"getLanguageFromSSRData",
|
|
54
48
|
"mergeDetectionOptions"
|
|
55
49
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
56
50
|
Object.defineProperty(exports, '__esModule', {
|
|
@@ -28,29 +28,9 @@ var __webpack_require__ = {};
|
|
|
28
28
|
var __webpack_exports__ = {};
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
-
buildInitOptions: ()=>buildInitOptions,
|
|
32
31
|
mergeDetectionOptions: ()=>mergeDetectionOptions
|
|
33
32
|
});
|
|
34
|
-
const runtime_namespaceObject = require("@modern-js/runtime");
|
|
35
33
|
const external_config_js_namespaceObject = require("./config.js");
|
|
36
|
-
const buildInitOptions = (params)=>{
|
|
37
|
-
const { finalLanguage, fallbackLanguage, languages, userInitOptions, mergedDetection, mergeBackend } = params;
|
|
38
|
-
return {
|
|
39
|
-
...userInitOptions || {},
|
|
40
|
-
lng: finalLanguage,
|
|
41
|
-
fallbackLng: fallbackLanguage,
|
|
42
|
-
supportedLngs: languages,
|
|
43
|
-
detection: mergedDetection,
|
|
44
|
-
backend: mergeBackend,
|
|
45
|
-
interpolation: {
|
|
46
|
-
...userInitOptions?.interpolation || {},
|
|
47
|
-
escapeValue: userInitOptions?.interpolation?.escapeValue ?? false
|
|
48
|
-
},
|
|
49
|
-
react: {
|
|
50
|
-
useSuspense: (0, runtime_namespaceObject.isBrowser)()
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
};
|
|
54
34
|
const mergeDetectionOptions = (i18nextDetector, detection, localePathRedirect, userInitOptions)=>{
|
|
55
35
|
let mergedDetection;
|
|
56
36
|
mergedDetection = i18nextDetector ? (0, external_config_js_namespaceObject.mergeDetectionOptions)(detection, userInitOptions?.detection) : userInitOptions?.detection || {};
|
|
@@ -58,10 +38,8 @@ const mergeDetectionOptions = (i18nextDetector, detection, localePathRedirect, u
|
|
|
58
38
|
if (localePathRedirect && mergedDetection.order) mergedDetection.order = mergedDetection.order.filter((item)=>'path' !== item);
|
|
59
39
|
return mergedDetection;
|
|
60
40
|
};
|
|
61
|
-
exports.buildInitOptions = __webpack_exports__.buildInitOptions;
|
|
62
41
|
exports.mergeDetectionOptions = __webpack_exports__.mergeDetectionOptions;
|
|
63
42
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
64
|
-
"buildInitOptions",
|
|
65
43
|
"mergeDetectionOptions"
|
|
66
44
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
67
45
|
Object.defineProperty(exports, '__esModule', {
|
|
@@ -28,18 +28,9 @@ var __webpack_require__ = {};
|
|
|
28
28
|
var __webpack_exports__ = {};
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
30
|
const normalizeLanguageCode = (language)=>{
|
|
31
|
-
if (!language) return language;
|
|
32
31
|
const baseLang = language.split('-')[0];
|
|
33
32
|
return baseLang;
|
|
34
33
|
};
|
|
35
|
-
const isLanguageSupported = (language, supportedLanguages)=>{
|
|
36
|
-
if (!language) return false;
|
|
37
|
-
if (0 === supportedLanguages.length) return true;
|
|
38
|
-
if (supportedLanguages.includes(language)) return true;
|
|
39
|
-
const baseLang = normalizeLanguageCode(language);
|
|
40
|
-
if (baseLang !== language && supportedLanguages.includes(baseLang)) return true;
|
|
41
|
-
return false;
|
|
42
|
-
};
|
|
43
34
|
const getSupportedLanguage = (language, supportedLanguages)=>{
|
|
44
35
|
if (!language) return;
|
|
45
36
|
if (0 === supportedLanguages.length) return language;
|
|
@@ -48,14 +39,11 @@ const getSupportedLanguage = (language, supportedLanguages)=>{
|
|
|
48
39
|
if (baseLang !== language && supportedLanguages.includes(baseLang)) return baseLang;
|
|
49
40
|
};
|
|
50
41
|
__webpack_require__.d(__webpack_exports__, {}, {
|
|
51
|
-
getSupportedLanguage: getSupportedLanguage
|
|
52
|
-
isLanguageSupported: isLanguageSupported
|
|
42
|
+
getSupportedLanguage: getSupportedLanguage
|
|
53
43
|
});
|
|
54
44
|
exports.getSupportedLanguage = __webpack_exports__.getSupportedLanguage;
|
|
55
|
-
exports.isLanguageSupported = __webpack_exports__.isLanguageSupported;
|
|
56
45
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
57
|
-
"getSupportedLanguage"
|
|
58
|
-
"isLanguageSupported"
|
|
46
|
+
"getSupportedLanguage"
|
|
59
47
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
60
48
|
Object.defineProperty(exports, '__esModule', {
|
|
61
49
|
value: true
|
|
@@ -48,7 +48,6 @@ const detectLanguageWithPriority = async (i18nInstance, options)=>{
|
|
|
48
48
|
i18nextDetector,
|
|
49
49
|
detection,
|
|
50
50
|
userInitOptions,
|
|
51
|
-
mergedBackend: options.mergedBackend,
|
|
52
51
|
ssrContext
|
|
53
52
|
});
|
|
54
53
|
const finalLanguage = detectedLanguage || userInitOptions?.lng || fallbackLanguage;
|
|
@@ -45,12 +45,6 @@ const convertToHonoLanguageDetectorOptions = (languages, fallbackLanguage, detec
|
|
|
45
45
|
'cookie',
|
|
46
46
|
'header'
|
|
47
47
|
];
|
|
48
|
-
const honoOrder = detectionOrder.map((item)=>{
|
|
49
|
-
if ('querystring' === item) return 'querystring';
|
|
50
|
-
if ('cookie' === item) return 'cookie';
|
|
51
|
-
if ('header' === item) return 'header';
|
|
52
|
-
return item;
|
|
53
|
-
});
|
|
54
48
|
const caches = false === mergedDetection.caches ? false : Array.isArray(mergedDetection.caches) && !mergedDetection.caches.includes('cookie') ? false : [
|
|
55
49
|
'cookie'
|
|
56
50
|
];
|
|
@@ -75,7 +69,7 @@ const convertToHonoLanguageDetectorOptions = (languages, fallbackLanguage, detec
|
|
|
75
69
|
fallbackLanguage
|
|
76
70
|
],
|
|
77
71
|
fallbackLanguage,
|
|
78
|
-
order:
|
|
72
|
+
order: detectionOrder,
|
|
79
73
|
lookupQueryString: mergedDetection.lookupQuerystring || config_js_namespaceObject.DEFAULT_I18NEXT_DETECTION_OPTIONS.lookupQuerystring || 'lng',
|
|
80
74
|
lookupCookie: mergedDetection.lookupCookie || config_js_namespaceObject.DEFAULT_I18NEXT_DETECTION_OPTIONS.lookupCookie || 'i18next',
|
|
81
75
|
lookupFromHeaderKey: mergedDetection.lookupHeader || config_js_namespaceObject.DEFAULT_I18NEXT_DETECTION_OPTIONS.lookupHeader || 'accept-language',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isBrowser } from "@modern-js/runtime";
|
|
2
2
|
import { buildDetectorConfigKey, createDetectorInstance, detectorInstanceCache, pickSafeDetectionOptions } from "./cache.mjs";
|
|
3
3
|
import { mergeDetectionOptions } from "./initOptions.mjs";
|
|
4
|
-
import { getSupportedLanguage
|
|
4
|
+
import { getSupportedLanguage } from "./language.mjs";
|
|
5
5
|
import { detectLanguage, useI18nextLanguageDetector } from "./middleware.mjs";
|
|
6
6
|
const initializeI18nForDetector = async (i18nInstance, options)=>{
|
|
7
7
|
const mergedDetection = mergeDetectionOptions(options.i18nextDetector, options.detection, options.localePathRedirect, options.userInitOptions);
|
|
@@ -45,7 +45,7 @@ const detectLanguageFromI18nextDetector = async (i18nInstance, options)=>{
|
|
|
45
45
|
}
|
|
46
46
|
if (detectorInstance.isInitialized && detectorInstance.language) {
|
|
47
47
|
const currentLang = detectorInstance.language;
|
|
48
|
-
if (
|
|
48
|
+
if (getSupportedLanguage(currentLang, options.languages)) return currentLang;
|
|
49
49
|
}
|
|
50
50
|
} catch (error) {} finally{
|
|
51
51
|
if (isTemporary && detectorInstance !== i18nInstance) detectorInstanceCache.set(i18nInstance, {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { mergeDetectionOptions } from "./initOptions.mjs";
|
|
2
2
|
export { cacheUserLanguage } from "./middleware.mjs";
|
|
3
3
|
export { detectLanguageWithPriority } from "./priority.mjs";
|
|
4
|
-
export { exportServerLngToWindow
|
|
4
|
+
export { exportServerLngToWindow } from "./ssr.mjs";
|
|
@@ -1,23 +1,4 @@
|
|
|
1
|
-
import { isBrowser } from "@modern-js/runtime";
|
|
2
1
|
import { mergeDetectionOptions } from "./config.mjs";
|
|
3
|
-
const buildInitOptions = (params)=>{
|
|
4
|
-
const { finalLanguage, fallbackLanguage, languages, userInitOptions, mergedDetection, mergeBackend } = params;
|
|
5
|
-
return {
|
|
6
|
-
...userInitOptions || {},
|
|
7
|
-
lng: finalLanguage,
|
|
8
|
-
fallbackLng: fallbackLanguage,
|
|
9
|
-
supportedLngs: languages,
|
|
10
|
-
detection: mergedDetection,
|
|
11
|
-
backend: mergeBackend,
|
|
12
|
-
interpolation: {
|
|
13
|
-
...userInitOptions?.interpolation || {},
|
|
14
|
-
escapeValue: userInitOptions?.interpolation?.escapeValue ?? false
|
|
15
|
-
},
|
|
16
|
-
react: {
|
|
17
|
-
useSuspense: isBrowser()
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
2
|
const initOptions_mergeDetectionOptions = (i18nextDetector, detection, localePathRedirect, userInitOptions)=>{
|
|
22
3
|
let mergedDetection;
|
|
23
4
|
mergedDetection = i18nextDetector ? mergeDetectionOptions(detection, userInitOptions?.detection) : userInitOptions?.detection || {};
|
|
@@ -25,4 +6,4 @@ const initOptions_mergeDetectionOptions = (i18nextDetector, detection, localePat
|
|
|
25
6
|
if (localePathRedirect && mergedDetection.order) mergedDetection.order = mergedDetection.order.filter((item)=>'path' !== item);
|
|
26
7
|
return mergedDetection;
|
|
27
8
|
};
|
|
28
|
-
export {
|
|
9
|
+
export { initOptions_mergeDetectionOptions as mergeDetectionOptions };
|
|
@@ -1,16 +1,7 @@
|
|
|
1
1
|
const normalizeLanguageCode = (language)=>{
|
|
2
|
-
if (!language) return language;
|
|
3
2
|
const baseLang = language.split('-')[0];
|
|
4
3
|
return baseLang;
|
|
5
4
|
};
|
|
6
|
-
const isLanguageSupported = (language, supportedLanguages)=>{
|
|
7
|
-
if (!language) return false;
|
|
8
|
-
if (0 === supportedLanguages.length) return true;
|
|
9
|
-
if (supportedLanguages.includes(language)) return true;
|
|
10
|
-
const baseLang = normalizeLanguageCode(language);
|
|
11
|
-
if (baseLang !== language && supportedLanguages.includes(baseLang)) return true;
|
|
12
|
-
return false;
|
|
13
|
-
};
|
|
14
5
|
const getSupportedLanguage = (language, supportedLanguages)=>{
|
|
15
6
|
if (!language) return;
|
|
16
7
|
if (0 === supportedLanguages.length) return language;
|
|
@@ -18,4 +9,4 @@ const getSupportedLanguage = (language, supportedLanguages)=>{
|
|
|
18
9
|
const baseLang = normalizeLanguageCode(language);
|
|
19
10
|
if (baseLang !== language && supportedLanguages.includes(baseLang)) return baseLang;
|
|
20
11
|
};
|
|
21
|
-
export { getSupportedLanguage
|
|
12
|
+
export { getSupportedLanguage };
|
|
@@ -16,7 +16,6 @@ const detectLanguageWithPriority = async (i18nInstance, options)=>{
|
|
|
16
16
|
i18nextDetector,
|
|
17
17
|
detection,
|
|
18
18
|
userInitOptions,
|
|
19
|
-
mergedBackend: options.mergedBackend,
|
|
20
19
|
ssrContext
|
|
21
20
|
});
|
|
22
21
|
const finalLanguage = detectedLanguage || userInitOptions?.lng || fallbackLanguage;
|
|
@@ -13,12 +13,6 @@ const convertToHonoLanguageDetectorOptions = (languages, fallbackLanguage, detec
|
|
|
13
13
|
'cookie',
|
|
14
14
|
'header'
|
|
15
15
|
];
|
|
16
|
-
const honoOrder = detectionOrder.map((item)=>{
|
|
17
|
-
if ('querystring' === item) return 'querystring';
|
|
18
|
-
if ('cookie' === item) return 'cookie';
|
|
19
|
-
if ('header' === item) return 'header';
|
|
20
|
-
return item;
|
|
21
|
-
});
|
|
22
16
|
const caches = false === mergedDetection.caches ? false : Array.isArray(mergedDetection.caches) && !mergedDetection.caches.includes('cookie') ? false : [
|
|
23
17
|
'cookie'
|
|
24
18
|
];
|
|
@@ -43,7 +37,7 @@ const convertToHonoLanguageDetectorOptions = (languages, fallbackLanguage, detec
|
|
|
43
37
|
fallbackLanguage
|
|
44
38
|
],
|
|
45
39
|
fallbackLanguage,
|
|
46
|
-
order:
|
|
40
|
+
order: detectionOrder,
|
|
47
41
|
lookupQueryString: mergedDetection.lookupQuerystring || DEFAULT_I18NEXT_DETECTION_OPTIONS.lookupQuerystring || 'lng',
|
|
48
42
|
lookupCookie: mergedDetection.lookupCookie || DEFAULT_I18NEXT_DETECTION_OPTIONS.lookupCookie || 'i18next',
|
|
49
43
|
lookupFromHeaderKey: mergedDetection.lookupHeader || DEFAULT_I18NEXT_DETECTION_OPTIONS.lookupHeader || 'accept-language',
|
|
@@ -2,7 +2,7 @@ import "node:module";
|
|
|
2
2
|
import { isBrowser } from "@modern-js/runtime";
|
|
3
3
|
import { buildDetectorConfigKey, createDetectorInstance, detectorInstanceCache, pickSafeDetectionOptions } from "./cache.mjs";
|
|
4
4
|
import { mergeDetectionOptions } from "./initOptions.mjs";
|
|
5
|
-
import { getSupportedLanguage
|
|
5
|
+
import { getSupportedLanguage } from "./language.mjs";
|
|
6
6
|
import { detectLanguage, useI18nextLanguageDetector } from "./middleware.mjs";
|
|
7
7
|
const initializeI18nForDetector = async (i18nInstance, options)=>{
|
|
8
8
|
const mergedDetection = mergeDetectionOptions(options.i18nextDetector, options.detection, options.localePathRedirect, options.userInitOptions);
|
|
@@ -46,7 +46,7 @@ const detectLanguageFromI18nextDetector = async (i18nInstance, options)=>{
|
|
|
46
46
|
}
|
|
47
47
|
if (detectorInstance.isInitialized && detectorInstance.language) {
|
|
48
48
|
const currentLang = detectorInstance.language;
|
|
49
|
-
if (
|
|
49
|
+
if (getSupportedLanguage(currentLang, options.languages)) return currentLang;
|
|
50
50
|
}
|
|
51
51
|
} catch (error) {} finally{
|
|
52
52
|
if (isTemporary && detectorInstance !== i18nInstance) detectorInstanceCache.set(i18nInstance, {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "node:module";
|
|
2
|
-
export {
|
|
2
|
+
export { mergeDetectionOptions } from "./initOptions.mjs";
|
|
3
3
|
export { cacheUserLanguage } from "./middleware.mjs";
|
|
4
4
|
export { detectLanguageWithPriority } from "./priority.mjs";
|
|
5
|
-
export { exportServerLngToWindow
|
|
5
|
+
export { exportServerLngToWindow } from "./ssr.mjs";
|
|
@@ -1,24 +1,5 @@
|
|
|
1
1
|
import "node:module";
|
|
2
|
-
import { isBrowser } from "@modern-js/runtime";
|
|
3
2
|
import { mergeDetectionOptions } from "./config.mjs";
|
|
4
|
-
const buildInitOptions = (params)=>{
|
|
5
|
-
const { finalLanguage, fallbackLanguage, languages, userInitOptions, mergedDetection, mergeBackend } = params;
|
|
6
|
-
return {
|
|
7
|
-
...userInitOptions || {},
|
|
8
|
-
lng: finalLanguage,
|
|
9
|
-
fallbackLng: fallbackLanguage,
|
|
10
|
-
supportedLngs: languages,
|
|
11
|
-
detection: mergedDetection,
|
|
12
|
-
backend: mergeBackend,
|
|
13
|
-
interpolation: {
|
|
14
|
-
...userInitOptions?.interpolation || {},
|
|
15
|
-
escapeValue: userInitOptions?.interpolation?.escapeValue ?? false
|
|
16
|
-
},
|
|
17
|
-
react: {
|
|
18
|
-
useSuspense: isBrowser()
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
3
|
const initOptions_mergeDetectionOptions = (i18nextDetector, detection, localePathRedirect, userInitOptions)=>{
|
|
23
4
|
let mergedDetection;
|
|
24
5
|
mergedDetection = i18nextDetector ? mergeDetectionOptions(detection, userInitOptions?.detection) : userInitOptions?.detection || {};
|
|
@@ -26,4 +7,4 @@ const initOptions_mergeDetectionOptions = (i18nextDetector, detection, localePat
|
|
|
26
7
|
if (localePathRedirect && mergedDetection.order) mergedDetection.order = mergedDetection.order.filter((item)=>'path' !== item);
|
|
27
8
|
return mergedDetection;
|
|
28
9
|
};
|
|
29
|
-
export {
|
|
10
|
+
export { initOptions_mergeDetectionOptions as mergeDetectionOptions };
|
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
import "node:module";
|
|
2
2
|
const normalizeLanguageCode = (language)=>{
|
|
3
|
-
if (!language) return language;
|
|
4
3
|
const baseLang = language.split('-')[0];
|
|
5
4
|
return baseLang;
|
|
6
5
|
};
|
|
7
|
-
const isLanguageSupported = (language, supportedLanguages)=>{
|
|
8
|
-
if (!language) return false;
|
|
9
|
-
if (0 === supportedLanguages.length) return true;
|
|
10
|
-
if (supportedLanguages.includes(language)) return true;
|
|
11
|
-
const baseLang = normalizeLanguageCode(language);
|
|
12
|
-
if (baseLang !== language && supportedLanguages.includes(baseLang)) return true;
|
|
13
|
-
return false;
|
|
14
|
-
};
|
|
15
6
|
const getSupportedLanguage = (language, supportedLanguages)=>{
|
|
16
7
|
if (!language) return;
|
|
17
8
|
if (0 === supportedLanguages.length) return language;
|
|
@@ -19,4 +10,4 @@ const getSupportedLanguage = (language, supportedLanguages)=>{
|
|
|
19
10
|
const baseLang = normalizeLanguageCode(language);
|
|
20
11
|
if (baseLang !== language && supportedLanguages.includes(baseLang)) return baseLang;
|
|
21
12
|
};
|
|
22
|
-
export { getSupportedLanguage
|
|
13
|
+
export { getSupportedLanguage };
|
|
@@ -17,7 +17,6 @@ const detectLanguageWithPriority = async (i18nInstance, options)=>{
|
|
|
17
17
|
i18nextDetector,
|
|
18
18
|
detection,
|
|
19
19
|
userInitOptions,
|
|
20
|
-
mergedBackend: options.mergedBackend,
|
|
21
20
|
ssrContext
|
|
22
21
|
});
|
|
23
22
|
const finalLanguage = detectedLanguage || userInitOptions?.lng || fallbackLanguage;
|
|
@@ -14,12 +14,6 @@ const convertToHonoLanguageDetectorOptions = (languages, fallbackLanguage, detec
|
|
|
14
14
|
'cookie',
|
|
15
15
|
'header'
|
|
16
16
|
];
|
|
17
|
-
const honoOrder = detectionOrder.map((item)=>{
|
|
18
|
-
if ('querystring' === item) return 'querystring';
|
|
19
|
-
if ('cookie' === item) return 'cookie';
|
|
20
|
-
if ('header' === item) return 'header';
|
|
21
|
-
return item;
|
|
22
|
-
});
|
|
23
17
|
const caches = false === mergedDetection.caches ? false : Array.isArray(mergedDetection.caches) && !mergedDetection.caches.includes('cookie') ? false : [
|
|
24
18
|
'cookie'
|
|
25
19
|
];
|
|
@@ -44,7 +38,7 @@ const convertToHonoLanguageDetectorOptions = (languages, fallbackLanguage, detec
|
|
|
44
38
|
fallbackLanguage
|
|
45
39
|
],
|
|
46
40
|
fallbackLanguage,
|
|
47
|
-
order:
|
|
41
|
+
order: detectionOrder,
|
|
48
42
|
lookupQueryString: mergedDetection.lookupQuerystring || DEFAULT_I18NEXT_DETECTION_OPTIONS.lookupQuerystring || 'lng',
|
|
49
43
|
lookupCookie: mergedDetection.lookupCookie || DEFAULT_I18NEXT_DETECTION_OPTIONS.lookupCookie || 'i18next',
|
|
50
44
|
lookupFromHeaderKey: mergedDetection.lookupHeader || DEFAULT_I18NEXT_DETECTION_OPTIONS.lookupHeader || 'accept-language',
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { mergeDetectionOptions } from './initOptions';
|
|
2
2
|
export { cacheUserLanguage } from './middleware';
|
|
3
3
|
export { detectLanguageWithPriority } from './priority';
|
|
4
|
-
export { exportServerLngToWindow
|
|
5
|
-
export type { BaseLanguageDetectionOptions, BuildInitOptionsParams, LanguageDetectionOptions, LanguageDetectionResult, } from './types';
|
|
4
|
+
export { exportServerLngToWindow } from './ssr';
|
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
import type { I18nInitOptions, LanguageDetectorOptions } from '../instance';
|
|
2
|
-
import type { BuildInitOptionsParams } from './types';
|
|
3
|
-
/**
|
|
4
|
-
* Build i18n initialization options
|
|
5
|
-
*/
|
|
6
|
-
export declare const buildInitOptions: (params: BuildInitOptionsParams) => I18nInitOptions;
|
|
7
2
|
/**
|
|
8
3
|
* Merge detection and backend options
|
|
9
4
|
*/
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Check if a language is supported
|
|
3
|
-
* Also checks the base language code (e.g., 'zh-CN' matches 'zh')
|
|
4
|
-
*/
|
|
5
|
-
export declare const isLanguageSupported: (language: string | undefined, supportedLanguages: string[]) => boolean;
|
|
6
1
|
/**
|
|
7
2
|
* Get the supported language that matches the given language
|
|
8
3
|
* Returns the exact match if available, otherwise returns the base language code match
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { I18nInitOptions, LanguageDetectorOptions } from '../instance';
|
|
2
2
|
export interface LanguageDetectionSsrContext {
|
|
3
3
|
request?: unknown;
|
|
4
4
|
}
|
|
@@ -9,7 +9,6 @@ export interface BaseLanguageDetectionOptions {
|
|
|
9
9
|
i18nextDetector: boolean;
|
|
10
10
|
detection?: LanguageDetectorOptions;
|
|
11
11
|
userInitOptions?: I18nInitOptions;
|
|
12
|
-
mergedBackend?: BackendOptions;
|
|
13
12
|
}
|
|
14
13
|
export interface LanguageDetectionOptions extends BaseLanguageDetectionOptions {
|
|
15
14
|
pathname: string;
|
|
@@ -19,14 +18,3 @@ export interface LanguageDetectionResult {
|
|
|
19
18
|
detectedLanguage?: string;
|
|
20
19
|
finalLanguage: string;
|
|
21
20
|
}
|
|
22
|
-
/**
|
|
23
|
-
* Options for building i18n init options
|
|
24
|
-
*/
|
|
25
|
-
export interface BuildInitOptionsParams {
|
|
26
|
-
finalLanguage: string;
|
|
27
|
-
fallbackLanguage: string;
|
|
28
|
-
languages: string[];
|
|
29
|
-
userInitOptions?: I18nInitOptions;
|
|
30
|
-
mergedDetection?: LanguageDetectorOptions;
|
|
31
|
-
mergeBackend?: BackendOptions;
|
|
32
|
-
}
|
|
@@ -5,7 +5,7 @@ import type { LanguageDetectorOptions } from '../runtime/i18n/instance';
|
|
|
5
5
|
export declare const convertToHonoLanguageDetectorOptions: (languages: string[], fallbackLanguage: string, detectionOptions?: LanguageDetectorOptions) => {
|
|
6
6
|
supportedLanguages: string[];
|
|
7
7
|
fallbackLanguage: string;
|
|
8
|
-
order: (
|
|
8
|
+
order: ('querystring' | 'cookie' | 'header' | 'path')[];
|
|
9
9
|
lookupQueryString: string;
|
|
10
10
|
lookupCookie: string;
|
|
11
11
|
lookupFromHeaderKey: string;
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"modern",
|
|
18
18
|
"modern.js"
|
|
19
19
|
],
|
|
20
|
-
"version": "3.8.1-ultramodern.
|
|
20
|
+
"version": "3.8.1-ultramodern.4",
|
|
21
21
|
"engines": {
|
|
22
22
|
"node": ">=20"
|
|
23
23
|
},
|
|
@@ -91,12 +91,12 @@
|
|
|
91
91
|
}
|
|
92
92
|
},
|
|
93
93
|
"dependencies": {
|
|
94
|
-
"@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.8.1-ultramodern.
|
|
95
|
-
"@modern-js/runtime-utils": "npm:@bleedingdev/modern-js-runtime-utils@3.8.1-ultramodern.
|
|
96
|
-
"@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.8.1-ultramodern.
|
|
97
|
-
"@modern-js/server-runtime": "npm:@bleedingdev/modern-js-server-runtime@3.8.1-ultramodern.
|
|
98
|
-
"@modern-js/types": "npm:@bleedingdev/modern-js-types@3.8.1-ultramodern.
|
|
99
|
-
"@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.8.1-ultramodern.
|
|
94
|
+
"@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.8.1-ultramodern.4",
|
|
95
|
+
"@modern-js/runtime-utils": "npm:@bleedingdev/modern-js-runtime-utils@3.8.1-ultramodern.4",
|
|
96
|
+
"@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.8.1-ultramodern.4",
|
|
97
|
+
"@modern-js/server-runtime": "npm:@bleedingdev/modern-js-server-runtime@3.8.1-ultramodern.4",
|
|
98
|
+
"@modern-js/types": "npm:@bleedingdev/modern-js-types@3.8.1-ultramodern.4",
|
|
99
|
+
"@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.8.1-ultramodern.4",
|
|
100
100
|
"@swc/helpers": "^0.5.23",
|
|
101
101
|
"i18next-browser-languagedetector": "^8.2.1",
|
|
102
102
|
"i18next-chained-backend": "^5.0.5",
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
"i18next-http-middleware": "^3.9.7"
|
|
106
106
|
},
|
|
107
107
|
"peerDependencies": {
|
|
108
|
-
"@modern-js/runtime": "3.8.1-ultramodern.
|
|
108
|
+
"@modern-js/runtime": "3.8.1-ultramodern.4",
|
|
109
109
|
"i18next": ">=25.7.4",
|
|
110
110
|
"react": ">=18",
|
|
111
111
|
"react-dom": ">=18",
|
|
@@ -120,8 +120,8 @@
|
|
|
120
120
|
}
|
|
121
121
|
},
|
|
122
122
|
"devDependencies": {
|
|
123
|
-
"@modern-js/app-tools": "npm:@bleedingdev/modern-js-app-tools@3.8.1-ultramodern.
|
|
124
|
-
"@modern-js/runtime": "npm:@bleedingdev/modern-js-runtime@3.8.1-ultramodern.
|
|
123
|
+
"@modern-js/app-tools": "npm:@bleedingdev/modern-js-app-tools@3.8.1-ultramodern.4",
|
|
124
|
+
"@modern-js/runtime": "npm:@bleedingdev/modern-js-runtime@3.8.1-ultramodern.4",
|
|
125
125
|
"@rslib/core": "0.23.2",
|
|
126
126
|
"@types/node": "^26.2.0",
|
|
127
127
|
"@typescript/native-preview": "7.0.0-dev.20260707.2",
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
|
|
11
11
|
import { mergeDetectionOptions } from './initOptions';
|
|
12
12
|
|
|
13
|
-
import { getSupportedLanguage
|
|
13
|
+
import { getSupportedLanguage } from './language';
|
|
14
14
|
|
|
15
15
|
import { detectLanguage, useI18nextLanguageDetector } from './middleware';
|
|
16
16
|
|
|
@@ -136,7 +136,7 @@ export const detectLanguageFromI18nextDetector = async (
|
|
|
136
136
|
// Fallback to instance's current language if detector didn't detect
|
|
137
137
|
if (detectorInstance.isInitialized && detectorInstance.language) {
|
|
138
138
|
const currentLang = detectorInstance.language;
|
|
139
|
-
if (
|
|
139
|
+
if (getSupportedLanguage(currentLang, options.languages)) {
|
|
140
140
|
return currentLang;
|
|
141
141
|
}
|
|
142
142
|
}
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { mergeDetectionOptions } from './initOptions';
|
|
2
2
|
export { cacheUserLanguage } from './middleware';
|
|
3
3
|
export { detectLanguageWithPriority } from './priority';
|
|
4
|
-
export { exportServerLngToWindow
|
|
5
|
-
export type {
|
|
6
|
-
BaseLanguageDetectionOptions,
|
|
7
|
-
BuildInitOptionsParams,
|
|
8
|
-
LanguageDetectionOptions,
|
|
9
|
-
LanguageDetectionResult,
|
|
10
|
-
} from './types';
|
|
4
|
+
export { exportServerLngToWindow } from './ssr';
|
|
@@ -1,42 +1,7 @@
|
|
|
1
|
-
import { isBrowser } from '@modern-js/runtime';
|
|
2
1
|
import type { I18nInitOptions, LanguageDetectorOptions } from '../instance';
|
|
3
2
|
|
|
4
3
|
import { mergeDetectionOptions as mergeDetectionOptionsUtil } from './config';
|
|
5
4
|
|
|
6
|
-
import type { BuildInitOptionsParams } from './types';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Build i18n initialization options
|
|
10
|
-
*/
|
|
11
|
-
export const buildInitOptions = (
|
|
12
|
-
params: BuildInitOptionsParams,
|
|
13
|
-
): I18nInitOptions => {
|
|
14
|
-
const {
|
|
15
|
-
finalLanguage,
|
|
16
|
-
fallbackLanguage,
|
|
17
|
-
languages,
|
|
18
|
-
userInitOptions,
|
|
19
|
-
mergedDetection,
|
|
20
|
-
mergeBackend,
|
|
21
|
-
} = params;
|
|
22
|
-
|
|
23
|
-
return {
|
|
24
|
-
...(userInitOptions || {}),
|
|
25
|
-
lng: finalLanguage,
|
|
26
|
-
fallbackLng: fallbackLanguage,
|
|
27
|
-
supportedLngs: languages,
|
|
28
|
-
detection: mergedDetection,
|
|
29
|
-
backend: mergeBackend,
|
|
30
|
-
interpolation: {
|
|
31
|
-
...(userInitOptions?.interpolation || {}),
|
|
32
|
-
escapeValue: userInitOptions?.interpolation?.escapeValue ?? false,
|
|
33
|
-
},
|
|
34
|
-
react: {
|
|
35
|
-
useSuspense: isBrowser(),
|
|
36
|
-
},
|
|
37
|
-
} as any;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
5
|
/**
|
|
41
6
|
* Merge detection and backend options
|
|
42
7
|
*/
|
|
@@ -2,40 +2,11 @@
|
|
|
2
2
|
* Normalize language code (e.g., 'zh-CN' -> 'zh', 'en-US' -> 'en')
|
|
3
3
|
*/
|
|
4
4
|
const normalizeLanguageCode = (language: string): string => {
|
|
5
|
-
if (!language) {
|
|
6
|
-
return language;
|
|
7
|
-
}
|
|
8
5
|
// Extract base language code (before hyphen)
|
|
9
6
|
const baseLang = language.split('-')[0];
|
|
10
7
|
return baseLang;
|
|
11
8
|
};
|
|
12
9
|
|
|
13
|
-
/**
|
|
14
|
-
* Check if a language is supported
|
|
15
|
-
* Also checks the base language code (e.g., 'zh-CN' matches 'zh')
|
|
16
|
-
*/
|
|
17
|
-
export const isLanguageSupported = (
|
|
18
|
-
language: string | undefined,
|
|
19
|
-
supportedLanguages: string[],
|
|
20
|
-
): boolean => {
|
|
21
|
-
if (!language) {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
if (supportedLanguages.length === 0) {
|
|
25
|
-
return true;
|
|
26
|
-
}
|
|
27
|
-
// Check exact match first
|
|
28
|
-
if (supportedLanguages.includes(language)) {
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
// Check base language code match (e.g., 'zh-CN' matches 'zh')
|
|
32
|
-
const baseLang = normalizeLanguageCode(language);
|
|
33
|
-
if (baseLang !== language && supportedLanguages.includes(baseLang)) {
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
return false;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
10
|
/**
|
|
40
11
|
* Get the supported language that matches the given language
|
|
41
12
|
* Returns the exact match if available, otherwise returns the base language code match
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
BackendOptions,
|
|
3
|
-
I18nInitOptions,
|
|
4
|
-
LanguageDetectorOptions,
|
|
5
|
-
} from '../instance';
|
|
1
|
+
import type { I18nInitOptions, LanguageDetectorOptions } from '../instance';
|
|
6
2
|
|
|
7
3
|
export interface LanguageDetectionSsrContext {
|
|
8
4
|
request?: unknown;
|
|
@@ -15,7 +11,6 @@ export interface BaseLanguageDetectionOptions {
|
|
|
15
11
|
i18nextDetector: boolean;
|
|
16
12
|
detection?: LanguageDetectorOptions;
|
|
17
13
|
userInitOptions?: I18nInitOptions;
|
|
18
|
-
mergedBackend?: BackendOptions;
|
|
19
14
|
}
|
|
20
15
|
|
|
21
16
|
export interface LanguageDetectionOptions extends BaseLanguageDetectionOptions {
|
|
@@ -27,15 +22,3 @@ export interface LanguageDetectionResult {
|
|
|
27
22
|
detectedLanguage?: string;
|
|
28
23
|
finalLanguage: string;
|
|
29
24
|
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Options for building i18n init options
|
|
33
|
-
*/
|
|
34
|
-
export interface BuildInitOptionsParams {
|
|
35
|
-
finalLanguage: string;
|
|
36
|
-
fallbackLanguage: string;
|
|
37
|
-
languages: string[];
|
|
38
|
-
userInitOptions?: I18nInitOptions;
|
|
39
|
-
mergedDetection?: LanguageDetectorOptions;
|
|
40
|
-
mergeBackend?: BackendOptions;
|
|
41
|
-
}
|
|
@@ -29,15 +29,6 @@ export const convertToHonoLanguageDetectorOptions = (
|
|
|
29
29
|
const detectionOrder =
|
|
30
30
|
order.length > 0 ? order : ['querystring', 'cookie', 'header'];
|
|
31
31
|
|
|
32
|
-
// Map i18next order to hono order
|
|
33
|
-
const honoOrder = detectionOrder.map(item => {
|
|
34
|
-
// Map 'querystring' to 'querystring', 'cookie' to 'cookie', 'header' to 'header'
|
|
35
|
-
if (item === 'querystring') return 'querystring';
|
|
36
|
-
if (item === 'cookie') return 'cookie';
|
|
37
|
-
if (item === 'header') return 'header';
|
|
38
|
-
return item;
|
|
39
|
-
}) as ('querystring' | 'cookie' | 'header' | 'path')[];
|
|
40
|
-
|
|
41
32
|
// Determine caches option
|
|
42
33
|
// hono languageDetector expects: false | "cookie"[] | undefined
|
|
43
34
|
const caches: false | ['cookie'] | undefined =
|
|
@@ -85,7 +76,7 @@ export const convertToHonoLanguageDetectorOptions = (
|
|
|
85
76
|
return {
|
|
86
77
|
supportedLanguages: languages.length > 0 ? languages : [fallbackLanguage],
|
|
87
78
|
fallbackLanguage,
|
|
88
|
-
order:
|
|
79
|
+
order: detectionOrder as ('querystring' | 'cookie' | 'header' | 'path')[],
|
|
89
80
|
lookupQueryString:
|
|
90
81
|
mergedDetection.lookupQuerystring ||
|
|
91
82
|
DEFAULT_I18NEXT_DETECTION_OPTIONS.lookupQuerystring ||
|