This commit is contained in:
184
node_modules/astro/dist/i18n/utils.js
generated
vendored
184
node_modules/astro/dist/i18n/utils.js
generated
vendored
@@ -1,184 +0,0 @@
|
||||
import { normalizeTheLocale, toCodes } from "./index.js";
|
||||
function parseLocale(header) {
|
||||
if (header === "*") {
|
||||
return [{ locale: header, qualityValue: void 0 }];
|
||||
}
|
||||
const result = [];
|
||||
const localeValues = header.split(",").map((str) => str.trim());
|
||||
for (const localeValue of localeValues) {
|
||||
const split = localeValue.split(";").map((str) => str.trim());
|
||||
const localeName = split[0];
|
||||
const qualityValue = split[1];
|
||||
if (!split) {
|
||||
continue;
|
||||
}
|
||||
if (qualityValue && qualityValue.startsWith("q=")) {
|
||||
const qualityValueAsFloat = Number.parseFloat(qualityValue.slice("q=".length));
|
||||
if (Number.isNaN(qualityValueAsFloat) || qualityValueAsFloat > 1) {
|
||||
result.push({
|
||||
locale: localeName,
|
||||
qualityValue: void 0
|
||||
});
|
||||
} else {
|
||||
result.push({
|
||||
locale: localeName,
|
||||
qualityValue: qualityValueAsFloat
|
||||
});
|
||||
}
|
||||
} else {
|
||||
result.push({
|
||||
locale: localeName,
|
||||
qualityValue: void 0
|
||||
});
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function sortAndFilterLocales(browserLocaleList, locales) {
|
||||
const normalizedLocales = toCodes(locales).map(normalizeTheLocale);
|
||||
return browserLocaleList.filter((browserLocale) => {
|
||||
if (browserLocale.locale !== "*") {
|
||||
return normalizedLocales.includes(normalizeTheLocale(browserLocale.locale));
|
||||
}
|
||||
return true;
|
||||
}).sort((a, b) => {
|
||||
if (a.qualityValue && b.qualityValue) {
|
||||
return Math.sign(b.qualityValue - a.qualityValue);
|
||||
}
|
||||
return 0;
|
||||
});
|
||||
}
|
||||
function computePreferredLocale(request, locales) {
|
||||
const acceptHeader = request.headers.get("Accept-Language");
|
||||
let result = void 0;
|
||||
if (acceptHeader) {
|
||||
const browserLocaleList = sortAndFilterLocales(parseLocale(acceptHeader), locales);
|
||||
const firstResult = browserLocaleList.at(0);
|
||||
if (firstResult && firstResult.locale !== "*") {
|
||||
for (const currentLocale of locales) {
|
||||
if (typeof currentLocale === "string") {
|
||||
if (normalizeTheLocale(currentLocale) === normalizeTheLocale(firstResult.locale)) {
|
||||
result = currentLocale;
|
||||
}
|
||||
} else {
|
||||
for (const currentCode of currentLocale.codes) {
|
||||
if (normalizeTheLocale(currentCode) === normalizeTheLocale(firstResult.locale)) {
|
||||
result = currentLocale.path;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function computePreferredLocaleList(request, locales) {
|
||||
const acceptHeader = request.headers.get("Accept-Language");
|
||||
let result = [];
|
||||
if (acceptHeader) {
|
||||
const browserLocaleList = sortAndFilterLocales(parseLocale(acceptHeader), locales);
|
||||
if (browserLocaleList.length === 1 && browserLocaleList.at(0).locale === "*") {
|
||||
return locales.map((locale) => {
|
||||
if (typeof locale === "string") {
|
||||
return locale;
|
||||
} else {
|
||||
return locale.codes.at(0);
|
||||
}
|
||||
});
|
||||
} else if (browserLocaleList.length > 0) {
|
||||
for (const browserLocale of browserLocaleList) {
|
||||
for (const loopLocale of locales) {
|
||||
if (typeof loopLocale === "string") {
|
||||
if (normalizeTheLocale(loopLocale) === normalizeTheLocale(browserLocale.locale)) {
|
||||
result.push(loopLocale);
|
||||
}
|
||||
} else {
|
||||
for (const code of loopLocale.codes) {
|
||||
if (code === browserLocale.locale) {
|
||||
result.push(loopLocale.path);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function computeCurrentLocale(pathname, locales, defaultLocale) {
|
||||
for (const segment of pathname.split("/")) {
|
||||
for (const locale of locales) {
|
||||
if (typeof locale === "string") {
|
||||
if (!segment.includes(locale)) continue;
|
||||
if (normalizeTheLocale(locale) === normalizeTheLocale(segment)) {
|
||||
return locale;
|
||||
}
|
||||
} else {
|
||||
if (locale.path === segment) {
|
||||
return locale.codes.at(0);
|
||||
} else {
|
||||
for (const code of locale.codes) {
|
||||
if (normalizeTheLocale(code) === normalizeTheLocale(segment)) {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const locale of locales) {
|
||||
if (typeof locale === "string") {
|
||||
if (locale === defaultLocale) {
|
||||
return locale;
|
||||
}
|
||||
} else {
|
||||
if (locale.path === defaultLocale) {
|
||||
return locale.codes.at(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function toRoutingStrategy(routing, domains) {
|
||||
let strategy;
|
||||
const hasDomains = domains ? Object.keys(domains).length > 0 : false;
|
||||
if (routing === "manual") {
|
||||
strategy = "manual";
|
||||
} else {
|
||||
if (!hasDomains) {
|
||||
if (routing?.prefixDefaultLocale === true) {
|
||||
if (routing.redirectToDefaultLocale) {
|
||||
strategy = "pathname-prefix-always";
|
||||
} else {
|
||||
strategy = "pathname-prefix-always-no-redirect";
|
||||
}
|
||||
} else {
|
||||
strategy = "pathname-prefix-other-locales";
|
||||
}
|
||||
} else {
|
||||
if (routing?.prefixDefaultLocale === true) {
|
||||
if (routing.redirectToDefaultLocale) {
|
||||
strategy = "domains-prefix-always";
|
||||
} else {
|
||||
strategy = "domains-prefix-always-no-redirect";
|
||||
}
|
||||
} else {
|
||||
strategy = "domains-prefix-other-locales";
|
||||
}
|
||||
}
|
||||
}
|
||||
return strategy;
|
||||
}
|
||||
function toFallbackType(routing) {
|
||||
if (routing === "manual") {
|
||||
return "rewrite";
|
||||
}
|
||||
return routing.fallbackType;
|
||||
}
|
||||
export {
|
||||
computeCurrentLocale,
|
||||
computePreferredLocale,
|
||||
computePreferredLocaleList,
|
||||
parseLocale,
|
||||
toFallbackType,
|
||||
toRoutingStrategy
|
||||
};
|
||||
Reference in New Issue
Block a user