@intlayer/core 7.3.11 → 7.3.13
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/index.cjs +2 -2
- package/dist/cjs/localization/getBrowserLocale.cjs +1 -1
- package/dist/cjs/localization/getLocale.cjs +7 -3
- package/dist/cjs/localization/getLocale.cjs.map +1 -1
- package/dist/cjs/localization/localeDetector.cjs +1 -0
- package/dist/cjs/localization/localeDetector.cjs.map +1 -1
- package/dist/esm/index.mjs +2 -2
- package/dist/esm/localization/getBrowserLocale.mjs +1 -1
- package/dist/esm/localization/getLocale.mjs +8 -4
- package/dist/esm/localization/getLocale.mjs.map +1 -1
- package/dist/esm/localization/localeDetector.mjs +1 -1
- package/dist/esm/localization/localeDetector.mjs.map +1 -1
- package/dist/types/deepTransformPlugins/getFilterMissingTranslationsContent.d.ts +7 -7
- package/dist/types/deepTransformPlugins/getFilterMissingTranslationsContent.d.ts.map +1 -1
- package/dist/types/deepTransformPlugins/getFilteredLocalesContent.d.ts +7 -7
- package/dist/types/deepTransformPlugins/getFilteredLocalesContent.d.ts.map +1 -1
- package/dist/types/interpreter/getContent/plugins.d.ts.map +1 -1
- package/dist/types/localization/getLocale.d.ts +0 -1
- package/dist/types/localization/getLocale.d.ts.map +1 -1
- package/dist/types/localization/localeDetector.d.ts +6 -1
- package/dist/types/localization/localeDetector.d.ts.map +1 -1
- package/package.json +7 -7
package/dist/cjs/index.cjs
CHANGED
|
@@ -50,11 +50,11 @@ const require_formatters_number = require('./formatters/number.cjs');
|
|
|
50
50
|
const require_formatters_percentage = require('./formatters/percentage.cjs');
|
|
51
51
|
const require_formatters_relativeTime = require('./formatters/relativeTime.cjs');
|
|
52
52
|
const require_formatters_units = require('./formatters/units.cjs');
|
|
53
|
+
const require_localization_localeResolver = require('./localization/localeResolver.cjs');
|
|
54
|
+
const require_localization_localeDetector = require('./localization/localeDetector.cjs');
|
|
53
55
|
const require_localization_getLocale = require('./localization/getLocale.cjs');
|
|
54
56
|
const require_utils_getCookie = require('./utils/getCookie.cjs');
|
|
55
57
|
const require_utils_localeStorage = require('./utils/localeStorage.cjs');
|
|
56
|
-
const require_localization_localeResolver = require('./localization/localeResolver.cjs');
|
|
57
|
-
const require_localization_localeDetector = require('./localization/localeDetector.cjs');
|
|
58
58
|
const require_localization_getBrowserLocale = require('./localization/getBrowserLocale.cjs');
|
|
59
59
|
const require_localization_getHTMLTextDir = require('./localization/getHTMLTextDir.cjs');
|
|
60
60
|
const require_utils_checkIsURLAbsolute = require('./utils/checkIsURLAbsolute.cjs');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
2
|
-
const require_utils_localeStorage = require('../utils/localeStorage.cjs');
|
|
3
2
|
const require_localization_localeDetector = require('./localeDetector.cjs');
|
|
3
|
+
const require_utils_localeStorage = require('../utils/localeStorage.cjs');
|
|
4
4
|
let __intlayer_types = require("@intlayer/types");
|
|
5
5
|
let __intlayer_config_built = require("@intlayer/config/built");
|
|
6
6
|
__intlayer_config_built = require_rolldown_runtime.__toESM(__intlayer_config_built);
|
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
2
|
-
|
|
2
|
+
const require_localization_localeDetector = require('./localeDetector.cjs');
|
|
3
|
+
let __intlayer_config_client = require("@intlayer/config/client");
|
|
3
4
|
let __intlayer_config_built = require("@intlayer/config/built");
|
|
4
5
|
__intlayer_config_built = require_rolldown_runtime.__toESM(__intlayer_config_built);
|
|
5
6
|
let __intlayer_core = require("@intlayer/core");
|
|
6
7
|
|
|
7
8
|
//#region src/localization/getLocale.ts
|
|
8
9
|
const getLocale = async (ctx = {}) => {
|
|
9
|
-
const defaultLocale = __intlayer_config_built.default?.internationalization?.defaultLocale ??
|
|
10
|
+
const defaultLocale = __intlayer_config_built.default?.internationalization?.defaultLocale ?? __intlayer_config_client.DefaultValues.Internationalization.DEFAULT_LOCALE;
|
|
11
|
+
const availableLocales = __intlayer_config_built.default?.internationalization?.locales ?? __intlayer_config_client.DefaultValues.Internationalization.LOCALES;
|
|
10
12
|
const storedLocale = (0, __intlayer_core.getLocaleFromStorage)({
|
|
11
13
|
getCookie: ctx.getCookie,
|
|
12
14
|
getHeader: ctx.getHeader
|
|
13
15
|
});
|
|
14
16
|
if (storedLocale) return storedLocale;
|
|
15
|
-
const
|
|
17
|
+
const acceptLanguageHeader = ctx.getHeader?.("accept-language");
|
|
18
|
+
if (!acceptLanguageHeader) return defaultLocale;
|
|
19
|
+
const userFallbackLocale = (0, __intlayer_core.localeResolver)(require_localization_localeDetector.getPreferredLanguages(acceptLanguageHeader, availableLocales), availableLocales, defaultLocale);
|
|
16
20
|
if (userFallbackLocale) return userFallbackLocale;
|
|
17
21
|
return defaultLocale;
|
|
18
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLocale.cjs","names":["configuration","
|
|
1
|
+
{"version":3,"file":"getLocale.cjs","names":["configuration","DefaultValues","getPreferredLanguages"],"sources":["../../../src/localization/getLocale.ts"],"sourcesContent":["import configuration from '@intlayer/config/built';\nimport { DefaultValues } from '@intlayer/config/client';\nimport { getLocaleFromStorage, localeResolver } from '@intlayer/core';\nimport type { Locale } from '@intlayer/types';\nimport { getPreferredLanguages } from './localeDetector';\n\nexport type RequestContext = {\n getHeader?: (name: string) => string | null | undefined;\n getCookie?: (name: string) => string | null | undefined;\n};\n\nexport const getLocale = async (ctx: RequestContext = {}): Promise<Locale> => {\n const defaultLocale =\n configuration?.internationalization?.defaultLocale ??\n DefaultValues.Internationalization.DEFAULT_LOCALE;\n const availableLocales =\n configuration?.internationalization?.locales ??\n DefaultValues.Internationalization.LOCALES;\n\n // Try locale from storage (cookie or header)\n const storedLocale = getLocaleFromStorage({\n getCookie: ctx.getCookie,\n getHeader: ctx.getHeader,\n });\n\n if (storedLocale) {\n return storedLocale;\n }\n\n // Fallback to Accept-Language negotiation\n const acceptLanguageHeader = ctx.getHeader?.('accept-language');\n\n if (!acceptLanguageHeader) {\n return defaultLocale;\n }\n\n const preferredLocaleStrings = getPreferredLanguages(\n acceptLanguageHeader,\n availableLocales\n );\n\n const userFallbackLocale = localeResolver(\n preferredLocaleStrings,\n availableLocales,\n defaultLocale\n );\n\n if (userFallbackLocale) {\n return userFallbackLocale;\n }\n\n // Default locale\n return defaultLocale;\n};\n"],"mappings":";;;;;;;;AAWA,MAAa,YAAY,OAAO,MAAsB,EAAE,KAAsB;CAC5E,MAAM,gBACJA,iCAAe,sBAAsB,iBACrCC,uCAAc,qBAAqB;CACrC,MAAM,mBACJD,iCAAe,sBAAsB,WACrCC,uCAAc,qBAAqB;CAGrC,MAAM,yDAAoC;EACxC,WAAW,IAAI;EACf,WAAW,IAAI;EAChB,CAAC;AAEF,KAAI,aACF,QAAO;CAIT,MAAM,uBAAuB,IAAI,YAAY,kBAAkB;AAE/D,KAAI,CAAC,qBACH,QAAO;CAQT,MAAM,yDALyBC,0DAC7B,sBACA,iBACD,EAIC,kBACA,cACD;AAED,KAAI,mBACF,QAAO;AAIT,QAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localeDetector.cjs","names":["preferences: LanguagePreference[]","bestMatch: MatchResult","localeResolver"],"sources":["../../../src/localization/localeDetector.ts"],"sourcesContent":["import type { Locale } from '@intlayer/types';\nimport { localeResolver } from './localeResolver';\n\n/**\n * Constants\n */\nconst LANGUAGE_FORMAT_REGULAR_EXPRESSION =\n /^\\s*([^\\s\\-;]+)(?:-([^\\s;]+))?\\s*(?:;(.*))?$/;\nconst DEFAULT_QUALITY_SCORE = 1;\n\n/**\n * Enumeration for specificity weights.\n * Higher values indicate a more precise match.\n */\nenum SpecificityWeight {\n None = 0,\n Broad = 1, // Matches prefix (e.g., 'en' matches 'en-US')\n Prefix = 2, // Matches prefix in reverse (e.g., 'en-US' matches 'en')\n Exact = 4, // Matches exact string (e.g., 'en-US' matches 'en-US')\n}\n\n/**\n * Represents a parsed language tag from the header.\n */\ntype LanguagePreference = {\n languageCode: string;\n regionCode?: string;\n fullLocale: string;\n qualityScore: number;\n originalIndex: number;\n};\n\n/**\n * Represents the result of matching a requested language against an available language.\n */\ntype MatchResult = {\n providedIndex: number;\n headerIndex: number;\n qualityScore: number;\n specificityScore: number;\n};\n\n/**\n * Parses a single language tag string from the Accept-Language header.\n * Example input: \"en-US;q=0.8\"\n */\nconst parseLanguageTag = (\n tagString: string,\n index: number\n): LanguagePreference | null => {\n const match = LANGUAGE_FORMAT_REGULAR_EXPRESSION.exec(tagString);\n if (!match) {\n return null;\n }\n\n const languageCode = match[1];\n const regionCode = match[2];\n const parameters = match[3];\n\n // Construct the full locale string (e.g., \"en-US\" or \"en\")\n const fullLocale = regionCode\n ? `${languageCode}-${regionCode}`\n : languageCode;\n\n let qualityScore = DEFAULT_QUALITY_SCORE;\n\n // Parse parameters to find the quality score (\"q\")\n if (parameters) {\n const parameterList = parameters.split(';');\n for (const parameter of parameterList) {\n const [key, value] = parameter.split('=');\n if (key === 'q') {\n qualityScore = parseFloat(value);\n }\n }\n }\n\n return {\n languageCode,\n regionCode,\n qualityScore,\n originalIndex: index,\n fullLocale,\n };\n};\n\n/**\n * Parses the entire Accept-Language header string into a list of preferences.\n */\nconst parseAcceptLanguageHeader = (\n headerValue: string\n): LanguagePreference[] => {\n const rawTags = headerValue.split(',');\n const preferences: LanguagePreference[] = [];\n\n for (let index = 0; index < rawTags.length; index++) {\n const tag = rawTags[index].trim();\n const parsedLanguage = parseLanguageTag(tag, index);\n\n if (parsedLanguage) {\n preferences.push(parsedLanguage);\n }\n }\n\n return preferences;\n};\n\n/**\n * Calculates the specificity of a match between a provided language and a requested preference.\n */\nconst calculateMatchSpecificity = (\n providedLanguage: string,\n preference: LanguagePreference,\n providedIndex: number\n): MatchResult | null => {\n const parsedProvided = parseLanguageTag(providedLanguage, providedIndex);\n if (!parsedProvided) {\n return null;\n }\n\n let specificityScore = SpecificityWeight.None;\n\n const preferenceFullLower = preference.fullLocale.toLowerCase();\n const preferencePrefixLower = preference.languageCode.toLowerCase();\n const providedFullLower = parsedProvided.fullLocale.toLowerCase();\n const providedPrefixLower = parsedProvided.languageCode.toLowerCase();\n\n if (preferenceFullLower === providedFullLower) {\n specificityScore |= SpecificityWeight.Exact;\n } else if (preferencePrefixLower === providedFullLower) {\n specificityScore |= SpecificityWeight.Prefix;\n } else if (preferenceFullLower === providedPrefixLower) {\n specificityScore |= SpecificityWeight.Broad;\n } else if (preference.fullLocale !== '*') {\n return null;\n }\n\n return {\n providedIndex,\n headerIndex: preference.originalIndex,\n qualityScore: preference.qualityScore,\n specificityScore,\n };\n};\n\n/**\n * Determines the best match for a specific available language against the list of user accepted languages.\n */\nconst getBestMatchForLanguage = (\n providedLanguage: string,\n acceptedPreferences: LanguagePreference[],\n providedIndex: number\n): MatchResult => {\n // Initialize with a non-match priority\n let bestMatch: MatchResult = {\n headerIndex: -1,\n qualityScore: 0,\n specificityScore: 0,\n providedIndex,\n };\n\n for (const preference of acceptedPreferences) {\n const matchSpec = calculateMatchSpecificity(\n providedLanguage,\n preference,\n providedIndex\n );\n\n if (matchSpec) {\n // Compare current best match with new match\n const scoreDifference =\n bestMatch.specificityScore - matchSpec.specificityScore ||\n bestMatch.qualityScore - matchSpec.qualityScore ||\n bestMatch.headerIndex - matchSpec.headerIndex;\n\n // If the new match is better (difference < 0), update priority\n if (scoreDifference < 0) {\n bestMatch = matchSpec;\n }\n }\n }\n\n return bestMatch;\n};\n\n/**\n * Comparator function to sort language matches.\n * Sorting order:\n * 1. Quality Score (Descending)\n * 2. Specificity Score (Descending)\n * 3. Order in Header (Ascending - lower index is better)\n * 4. Order in Provided List (Ascending)\n */\nconst compareMatchResults = (a: MatchResult, b: MatchResult): number => {\n return (\n b.qualityScore - a.qualityScore ||\n b.specificityScore - a.specificityScore ||\n a.headerIndex - b.headerIndex ||\n a.providedIndex - b.providedIndex ||\n 0\n );\n};\n\n/**\n * Derives the list of preferred languages based on the Accept-Language header\n * and an optional list of available languages.\n */\
|
|
1
|
+
{"version":3,"file":"localeDetector.cjs","names":["preferences: LanguagePreference[]","bestMatch: MatchResult","localeResolver"],"sources":["../../../src/localization/localeDetector.ts"],"sourcesContent":["import type { Locale } from '@intlayer/types';\nimport { localeResolver } from './localeResolver';\n\n/**\n * Constants\n */\nconst LANGUAGE_FORMAT_REGULAR_EXPRESSION =\n /^\\s*([^\\s\\-;]+)(?:-([^\\s;]+))?\\s*(?:;(.*))?$/;\nconst DEFAULT_QUALITY_SCORE = 1;\n\n/**\n * Enumeration for specificity weights.\n * Higher values indicate a more precise match.\n */\nenum SpecificityWeight {\n None = 0,\n Broad = 1, // Matches prefix (e.g., 'en' matches 'en-US')\n Prefix = 2, // Matches prefix in reverse (e.g., 'en-US' matches 'en')\n Exact = 4, // Matches exact string (e.g., 'en-US' matches 'en-US')\n}\n\n/**\n * Represents a parsed language tag from the header.\n */\ntype LanguagePreference = {\n languageCode: string;\n regionCode?: string;\n fullLocale: string;\n qualityScore: number;\n originalIndex: number;\n};\n\n/**\n * Represents the result of matching a requested language against an available language.\n */\ntype MatchResult = {\n providedIndex: number;\n headerIndex: number;\n qualityScore: number;\n specificityScore: number;\n};\n\n/**\n * Parses a single language tag string from the Accept-Language header.\n * Example input: \"en-US;q=0.8\"\n */\nconst parseLanguageTag = (\n tagString: string,\n index: number\n): LanguagePreference | null => {\n const match = LANGUAGE_FORMAT_REGULAR_EXPRESSION.exec(tagString);\n if (!match) {\n return null;\n }\n\n const languageCode = match[1];\n const regionCode = match[2];\n const parameters = match[3];\n\n // Construct the full locale string (e.g., \"en-US\" or \"en\")\n const fullLocale = regionCode\n ? `${languageCode}-${regionCode}`\n : languageCode;\n\n let qualityScore = DEFAULT_QUALITY_SCORE;\n\n // Parse parameters to find the quality score (\"q\")\n if (parameters) {\n const parameterList = parameters.split(';');\n for (const parameter of parameterList) {\n const [key, value] = parameter.split('=');\n if (key === 'q') {\n qualityScore = parseFloat(value);\n }\n }\n }\n\n return {\n languageCode,\n regionCode,\n qualityScore,\n originalIndex: index,\n fullLocale,\n };\n};\n\n/**\n * Parses the entire Accept-Language header string into a list of preferences.\n */\nconst parseAcceptLanguageHeader = (\n headerValue: string\n): LanguagePreference[] => {\n const rawTags = headerValue.split(',');\n const preferences: LanguagePreference[] = [];\n\n for (let index = 0; index < rawTags.length; index++) {\n const tag = rawTags[index].trim();\n const parsedLanguage = parseLanguageTag(tag, index);\n\n if (parsedLanguage) {\n preferences.push(parsedLanguage);\n }\n }\n\n return preferences;\n};\n\n/**\n * Calculates the specificity of a match between a provided language and a requested preference.\n */\nconst calculateMatchSpecificity = (\n providedLanguage: string,\n preference: LanguagePreference,\n providedIndex: number\n): MatchResult | null => {\n const parsedProvided = parseLanguageTag(providedLanguage, providedIndex);\n if (!parsedProvided) {\n return null;\n }\n\n let specificityScore = SpecificityWeight.None;\n\n const preferenceFullLower = preference.fullLocale.toLowerCase();\n const preferencePrefixLower = preference.languageCode.toLowerCase();\n const providedFullLower = parsedProvided.fullLocale.toLowerCase();\n const providedPrefixLower = parsedProvided.languageCode.toLowerCase();\n\n if (preferenceFullLower === providedFullLower) {\n specificityScore |= SpecificityWeight.Exact;\n } else if (preferencePrefixLower === providedFullLower) {\n specificityScore |= SpecificityWeight.Prefix;\n } else if (preferenceFullLower === providedPrefixLower) {\n specificityScore |= SpecificityWeight.Broad;\n } else if (preference.fullLocale !== '*') {\n return null;\n }\n\n return {\n providedIndex,\n headerIndex: preference.originalIndex,\n qualityScore: preference.qualityScore,\n specificityScore,\n };\n};\n\n/**\n * Determines the best match for a specific available language against the list of user accepted languages.\n */\nconst getBestMatchForLanguage = (\n providedLanguage: string,\n acceptedPreferences: LanguagePreference[],\n providedIndex: number\n): MatchResult => {\n // Initialize with a non-match priority\n let bestMatch: MatchResult = {\n headerIndex: -1,\n qualityScore: 0,\n specificityScore: 0,\n providedIndex,\n };\n\n for (const preference of acceptedPreferences) {\n const matchSpec = calculateMatchSpecificity(\n providedLanguage,\n preference,\n providedIndex\n );\n\n if (matchSpec) {\n // Compare current best match with new match\n const scoreDifference =\n bestMatch.specificityScore - matchSpec.specificityScore ||\n bestMatch.qualityScore - matchSpec.qualityScore ||\n bestMatch.headerIndex - matchSpec.headerIndex;\n\n // If the new match is better (difference < 0), update priority\n if (scoreDifference < 0) {\n bestMatch = matchSpec;\n }\n }\n }\n\n return bestMatch;\n};\n\n/**\n * Comparator function to sort language matches.\n * Sorting order:\n * 1. Quality Score (Descending)\n * 2. Specificity Score (Descending)\n * 3. Order in Header (Ascending - lower index is better)\n * 4. Order in Provided List (Ascending)\n */\nconst compareMatchResults = (a: MatchResult, b: MatchResult): number => {\n return (\n b.qualityScore - a.qualityScore ||\n b.specificityScore - a.specificityScore ||\n a.headerIndex - b.headerIndex ||\n a.providedIndex - b.providedIndex ||\n 0\n );\n};\n\n/**\n * Derives the list of preferred languages based on the Accept-Language header\n * and an optional list of available languages.\n */\nexport const getPreferredLanguages = (\n acceptHeader: string | undefined,\n availableLanguages?: string[]\n): string[] => {\n // RFC 2616 sec 14.4: no header implies '*'\n const headerValue = acceptHeader === undefined ? '*' : acceptHeader || '';\n const acceptedPreferences = parseAcceptLanguageHeader(headerValue);\n\n // If no specific languages are provided to filter against, return the header languages sorted by quality\n if (!availableLanguages) {\n return acceptedPreferences\n .filter((preference) => preference.qualityScore > 0)\n .sort((a, b) => b.qualityScore - a.qualityScore) // Simple sort by quality\n .map((preference) => preference.fullLocale);\n }\n\n // Map available languages to their match priority against the header\n const matchResults = availableLanguages.map((language, index) =>\n getBestMatchForLanguage(language, acceptedPreferences, index)\n );\n\n return matchResults\n .filter((result) => result.qualityScore > 0)\n .sort(compareMatchResults)\n .map((result) => availableLanguages[result.providedIndex]);\n};\n\n/**\n * Detects the locale from the request headers.\n *\n * Headers are provided by the browser/client and can be used to determine the user's preferred language.\n * This function intersects the user's `Accept-Language` header with the application's available locales.\n */\nexport const localeDetector = (\n headers: Record<string, string | undefined>,\n availableLocales?: Locale[],\n defaultLocale?: Locale\n): Locale => {\n const acceptLanguageHeader = headers['accept-language'];\n\n const preferredLocaleStrings = getPreferredLanguages(\n acceptLanguageHeader,\n availableLocales as string[]\n );\n\n return localeResolver(\n preferredLocaleStrings as Locale[],\n availableLocales,\n defaultLocale\n );\n};\n"],"mappings":"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"}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -50,11 +50,11 @@ import { number } from "./formatters/number.mjs";
|
|
|
50
50
|
import { percentage } from "./formatters/percentage.mjs";
|
|
51
51
|
import { relativeTime } from "./formatters/relativeTime.mjs";
|
|
52
52
|
import { units } from "./formatters/units.mjs";
|
|
53
|
+
import { localeResolver } from "./localization/localeResolver.mjs";
|
|
54
|
+
import { localeDetector } from "./localization/localeDetector.mjs";
|
|
53
55
|
import { getLocale } from "./localization/getLocale.mjs";
|
|
54
56
|
import { getCookie } from "./utils/getCookie.mjs";
|
|
55
57
|
import { LocaleStorage, getLocaleFromStorage, setLocaleInStorage } from "./utils/localeStorage.mjs";
|
|
56
|
-
import { localeResolver } from "./localization/localeResolver.mjs";
|
|
57
|
-
import { localeDetector } from "./localization/localeDetector.mjs";
|
|
58
58
|
import { getBrowserLocale, localeStorageOptions } from "./localization/getBrowserLocale.mjs";
|
|
59
59
|
import { getHTMLTextDir } from "./localization/getHTMLTextDir.mjs";
|
|
60
60
|
import { checkIsURLAbsolute } from "./utils/checkIsURLAbsolute.mjs";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { getLocaleFromStorage } from "../utils/localeStorage.mjs";
|
|
2
1
|
import { localeDetector } from "./localeDetector.mjs";
|
|
2
|
+
import { getLocaleFromStorage } from "../utils/localeStorage.mjs";
|
|
3
3
|
import { Locales } from "@intlayer/types";
|
|
4
4
|
import configuration from "@intlayer/config/built";
|
|
5
5
|
|
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getPreferredLanguages } from "./localeDetector.mjs";
|
|
2
|
+
import { DefaultValues } from "@intlayer/config/client";
|
|
2
3
|
import configuration from "@intlayer/config/built";
|
|
3
|
-
import { getLocaleFromStorage,
|
|
4
|
+
import { getLocaleFromStorage, localeResolver } from "@intlayer/core";
|
|
4
5
|
|
|
5
6
|
//#region src/localization/getLocale.ts
|
|
6
7
|
const getLocale = async (ctx = {}) => {
|
|
7
|
-
const defaultLocale = configuration?.internationalization?.defaultLocale ??
|
|
8
|
+
const defaultLocale = configuration?.internationalization?.defaultLocale ?? DefaultValues.Internationalization.DEFAULT_LOCALE;
|
|
9
|
+
const availableLocales = configuration?.internationalization?.locales ?? DefaultValues.Internationalization.LOCALES;
|
|
8
10
|
const storedLocale = getLocaleFromStorage({
|
|
9
11
|
getCookie: ctx.getCookie,
|
|
10
12
|
getHeader: ctx.getHeader
|
|
11
13
|
});
|
|
12
14
|
if (storedLocale) return storedLocale;
|
|
13
|
-
const
|
|
15
|
+
const acceptLanguageHeader = ctx.getHeader?.("accept-language");
|
|
16
|
+
if (!acceptLanguageHeader) return defaultLocale;
|
|
17
|
+
const userFallbackLocale = localeResolver(getPreferredLanguages(acceptLanguageHeader, availableLocales), availableLocales, defaultLocale);
|
|
14
18
|
if (userFallbackLocale) return userFallbackLocale;
|
|
15
19
|
return defaultLocale;
|
|
16
20
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLocale.mjs","names":[],"sources":["../../../src/localization/getLocale.ts"],"sourcesContent":["import configuration from '@intlayer/config/built';\nimport { getLocaleFromStorage,
|
|
1
|
+
{"version":3,"file":"getLocale.mjs","names":[],"sources":["../../../src/localization/getLocale.ts"],"sourcesContent":["import configuration from '@intlayer/config/built';\nimport { DefaultValues } from '@intlayer/config/client';\nimport { getLocaleFromStorage, localeResolver } from '@intlayer/core';\nimport type { Locale } from '@intlayer/types';\nimport { getPreferredLanguages } from './localeDetector';\n\nexport type RequestContext = {\n getHeader?: (name: string) => string | null | undefined;\n getCookie?: (name: string) => string | null | undefined;\n};\n\nexport const getLocale = async (ctx: RequestContext = {}): Promise<Locale> => {\n const defaultLocale =\n configuration?.internationalization?.defaultLocale ??\n DefaultValues.Internationalization.DEFAULT_LOCALE;\n const availableLocales =\n configuration?.internationalization?.locales ??\n DefaultValues.Internationalization.LOCALES;\n\n // Try locale from storage (cookie or header)\n const storedLocale = getLocaleFromStorage({\n getCookie: ctx.getCookie,\n getHeader: ctx.getHeader,\n });\n\n if (storedLocale) {\n return storedLocale;\n }\n\n // Fallback to Accept-Language negotiation\n const acceptLanguageHeader = ctx.getHeader?.('accept-language');\n\n if (!acceptLanguageHeader) {\n return defaultLocale;\n }\n\n const preferredLocaleStrings = getPreferredLanguages(\n acceptLanguageHeader,\n availableLocales\n );\n\n const userFallbackLocale = localeResolver(\n preferredLocaleStrings,\n availableLocales,\n defaultLocale\n );\n\n if (userFallbackLocale) {\n return userFallbackLocale;\n }\n\n // Default locale\n return defaultLocale;\n};\n"],"mappings":";;;;;;AAWA,MAAa,YAAY,OAAO,MAAsB,EAAE,KAAsB;CAC5E,MAAM,gBACJ,eAAe,sBAAsB,iBACrC,cAAc,qBAAqB;CACrC,MAAM,mBACJ,eAAe,sBAAsB,WACrC,cAAc,qBAAqB;CAGrC,MAAM,eAAe,qBAAqB;EACxC,WAAW,IAAI;EACf,WAAW,IAAI;EAChB,CAAC;AAEF,KAAI,aACF,QAAO;CAIT,MAAM,uBAAuB,IAAI,YAAY,kBAAkB;AAE/D,KAAI,CAAC,qBACH,QAAO;CAQT,MAAM,qBAAqB,eALI,sBAC7B,sBACA,iBACD,EAIC,kBACA,cACD;AAED,KAAI,mBACF,QAAO;AAIT,QAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localeDetector.mjs","names":["preferences: LanguagePreference[]","bestMatch: MatchResult"],"sources":["../../../src/localization/localeDetector.ts"],"sourcesContent":["import type { Locale } from '@intlayer/types';\nimport { localeResolver } from './localeResolver';\n\n/**\n * Constants\n */\nconst LANGUAGE_FORMAT_REGULAR_EXPRESSION =\n /^\\s*([^\\s\\-;]+)(?:-([^\\s;]+))?\\s*(?:;(.*))?$/;\nconst DEFAULT_QUALITY_SCORE = 1;\n\n/**\n * Enumeration for specificity weights.\n * Higher values indicate a more precise match.\n */\nenum SpecificityWeight {\n None = 0,\n Broad = 1, // Matches prefix (e.g., 'en' matches 'en-US')\n Prefix = 2, // Matches prefix in reverse (e.g., 'en-US' matches 'en')\n Exact = 4, // Matches exact string (e.g., 'en-US' matches 'en-US')\n}\n\n/**\n * Represents a parsed language tag from the header.\n */\ntype LanguagePreference = {\n languageCode: string;\n regionCode?: string;\n fullLocale: string;\n qualityScore: number;\n originalIndex: number;\n};\n\n/**\n * Represents the result of matching a requested language against an available language.\n */\ntype MatchResult = {\n providedIndex: number;\n headerIndex: number;\n qualityScore: number;\n specificityScore: number;\n};\n\n/**\n * Parses a single language tag string from the Accept-Language header.\n * Example input: \"en-US;q=0.8\"\n */\nconst parseLanguageTag = (\n tagString: string,\n index: number\n): LanguagePreference | null => {\n const match = LANGUAGE_FORMAT_REGULAR_EXPRESSION.exec(tagString);\n if (!match) {\n return null;\n }\n\n const languageCode = match[1];\n const regionCode = match[2];\n const parameters = match[3];\n\n // Construct the full locale string (e.g., \"en-US\" or \"en\")\n const fullLocale = regionCode\n ? `${languageCode}-${regionCode}`\n : languageCode;\n\n let qualityScore = DEFAULT_QUALITY_SCORE;\n\n // Parse parameters to find the quality score (\"q\")\n if (parameters) {\n const parameterList = parameters.split(';');\n for (const parameter of parameterList) {\n const [key, value] = parameter.split('=');\n if (key === 'q') {\n qualityScore = parseFloat(value);\n }\n }\n }\n\n return {\n languageCode,\n regionCode,\n qualityScore,\n originalIndex: index,\n fullLocale,\n };\n};\n\n/**\n * Parses the entire Accept-Language header string into a list of preferences.\n */\nconst parseAcceptLanguageHeader = (\n headerValue: string\n): LanguagePreference[] => {\n const rawTags = headerValue.split(',');\n const preferences: LanguagePreference[] = [];\n\n for (let index = 0; index < rawTags.length; index++) {\n const tag = rawTags[index].trim();\n const parsedLanguage = parseLanguageTag(tag, index);\n\n if (parsedLanguage) {\n preferences.push(parsedLanguage);\n }\n }\n\n return preferences;\n};\n\n/**\n * Calculates the specificity of a match between a provided language and a requested preference.\n */\nconst calculateMatchSpecificity = (\n providedLanguage: string,\n preference: LanguagePreference,\n providedIndex: number\n): MatchResult | null => {\n const parsedProvided = parseLanguageTag(providedLanguage, providedIndex);\n if (!parsedProvided) {\n return null;\n }\n\n let specificityScore = SpecificityWeight.None;\n\n const preferenceFullLower = preference.fullLocale.toLowerCase();\n const preferencePrefixLower = preference.languageCode.toLowerCase();\n const providedFullLower = parsedProvided.fullLocale.toLowerCase();\n const providedPrefixLower = parsedProvided.languageCode.toLowerCase();\n\n if (preferenceFullLower === providedFullLower) {\n specificityScore |= SpecificityWeight.Exact;\n } else if (preferencePrefixLower === providedFullLower) {\n specificityScore |= SpecificityWeight.Prefix;\n } else if (preferenceFullLower === providedPrefixLower) {\n specificityScore |= SpecificityWeight.Broad;\n } else if (preference.fullLocale !== '*') {\n return null;\n }\n\n return {\n providedIndex,\n headerIndex: preference.originalIndex,\n qualityScore: preference.qualityScore,\n specificityScore,\n };\n};\n\n/**\n * Determines the best match for a specific available language against the list of user accepted languages.\n */\nconst getBestMatchForLanguage = (\n providedLanguage: string,\n acceptedPreferences: LanguagePreference[],\n providedIndex: number\n): MatchResult => {\n // Initialize with a non-match priority\n let bestMatch: MatchResult = {\n headerIndex: -1,\n qualityScore: 0,\n specificityScore: 0,\n providedIndex,\n };\n\n for (const preference of acceptedPreferences) {\n const matchSpec = calculateMatchSpecificity(\n providedLanguage,\n preference,\n providedIndex\n );\n\n if (matchSpec) {\n // Compare current best match with new match\n const scoreDifference =\n bestMatch.specificityScore - matchSpec.specificityScore ||\n bestMatch.qualityScore - matchSpec.qualityScore ||\n bestMatch.headerIndex - matchSpec.headerIndex;\n\n // If the new match is better (difference < 0), update priority\n if (scoreDifference < 0) {\n bestMatch = matchSpec;\n }\n }\n }\n\n return bestMatch;\n};\n\n/**\n * Comparator function to sort language matches.\n * Sorting order:\n * 1. Quality Score (Descending)\n * 2. Specificity Score (Descending)\n * 3. Order in Header (Ascending - lower index is better)\n * 4. Order in Provided List (Ascending)\n */\nconst compareMatchResults = (a: MatchResult, b: MatchResult): number => {\n return (\n b.qualityScore - a.qualityScore ||\n b.specificityScore - a.specificityScore ||\n a.headerIndex - b.headerIndex ||\n a.providedIndex - b.providedIndex ||\n 0\n );\n};\n\n/**\n * Derives the list of preferred languages based on the Accept-Language header\n * and an optional list of available languages.\n */\
|
|
1
|
+
{"version":3,"file":"localeDetector.mjs","names":["preferences: LanguagePreference[]","bestMatch: MatchResult"],"sources":["../../../src/localization/localeDetector.ts"],"sourcesContent":["import type { Locale } from '@intlayer/types';\nimport { localeResolver } from './localeResolver';\n\n/**\n * Constants\n */\nconst LANGUAGE_FORMAT_REGULAR_EXPRESSION =\n /^\\s*([^\\s\\-;]+)(?:-([^\\s;]+))?\\s*(?:;(.*))?$/;\nconst DEFAULT_QUALITY_SCORE = 1;\n\n/**\n * Enumeration for specificity weights.\n * Higher values indicate a more precise match.\n */\nenum SpecificityWeight {\n None = 0,\n Broad = 1, // Matches prefix (e.g., 'en' matches 'en-US')\n Prefix = 2, // Matches prefix in reverse (e.g., 'en-US' matches 'en')\n Exact = 4, // Matches exact string (e.g., 'en-US' matches 'en-US')\n}\n\n/**\n * Represents a parsed language tag from the header.\n */\ntype LanguagePreference = {\n languageCode: string;\n regionCode?: string;\n fullLocale: string;\n qualityScore: number;\n originalIndex: number;\n};\n\n/**\n * Represents the result of matching a requested language against an available language.\n */\ntype MatchResult = {\n providedIndex: number;\n headerIndex: number;\n qualityScore: number;\n specificityScore: number;\n};\n\n/**\n * Parses a single language tag string from the Accept-Language header.\n * Example input: \"en-US;q=0.8\"\n */\nconst parseLanguageTag = (\n tagString: string,\n index: number\n): LanguagePreference | null => {\n const match = LANGUAGE_FORMAT_REGULAR_EXPRESSION.exec(tagString);\n if (!match) {\n return null;\n }\n\n const languageCode = match[1];\n const regionCode = match[2];\n const parameters = match[3];\n\n // Construct the full locale string (e.g., \"en-US\" or \"en\")\n const fullLocale = regionCode\n ? `${languageCode}-${regionCode}`\n : languageCode;\n\n let qualityScore = DEFAULT_QUALITY_SCORE;\n\n // Parse parameters to find the quality score (\"q\")\n if (parameters) {\n const parameterList = parameters.split(';');\n for (const parameter of parameterList) {\n const [key, value] = parameter.split('=');\n if (key === 'q') {\n qualityScore = parseFloat(value);\n }\n }\n }\n\n return {\n languageCode,\n regionCode,\n qualityScore,\n originalIndex: index,\n fullLocale,\n };\n};\n\n/**\n * Parses the entire Accept-Language header string into a list of preferences.\n */\nconst parseAcceptLanguageHeader = (\n headerValue: string\n): LanguagePreference[] => {\n const rawTags = headerValue.split(',');\n const preferences: LanguagePreference[] = [];\n\n for (let index = 0; index < rawTags.length; index++) {\n const tag = rawTags[index].trim();\n const parsedLanguage = parseLanguageTag(tag, index);\n\n if (parsedLanguage) {\n preferences.push(parsedLanguage);\n }\n }\n\n return preferences;\n};\n\n/**\n * Calculates the specificity of a match between a provided language and a requested preference.\n */\nconst calculateMatchSpecificity = (\n providedLanguage: string,\n preference: LanguagePreference,\n providedIndex: number\n): MatchResult | null => {\n const parsedProvided = parseLanguageTag(providedLanguage, providedIndex);\n if (!parsedProvided) {\n return null;\n }\n\n let specificityScore = SpecificityWeight.None;\n\n const preferenceFullLower = preference.fullLocale.toLowerCase();\n const preferencePrefixLower = preference.languageCode.toLowerCase();\n const providedFullLower = parsedProvided.fullLocale.toLowerCase();\n const providedPrefixLower = parsedProvided.languageCode.toLowerCase();\n\n if (preferenceFullLower === providedFullLower) {\n specificityScore |= SpecificityWeight.Exact;\n } else if (preferencePrefixLower === providedFullLower) {\n specificityScore |= SpecificityWeight.Prefix;\n } else if (preferenceFullLower === providedPrefixLower) {\n specificityScore |= SpecificityWeight.Broad;\n } else if (preference.fullLocale !== '*') {\n return null;\n }\n\n return {\n providedIndex,\n headerIndex: preference.originalIndex,\n qualityScore: preference.qualityScore,\n specificityScore,\n };\n};\n\n/**\n * Determines the best match for a specific available language against the list of user accepted languages.\n */\nconst getBestMatchForLanguage = (\n providedLanguage: string,\n acceptedPreferences: LanguagePreference[],\n providedIndex: number\n): MatchResult => {\n // Initialize with a non-match priority\n let bestMatch: MatchResult = {\n headerIndex: -1,\n qualityScore: 0,\n specificityScore: 0,\n providedIndex,\n };\n\n for (const preference of acceptedPreferences) {\n const matchSpec = calculateMatchSpecificity(\n providedLanguage,\n preference,\n providedIndex\n );\n\n if (matchSpec) {\n // Compare current best match with new match\n const scoreDifference =\n bestMatch.specificityScore - matchSpec.specificityScore ||\n bestMatch.qualityScore - matchSpec.qualityScore ||\n bestMatch.headerIndex - matchSpec.headerIndex;\n\n // If the new match is better (difference < 0), update priority\n if (scoreDifference < 0) {\n bestMatch = matchSpec;\n }\n }\n }\n\n return bestMatch;\n};\n\n/**\n * Comparator function to sort language matches.\n * Sorting order:\n * 1. Quality Score (Descending)\n * 2. Specificity Score (Descending)\n * 3. Order in Header (Ascending - lower index is better)\n * 4. Order in Provided List (Ascending)\n */\nconst compareMatchResults = (a: MatchResult, b: MatchResult): number => {\n return (\n b.qualityScore - a.qualityScore ||\n b.specificityScore - a.specificityScore ||\n a.headerIndex - b.headerIndex ||\n a.providedIndex - b.providedIndex ||\n 0\n );\n};\n\n/**\n * Derives the list of preferred languages based on the Accept-Language header\n * and an optional list of available languages.\n */\nexport const getPreferredLanguages = (\n acceptHeader: string | undefined,\n availableLanguages?: string[]\n): string[] => {\n // RFC 2616 sec 14.4: no header implies '*'\n const headerValue = acceptHeader === undefined ? '*' : acceptHeader || '';\n const acceptedPreferences = parseAcceptLanguageHeader(headerValue);\n\n // If no specific languages are provided to filter against, return the header languages sorted by quality\n if (!availableLanguages) {\n return acceptedPreferences\n .filter((preference) => preference.qualityScore > 0)\n .sort((a, b) => b.qualityScore - a.qualityScore) // Simple sort by quality\n .map((preference) => preference.fullLocale);\n }\n\n // Map available languages to their match priority against the header\n const matchResults = availableLanguages.map((language, index) =>\n getBestMatchForLanguage(language, acceptedPreferences, index)\n );\n\n return matchResults\n .filter((result) => result.qualityScore > 0)\n .sort(compareMatchResults)\n .map((result) => availableLanguages[result.providedIndex]);\n};\n\n/**\n * Detects the locale from the request headers.\n *\n * Headers are provided by the browser/client and can be used to determine the user's preferred language.\n * This function intersects the user's `Accept-Language` header with the application's available locales.\n */\nexport const localeDetector = (\n headers: Record<string, string | undefined>,\n availableLocales?: Locale[],\n defaultLocale?: Locale\n): Locale => {\n const acceptLanguageHeader = headers['accept-language'];\n\n const preferredLocaleStrings = getPreferredLanguages(\n acceptLanguageHeader,\n availableLocales as string[]\n );\n\n return localeResolver(\n preferredLocaleStrings as Locale[],\n availableLocales,\n defaultLocale\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NodeProps, Plugins } from "../interpreter/getContent/plugins.js";
|
|
2
2
|
import "../interpreter/index.js";
|
|
3
|
-
import * as
|
|
3
|
+
import * as _intlayer_types12 from "@intlayer/types";
|
|
4
4
|
import { ContentNode, DeclaredLocales, Dictionary, LocalesValues } from "@intlayer/types";
|
|
5
5
|
|
|
6
6
|
//#region src/deepTransformPlugins/getFilterMissingTranslationsContent.d.ts
|
|
@@ -24,11 +24,11 @@ declare const getFilterMissingTranslationsContent: <T extends ContentNode, L ext
|
|
|
24
24
|
declare const getFilterMissingTranslationsDictionary: (dictionary: Dictionary, localeToCheck: LocalesValues) => {
|
|
25
25
|
content: any;
|
|
26
26
|
$schema?: string;
|
|
27
|
-
id?:
|
|
27
|
+
id?: _intlayer_types12.DictionaryId;
|
|
28
28
|
projectIds?: string[];
|
|
29
|
-
localId?:
|
|
30
|
-
localIds?:
|
|
31
|
-
key:
|
|
29
|
+
localId?: _intlayer_types12.LocalDictionaryId;
|
|
30
|
+
localIds?: _intlayer_types12.LocalDictionaryId[];
|
|
31
|
+
key: _intlayer_types12.DictionaryKey;
|
|
32
32
|
title?: string;
|
|
33
33
|
description?: string;
|
|
34
34
|
versions?: string[];
|
|
@@ -36,11 +36,11 @@ declare const getFilterMissingTranslationsDictionary: (dictionary: Dictionary, l
|
|
|
36
36
|
filePath?: string;
|
|
37
37
|
tags?: string[];
|
|
38
38
|
locale?: LocalesValues;
|
|
39
|
-
fill?:
|
|
39
|
+
fill?: _intlayer_types12.Fill;
|
|
40
40
|
filled?: true;
|
|
41
41
|
priority?: number;
|
|
42
42
|
live?: boolean;
|
|
43
|
-
location?:
|
|
43
|
+
location?: _intlayer_types12.DictionaryLocation;
|
|
44
44
|
};
|
|
45
45
|
//#endregion
|
|
46
46
|
export { filterMissingTranslationsOnlyPlugin, getFilterMissingTranslationsContent, getFilterMissingTranslationsDictionary };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFilterMissingTranslationsContent.d.ts","names":[],"sources":["../../../src/deepTransformPlugins/getFilterMissingTranslationsContent.ts"],"sourcesContent":[],"mappings":";;;;;;;cAmMa,qDACI,kBACd;;AAFH;AA8LA;;;;;;;;AA0BA;;;;cA1Ba,gDACD,uBACA,gBAAgB,uBAEpB,kBACS,cACJ;cAoBA,qDACC,2BACG;;;OAAa,
|
|
1
|
+
{"version":3,"file":"getFilterMissingTranslationsContent.d.ts","names":[],"sources":["../../../src/deepTransformPlugins/getFilterMissingTranslationsContent.ts"],"sourcesContent":[],"mappings":";;;;;;;cAmMa,qDACI,kBACd;;AAFH;AA8LA;;;;;;;;AA0BA;;;;cA1Ba,gDACD,uBACA,gBAAgB,uBAEpB,kBACS,cACJ;cAoBA,qDACC,2BACG;;;OAAa,iBAAA,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NodeProps } from "../interpreter/getContent/plugins.js";
|
|
2
2
|
import "../interpreter/index.js";
|
|
3
|
-
import * as
|
|
3
|
+
import * as _intlayer_types6 from "@intlayer/types";
|
|
4
4
|
import { ContentNode, Dictionary, LocalesValues } from "@intlayer/types";
|
|
5
5
|
|
|
6
6
|
//#region src/deepTransformPlugins/getFilteredLocalesContent.d.ts
|
|
@@ -8,11 +8,11 @@ declare const getFilteredLocalesContent: (node: ContentNode, locales: LocalesVal
|
|
|
8
8
|
declare const getFilteredLocalesDictionary: (dictionary: Dictionary, locale: LocalesValues | LocalesValues[]) => {
|
|
9
9
|
content: any;
|
|
10
10
|
$schema?: string;
|
|
11
|
-
id?:
|
|
11
|
+
id?: _intlayer_types6.DictionaryId;
|
|
12
12
|
projectIds?: string[];
|
|
13
|
-
localId?:
|
|
14
|
-
localIds?:
|
|
15
|
-
key:
|
|
13
|
+
localId?: _intlayer_types6.LocalDictionaryId;
|
|
14
|
+
localIds?: _intlayer_types6.LocalDictionaryId[];
|
|
15
|
+
key: _intlayer_types6.DictionaryKey;
|
|
16
16
|
title?: string;
|
|
17
17
|
description?: string;
|
|
18
18
|
versions?: string[];
|
|
@@ -20,11 +20,11 @@ declare const getFilteredLocalesDictionary: (dictionary: Dictionary, locale: Loc
|
|
|
20
20
|
filePath?: string;
|
|
21
21
|
tags?: string[];
|
|
22
22
|
locale?: LocalesValues;
|
|
23
|
-
fill?:
|
|
23
|
+
fill?: _intlayer_types6.Fill;
|
|
24
24
|
filled?: true;
|
|
25
25
|
priority?: number;
|
|
26
26
|
live?: boolean;
|
|
27
|
-
location?:
|
|
27
|
+
location?: _intlayer_types6.DictionaryLocation;
|
|
28
28
|
};
|
|
29
29
|
//#endregion
|
|
30
30
|
export { getFilteredLocalesContent, getFilteredLocalesDictionary };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFilteredLocalesContent.d.ts","names":[],"sources":["../../../src/deepTransformPlugins/getFilteredLocalesContent.ts"],"sourcesContent":[],"mappings":";;;;;;cAsCa,kCACL,sBACG,gBAAgB,4BACd;cAwBA,2CACC,oBACJ,gBAAgB;;;EA7Bb,EAAA,CAAA,EA6B0B,
|
|
1
|
+
{"version":3,"file":"getFilteredLocalesContent.d.ts","names":[],"sources":["../../../src/deepTransformPlugins/getFilteredLocalesContent.ts"],"sourcesContent":[],"mappings":";;;;;;cAsCa,kCACL,sBACG,gBAAgB,4BACd;cAwBA,2CACC,oBACJ,gBAAgB;;;EA7Bb,EAAA,CAAA,EA6B0B,gBAAA,CAAA,YAbtC;EAfO,UAAA,CAAA,EAAA,MAAA,EAAA;EACG,OAAA,CAAA,oCAAA;EAAgB,QAAA,CAAA,sCAAA;EACd,GAAA,gCAAA;EAAS,KAAA,CAAA,EAAA,MAAA;EAwBT,WAAA,CAAA,EAAA,MAAA;EACC,QAAA,CAAA,EAAA,MAAA,EAAA;EACJ,OAAA,CAAA,EAAA,MAAA;EAAgB,QAAA,CAAA,EAAA,MAAA;EAAa,IAAA,CAAA,EAAA,MAAA,EAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.d.ts","names":[],"sources":["../../../../src/interpreter/getContent/plugins.ts"],"sourcesContent":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","names":[],"sources":["../../../../src/interpreter/getContent/plugins.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ import { Locale } from "@intlayer/types";
|
|
|
4
4
|
type RequestContext = {
|
|
5
5
|
getHeader?: (name: string) => string | null | undefined;
|
|
6
6
|
getCookie?: (name: string) => string | null | undefined;
|
|
7
|
-
getAllHeaders?: () => Record<string, string> | Promise<Record<string, string>>;
|
|
8
7
|
};
|
|
9
8
|
declare const getLocale: (ctx?: RequestContext) => Promise<Locale>;
|
|
10
9
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLocale.d.ts","names":[],"sources":["../../../src/localization/getLocale.ts"],"sourcesContent":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"getLocale.d.ts","names":[],"sources":["../../../src/localization/getLocale.ts"],"sourcesContent":[],"mappings":";;;KAMY,cAAA;;EAAA,SAAA,CAAA,EAAA,CAAA,IAAc,EAAA,MAAA,EAAA,GAAA,MAAA,GAAA,IAAA,GAAA,SAAA;AAK1B,CAAA;AAAqC,cAAxB,SAAwB,EAAA,CAAA,GAAA,CAAA,EAAA,cAAA,EAAA,GAAsB,OAAtB,CAA8B,MAA9B,CAAA"}
|
|
@@ -2,6 +2,11 @@ import { Locale } from "@intlayer/types";
|
|
|
2
2
|
|
|
3
3
|
//#region src/localization/localeDetector.d.ts
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Derives the list of preferred languages based on the Accept-Language header
|
|
7
|
+
* and an optional list of available languages.
|
|
8
|
+
*/
|
|
9
|
+
declare const getPreferredLanguages: (acceptHeader: string | undefined, availableLanguages?: string[]) => string[];
|
|
5
10
|
/**
|
|
6
11
|
* Detects the locale from the request headers.
|
|
7
12
|
*
|
|
@@ -10,5 +15,5 @@ import { Locale } from "@intlayer/types";
|
|
|
10
15
|
*/
|
|
11
16
|
declare const localeDetector: (headers: Record<string, string | undefined>, availableLocales?: Locale[], defaultLocale?: Locale) => Locale;
|
|
12
17
|
//#endregion
|
|
13
|
-
export { localeDetector };
|
|
18
|
+
export { getPreferredLanguages, localeDetector };
|
|
14
19
|
//# sourceMappingURL=localeDetector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localeDetector.d.ts","names":[],"sources":["../../../src/localization/localeDetector.ts"],"sourcesContent":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"localeDetector.d.ts","names":[],"sources":["../../../src/localization/localeDetector.ts"],"sourcesContent":[],"mappings":";;;;;;AA+MA;AAiCA;AACW,cAlCE,qBAkCF,EAAA,CAAA,YAAA,EAAA,MAAA,GAAA,SAAA,EAAA,kBAAA,CAAA,EAAA,MAAA,EAAA,EAAA,GAAA,MAAA,EAAA;;;;;;;cADE,0BACF,uDACU,0BACH,WACf"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intlayer/core",
|
|
3
|
-
"version": "7.3.
|
|
3
|
+
"version": "7.3.13",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Includes core Intlayer functions like translation, dictionary, and utility functions shared across multiple packages.",
|
|
6
6
|
"keywords": [
|
|
@@ -102,11 +102,11 @@
|
|
|
102
102
|
"typecheck": "tsc --noEmit --project tsconfig.types.json"
|
|
103
103
|
},
|
|
104
104
|
"dependencies": {
|
|
105
|
-
"@intlayer/api": "7.3.
|
|
106
|
-
"@intlayer/config": "7.3.
|
|
107
|
-
"@intlayer/dictionaries-entry": "7.3.
|
|
108
|
-
"@intlayer/types": "7.3.
|
|
109
|
-
"@intlayer/unmerged-dictionaries-entry": "7.3.
|
|
105
|
+
"@intlayer/api": "7.3.13",
|
|
106
|
+
"@intlayer/config": "7.3.13",
|
|
107
|
+
"@intlayer/dictionaries-entry": "7.3.13",
|
|
108
|
+
"@intlayer/types": "7.3.13",
|
|
109
|
+
"@intlayer/unmerged-dictionaries-entry": "7.3.13",
|
|
110
110
|
"defu": "6.1.4"
|
|
111
111
|
},
|
|
112
112
|
"devDependencies": {
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
"rimraf": "6.1.2",
|
|
118
118
|
"tsdown": "0.16.8",
|
|
119
119
|
"typescript": "5.9.3",
|
|
120
|
-
"vitest": "4.0.
|
|
120
|
+
"vitest": "4.0.15"
|
|
121
121
|
},
|
|
122
122
|
"engines": {
|
|
123
123
|
"node": ">=14.18"
|