fix: locale routing
This commit is contained in:
@@ -69,7 +69,7 @@ const starts = [
|
||||
["en", "root"],
|
||||
] as const
|
||||
|
||||
export function matchLocale(input: string) {
|
||||
function parse(input: string) {
|
||||
let decoded = ""
|
||||
try {
|
||||
decoded = decodeURIComponent(input)
|
||||
@@ -79,6 +79,22 @@ export function matchLocale(input: string) {
|
||||
|
||||
const value = decoded.trim().toLowerCase()
|
||||
if (!value) return null
|
||||
return value
|
||||
}
|
||||
|
||||
export function exactLocale(input: string) {
|
||||
const value = parse(input)
|
||||
if (!value) return null
|
||||
if (value in localeAlias) {
|
||||
return localeAlias[value as keyof typeof localeAlias]
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
export function matchLocale(input: string) {
|
||||
const value = parse(input)
|
||||
if (!value) return null
|
||||
|
||||
if (value.startsWith("zh")) {
|
||||
if (value.includes("hant") || value.includes("-tw") || value.includes("-hk") || value.includes("-mo")) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { defineMiddleware } from "astro:middleware"
|
||||
import { matchLocale } from "./i18n/locales"
|
||||
import { exactLocale, matchLocale } from "./i18n/locales"
|
||||
|
||||
function docsAlias(pathname: string) {
|
||||
const hit = /^\/docs\/([^/]+)(\/.*)?$/.exec(pathname)
|
||||
@@ -7,12 +7,12 @@ function docsAlias(pathname: string) {
|
||||
|
||||
const value = hit[1] ?? ""
|
||||
const tail = hit[2] ?? ""
|
||||
const locale = matchLocale(value)
|
||||
const locale = exactLocale(value)
|
||||
if (!locale) return null
|
||||
if (locale === "root") return `/docs${tail}`
|
||||
if (value === locale) return null
|
||||
|
||||
return `/docs/${locale}${tail}`
|
||||
const next = locale === "root" ? `/docs${tail}` : `/docs/${locale}${tail}`
|
||||
if (next === pathname) return null
|
||||
return next
|
||||
}
|
||||
|
||||
function localeFromCookie(header: string | null) {
|
||||
|
||||
Reference in New Issue
Block a user