fix: locale routing

This commit is contained in:
Adam
2026-02-09 13:26:27 -06:00
parent 56b340b5d5
commit 3dc720ff9c
2 changed files with 22 additions and 6 deletions

View File

@@ -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")) {

View File

@@ -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) {